From eac2b896a0cc47996ef1baf8150ad43088c8d5c4 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:07:55 -0400 Subject: [PATCH 01/16] =?UTF-8?q?wai.live.cowatch:=20co-watch=20rooms=20?= =?UTF-8?q?=E2=80=94=20controls=20at=20a=20room-clock=20instant,=20the=20c?= =?UTF-8?q?ontrolled=20position,=20signed=20presentation=20statements=20an?= =?UTF-8?q?d=20recomputed=20skew?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The extension text (wai/extensions/co-watch.md), the co_watch module of wai-rs behind its own feature, and the corpus live-conformance/cowatch/ written by wai_co_watch_vectors from fixed seeds: three accepted rooms, a gap, and refused vectors covering every reason of §12. Co-Authored-By: Claude Opus 5.5 --- wai/extensions/co-watch.md | 664 ++ wai/live-conformance/cowatch/vectors.json | 7211 ++++++++++++++++++++ wai/wai-rs/Cargo.toml | 19 + wai/wai-rs/src/bin/wai_co_watch_vectors.rs | 74 + wai/wai-rs/src/co_watch.rs | 1640 +++++ wai/wai-rs/src/co_watch/corpus.rs | 1042 +++ wai/wai-rs/src/lib.rs | 8 + wai/wai-rs/tests/co_watch.rs | 52 + 8 files changed, 10710 insertions(+) create mode 100644 wai/extensions/co-watch.md create mode 100644 wai/live-conformance/cowatch/vectors.json create mode 100644 wai/wai-rs/src/bin/wai_co_watch_vectors.rs create mode 100644 wai/wai-rs/src/co_watch.rs create mode 100644 wai/wai-rs/src/co_watch/corpus.rs create mode 100644 wai/wai-rs/tests/co_watch.rs diff --git a/wai/extensions/co-watch.md b/wai/extensions/co-watch.md new file mode 100644 index 000000000..be43c5993 --- /dev/null +++ b/wai/extensions/co-watch.md @@ -0,0 +1,664 @@ +# WAI Extension: Co-watch + +> Status: Draft. Registers the record `wai.live.cowatch`: people in different places watching +> one programme together in a room, with shared control and with their sync measured. The room +> authority signs a **co-watch policy**, `WXP1`, naming the **source** the room watches (a WAI +> package, a sequence of on-demand objects, or another room's recording) and the bounds every +> rule below holds to. A principal whose grant allows it sends **controls** (`play`, `pause`, +> `seek` and `rate`), each effective at a stated instant of the room clock a little ahead of +> when it is sent, so that every viewer applies it at that same instant whatever its own +> latency; controls for one instant resolve by a pinned order, and the controls together +> define the **controlled position** of the source at every instant. Each viewer's player +> signs, periodically, a **presentation statement**, `WXS1`: the source position it was +> presenting at a room-clock instant, under the player's key. From those statements, the room +> clock signs a **skew statement**, `WXK1`, per window of the room clock: how far each viewer +> was from the controlled position, and each pair of viewers from one another, as percentiles, +> with a verdict against the policy's bound, which anyone holding the room recomputes; a viewer +> whose statements are missing is `unknown`, never in sync. A viewer that drifts past the bound +> corrects by a pinned **catch-up rule**: a rate nudge within limits, or a seek past a +> threshold. Controls and statements ride in the room's events, as `meta` payloads that their +> authors sign. No new transport. The reference implementation is the `co_watch` module of +> `wai-rs` (feature `co_watch`); the corpus is +> [`live-conformance/cowatch/`](../live-conformance/cowatch/), and its second implementation +> is `live-conformance/co_watch_verify.py`. +> Keywords **MUST**, **MUST NOT**, **SHOULD**, **MAY** are RFC 2119/8174. +> +> Texts read for this revision: the live family this extension builds on, as merged +> ([live-events](live-events.md), [live-rooms](live-rooms.md), +> [live-recording](live-recording.md), [live-metering](live-metering.md) and +> [ad-presentation](ad-presentation.md)), [synthesis](synthesis.md) §10.3 and +> [delivery-telemetry](delivery-telemetry.md); RFC 8032 and FIPS 180-4. No outside text is +> pinned: the rules of this extension are WAI's own. + +## 1. Scope + +In scope: the co-watch policy, its signature, the policy in effect at each instant and the +source it names (§3); how this extension's statements ride in a room's events, who may sign +each, and the grant attribute it reads (§4); controls, who may send them, their rules and the +order in which they apply (§5); the controlled position (§6); presentation statements (§7); +windows, samples, errors, percentiles, verdicts and the skew statement (§8); the catch-up rule +(§9); where each rule is enforced (§10); and verification (§11). + +Out of scope: a transport; how a player fetches and decodes the source; how a player estimates +the room clock (§7.3 states what it **SHOULD** do, and §14 what a wrong estimate does); how a +sink renders a control, an indicator or a verdict; and the room's media and chat, which +[live-rooms](live-rooms.md) and [live-events](live-events.md) already carry, so that a co-watch +room is also a room whose participants may see and hear one another. + +Relationship to the core spec: `wai.live.cowatch` is a **record** ([SPEC](../SPEC.md) §5): +signed records a WAI tool emits and verifies. It names no payload format and is not +dispatchable. + +Relationship to [live-events](live-events.md): this extension changes nothing in it. Its +statements are payloads of the `meta` kind (§4.2 there), which live-events leaves to +applications, so every statement is signed by its author, chained, stamped with the room clock +and rate-bounded by its author's policy (live-events §5, §6). A control is not a `control` +event (live-events §4.9): that kind's commands are fixed, and a record of another command is +refused by every verifier of the current revision. + +Relationship to [live-rooms](live-rooms.md): the descriptor's and the grant's layouts are +unchanged. A room states its co-watch policy in a record of its own, `WXP1` (§3), chained like +live-moderation's review policy. Who may control is the direct power (live-rooms §3.3, bit 1) +or a grant attribute (§4.4), which live-rooms §4.4 signs with the grant and leaves to the +extensions that read it: a new power bit would be refused by every room verifier of the current +revision (live-rooms §3.4: no power above bit 4). + +Relationship to [live-recording](live-recording.md): a room's recording is a source (§3.5). A +viewer that watches it through a relay fetches its tracks below their live edge, from the +relay's DVR window or its store, which live-rooms §10.6 grants by the seek power: a co-watch +room watching a recording gives its viewers that power. + +Relationship to [ad-presentation](ad-presentation.md) and [synthesis](synthesis.md) §10.3: a +presentation statement is a player's signed claim about what it presented, as a presentation +claim and a player's log are. It is signed under the player's key as a presentation claim is +(ad-presentation §5.3), and chained, as a player's log is, by the event chain it rides in. + +Relationship to [delivery-telemetry](delivery-telemetry.md): a player **MAY** also report its +`present` and `stall-start` observations there. Those are unsigned and advisory (§1.1 there); a +presentation statement is signed, and skew is computed from statements alone. + +## 2. Terms + +- **Room**, **room clock**, **principal**, **event**, **chain**, **grant**, **grant in effect**, + **room key**, **merged order**: as in live-events §2 and live-rooms §2 and §9.2. A room key + is the room authority's key or the clock's. +- **Statement**: the payload of a `meta` event whose first four bytes are one of the magics of + §4.1. It is named by the digest of its event (live-events §3.2). +- **Source**: what the room watches (§3.5). A **source position** is an instant of the source's + own media time, in microseconds from its start. +- **Controlled position**: the source position the controls define for an instant of the room + clock (§6). +- **Player**: the software that presents the source to a viewer and states what it presented + (§7). Its **key** is the key of the principal it presents for. +- **Viewer**: a principal, not a room key, present in the room under a grant that may + subscribe (live-rooms §3.3). +- **Error** of a presentation statement: its position less the controlled position at its + instant (§8.3). **Skew** of two viewers: the difference of their errors. +- *µs* is microseconds of room clock; a *rate* is in millionths, so 1 000 000 is normal speed. + +Integers are little-endian; a signed integer is two's complement. A digest is SHA-256 (FIPS +180-4), 32 bytes. Ed25519 is RFC 8032's, verified strictly ([SPEC](../SPEC.md) §7 +*Signatures*): a key that fails step 1 or 2 is `bad_key`, and a signature that fails a later +step is `bad_signature`. + +## 3. The co-watch policy + +### 3.1 Layout + +| field | size | meaning | +|---|---|---| +| `magic` | 4 | `WXP1` (ASCII) | +| `version` | 1 | 1 in this revision | +| `room` | 32 | the room id (live-rooms §3.2) | +| `prev` | 32 | the digest of the policy this one replaces (§3.4); 32 zero bytes for the first | +| `effective` | 8 | u64: the room-clock instant from which this policy applies; 0 for the first | +| `source_type` | 1 | 1 a WAI package, 2 an object sequence, 3 a recording of a room (§3.5) | +| `source` | 32 | the source's digest (§3.5) | +| `duration_us` | 8 | u64: the source's duration, above 0 | +| `lead_ms` | 4 | u32: the least time from a control's sending to its instant (§5.3), above 0 | +| `horizon_ms` | 4 | u32: the most time from a control's sending to its instant, at least `lead_ms` | +| `min_rate`, `max_rate` | 4 each | u32: the rates a control and the catch-up rule may set, `min_rate` above 0 and at most 1 000 000, `max_rate` at least 1 000 000 | +| `period_ms` | 4 | u32: the slot length: a player states its presentation at least once in each (§7.3, §8.1), above 0 | +| `window_ms` | 4 | u32: the length of a skew window (§8.1), a multiple of `period_ms` of 1 to 1000 slots | +| `settle_ms` | 4 | u32: how long after a viewer's join, a control's instant or a source's start a sample is settling (§8.3) | +| `bound_us` | 4 | u32: the sync bound (§8.5), above 0 | +| `quantile` | 1 | the percentile a verdict is taken at (§8.5), 1 to 100 | +| `tolerance_us` | 4 | u32: the error the catch-up rule leaves alone (§9), at most `bound_us` | +| `nudge` | 4 | u32: the rate the catch-up rule adds or takes away (§9), above 0 | +| `seek_us` | 4 | u32: the error past which the catch-up rule seeks (§9), above `bound_us` | +| `sig` | 64 | §3.2 | + +### 3.2 Digest and signature + +The **digest** of a policy is SHA-256 over its record from `magic` through `seek_us`. The +**signature** is Ed25519 by the room descriptor's `authority` over the 20 bytes +`wai:co-watch-policy` (ASCII) and 0x01, followed by the bytes the digest covers. + +### 3.3 Reading and rules + +A reader reads exactly the bytes it is given as one policy, in the order of §3.1, and refuses +at the first of these that holds: + +1. Fewer than 4 bytes: `truncated`. A magic other than `WXP1`: `malformed`. No byte after the + magic: `truncated`. A version other than 1: `unknown_version`. +2. The bytes end before a field the layout requires: `truncated`. +3. Bytes after `sig`: `malformed`. + +It then holds the policy to the rules of §3.1's table, and refuses one that breaks any of them +as `cw_policy_malformed`: `source_type` is 1, 2 or 3; `duration_us`, `lead_ms`, `period_ms`, +`bound_us` and `nudge` are above 0; `horizon_ms` is at least `lead_ms`; `min_rate` is above 0 +and at most 1 000 000, and `max_rate` at least 1 000 000; `window_ms` is `period_ms` times a +whole number from 1 to 1000; `quantile` is 1 to 100; `tolerance_us` is at most `bound_us`; and +`seek_us` is above `bound_us`. Then its `room` is the room id (`wrong_room`), its signature +verifies (`bad_key`, `bad_signature`), and its link holds (§3.4, `cw_policy_unlinked`). + +### 3.4 The policy in effect + +A verifier is given a room's policies in a list. The first has `prev` zero and `effective` 0. +Each later one has as `prev` the digest of the one before it in the list, an `effective` above +that one's, and, when it names the source of the one before it (the same `source_type` and +`source`), that one's `duration_us`. A policy that breaks this is refused `cw_policy_unlinked`. +The **policy in effect** at room-clock instant *t* is the last of the list whose `effective` is +at or below *t*. + +A policy is replaced, never amended. A policy that names another source than the one before it +**starts** that source at its `effective`: the controlled position begins again (§6.4). One +that names the same source changes the bounds alone, and the controlled position runs on. + +### 3.5 The source + +- **A WAI package** (1): `source` is the `receipt_hash` of the package's receipt + ([packaging](packaging.md) §9). A source position is the package's presentation time. +- **An object sequence** (2): on-demand media objects presented in order, each its content hash + (SHA-256 of the object's bytes as served) and its presentation duration in milliseconds (a + u32, at least 1). `source` is SHA-256 over the 20 bytes `wai:co-watch-source` (ASCII) and + 0x01, the objects' count (u32), and for each object in order its content hash and its + duration; `duration_us` is 1000 times the sum of the durations. The object at index *j* + holds the source positions from 1000 times the sum of the durations before it, for 1000 + times its own. This is the form of ad-presentation §4's creative digest, under a label of + its own. +- **A recording of a room** (3): `source` is the digest of the recording's manifest + ([live-recording](live-recording.md) §4.1). A source position is the recorded room's clock + less the recording's first instant. + +A verifier given an object sequence's objects for a policy checks them against it: the policy +names an object sequence, its `source` is their digest, and its `duration_us` is 1000 times the +sum of their durations. Otherwise `cw_source_mismatch`. A player checks the objects it fetches +by their content hashes, so it presents what the policy names. + +## 4. Statements + +### 4.1 Carriage + +| magic | statement | section | who signs it | +|---|---|---|---| +| `WXC1` | control | §5.1 | a room key, or a principal whose grant in effect allows the action (§5.2) | +| `WXS1` | presentation statement | §7.1 | a viewer's player, with the viewer's key: any principal that is not a room key | +| `WXK1` | skew statement | §8.4 | a room key | + +Each statement is the payload of a `meta` event: its magic, a `version` byte of 1, and the +fields its section lists. A `meta` payload whose first four bytes are none of these magics is +not this extension's, and a sink that does not implement it shows none of them: they are timed +metadata for its application (live-events §4.2). Every statement is bounded by its author's +policy (live-events §5, `max_payload`), 1024 bytes for a room key, which bounds the counts §8.4 +allows. + +### 4.2 Reading + +A statement that ends before a field, that holds bytes after its last field, whose `version` is +not 1, or whose field holds a value its section does not allow, is `cw_statement_malformed`. + +### 4.3 Who signs + +A presentation statement by a room key, and a skew statement by any other principal, are +`cw_not_permitted`. A control's author is checked by §5.2. A grant's powers and attributes are +those of the author's grant in effect at its event's `t` (live-rooms §9.2 step 4); a room key +holds every power. Since a statement is a `meta` event, the room verifier has already held it +to its author's grant: a principal whose policy does not permit `meta` cannot send one +(live-rooms §9.2 step 4, `kind_not_permitted`). + +### 4.4 The control attribute + +This extension reads one grant attribute (live-rooms §4.4): + +| key | value | meaning | +|---|---|---| +| `watch_control` | a decimal integer from 1 to 15 | the actions the principal may control: bit 0 `play`, bit 1 `pause`, bit 2 `seek`, bit 3 `rate` | + +A **decimal integer** here is 1 or 2 of the digits `0`–`9`, the first not `0`. A grant whose +`watch_control` is not of that form, or is above 15, is refused `cw_attr_malformed`. A grant +without it allows no action, unless its powers hold the direct power (§5.2). The authority +gives a room's hosts every action and its guests some, or every viewer every action, as the +room calls for. + +### 4.5 The policy a statement is read under + +A statement is read under the policy in effect at its event's `t`. A statement at an instant +with no policy in effect is refused `cw_no_policy`. + +## 5. Controls + +### 5.1 Layout + +| field | size | meaning | +|---|---|---| +| `magic`, `version` | 5 | `WXC1`, 1 | +| `action` | 1 | 1 `play`, 2 `pause`, 3 `seek`, 4 `rate` | +| `at` | 8 | u64: the room-clock instant it takes effect | +| `arg` | 8 | u64: for `seek`, the source position to go to; for `rate`, the rate, 1 to 2^32 − 1; for `play` and `pause`, 0 | + +A control whose `action` is outside 1 to 4, or whose `arg` is not as the table allows for its +action, is `cw_statement_malformed`. + +### 5.2 Who may control + +A control's author is a room key, or a principal whose grant in effect at the control's `t` +holds the direct power (live-rooms §3.3, bit 1), or carries `watch_control` with the action's +bit set (§4.4). Otherwise the control is refused `control_not_permitted`. + +### 5.3 Rules + +A control is sent ahead of its instant, so that it reaches every viewer before the instant +comes, and not far ahead. With *t* its event's `t`, under the policy in effect at *t*: + +1. `at` is at least *t* + `lead_ms` × 1000: otherwise `control_not_ahead`. A control whose + `at` is at or before its own `t`, in the past when it is sent, is so refused. +2. `at` is at most *t* + `horizon_ms` × 1000: otherwise `control_beyond_horizon`. + +Then, under the policy in effect at `at`, the instant the control is for: + +3. A `seek`'s `arg` is at most `duration_us`, and a `rate`'s is from `min_rate` to `max_rate`: + otherwise `control_out_of_range`. + +A relay or a room service that carries the room's events **MUST NOT** carry a control these +rules or §5.2 refuse, and a player **MUST NOT** apply one. + +### 5.4 The order of application + +The accepted controls apply in ascending order of `at`; of two with one `at`, the one whose +event has the lower `t` first; of two with one `at` and one `t`, the one whose event digest is +the lower first (the digests compared as bytes). So of two controls for one instant, the one +sent later prevails, and between two sent at one instant the order is still fixed: every party +holding the controls applies them in one order, whatever order it received them in. + +Of the controls at one instant, a later one **overrides** an earlier one that sets the same +thing: `play` and `pause` set whether the source plays, `seek` sets the position, and `rate` +sets the rate. A control that a later one at its instant overrides is stated **overridden**, +and every other control **applied**. Controls at one instant that set different things all +apply: a `seek` and a `play` at one instant go to the position and play from it. + +## 6. The controlled position + +### 6.1 The state + +The controlled position is a function of the room clock, kept as a **state**: whether the +source plays, its rate, and an **anchor**: an instant and the source position at it. + +### 6.2 The position at an instant + +At instant *x* at or after the anchor's instant *a*, with anchor position *p*, rate *r* and +duration *D* (the `duration_us` of the policy in effect at *x*), the controlled position is: + +- while the source plays: *p* + ⌊(*x* − *a*) × *r* / 1 000 000⌋, or *D* if that is above *D*; +- while it does not: *p*. + +The product is computed without overflow (at least 128 bits). + +### 6.3 Applying a control + +A control at instant `at` first sets the anchor to (`at`, the controlled position at `at`), +then: + +- `play`: the source plays; `pause`: it does not; +- `seek`: the anchor's position becomes `arg`; +- `rate`: the rate becomes `arg`. + +A source that reaches its duration while it plays stays at *D*: it has ended, and a `seek` +before *D* sets it going again from there. + +### 6.4 Where a source starts + +A source starts at the first policy's `effective`, 0, and at the `effective` of each later +policy that names another source (§3.4). At a start *s*, the state is: the source does not +play, its rate is 1 000 000, and its anchor is (*s*, 0). A control applies to the source in +effect at its `at`; a control whose `at` is a start applies after it. + +The controlled position at *x* is then the state reached from the last start at or before *x* +by applying, in the order of §5.4, every accepted control whose `at` is from that start to +*x*, and §6.2 at *x*. + +## 7. Presentation statements + +### 7.1 Layout + +| field | size | meaning | +|---|---|---| +| `magic`, `version` | 5 | `WXS1`, 1 | +| `room` | 32 | the room id | +| `player` | 32 | the key that signs it: the viewer's | +| `source` | 32 | the source it presents (§3.5) | +| `at` | 8 | u64: the room-clock instant it describes | +| `position` | 8 | u64: the source position it was presenting at `at` | +| `state` | 1 | 1 playing, 2 paused, 3 stalled (waiting for data), 4 ended | +| `rate` | 4 | u32: the rate it was presenting at, above 0: the controlled rate, or a catch-up rate (§9) | +| `sig` | 64 | Ed25519 by `player` over the 26 bytes `wai:co-watch-presentation` (ASCII) and 0x01, followed by the record from `magic` through `rate` | + +A statement whose `state` is outside 1 to 4 or whose `rate` is 0 is `cw_statement_malformed`. +Its **digest**, where a party names it apart from its event, is SHA-256 over the record from +`magic` through `rate`. + +The statement carries its own signature, beside its event's, so that it stands on its own: a +viewer that shows a third party how closely it watched presents its statements and its grant, +with no other event of the room. + +### 7.2 Rules + +A presentation statement is checked, in this order: + +1. its `room` is the room id: otherwise `wrong_room`; +2. its `player` is its event's principal: otherwise `presentation_wrong_key`. A statement + lifted from another viewer's chain, or made by a key the viewer does not hold, is so + refused; +3. its signature verifies under `player` (§7.1): `bad_key`, `bad_signature`; +4. its `at` is at most its event's `t`: a statement describes what was presented, never what + will be. Otherwise `presentation_ahead`; +5. its `source` is the `source` of the policy in effect at `at`: otherwise + `presentation_wrong_source`. + +### 7.3 The player + +A player in a co-watch room **MUST**: + +- apply each control at its `at` on its estimate of the room clock, and one that reaches it + after its `at` at once, and present the controlled position by the catch-up rule (§9); +- state its presentation at least once in every slot (§8.1) while it is present, and **SHOULD** + state it twice in each, so that timer jitter leaves no slot empty; +- state as `position` the position of the frame or sample it presented at `at`, as its media + pipeline reports it, and as `at` the instant on its estimate of the room clock; +- state `stalled` while it waits for data, and `ended` once it has presented the source's end. + +A player **SHOULD** estimate the room clock against a room key's clock, by a request whose +answer states the instant it was made at, taking the answer of least round trip of several +and the midpoint of that round trip, and **SHOULD** measure again at least each minute. Its +statements state its estimate: a player whose clock is off states errors that are off by as +much (§14). + +## 8. Skew + +### 8.1 Windows and slots + +A **window** is a stretch of the room clock, from `from` up to, but not including, `to`, over +which one policy is in effect and whose length is a whole number of that policy's slots, from 1 +to 1000. Its +**slots** are `from` + *j* × *P* to `from` + (*j* + 1) × *P*, *j* from 0, with *P* the +policy's `period_ms` × 1000. A room clock that states windows regularly states them +`window_ms` long, starting at multiples of `window_ms` × 1000; §8.4 checks any window a +statement names. + +### 8.2 Viewers and due slots + +A principal is **present** from the `t` of a `join` of it to the `t` of the following `leave` +of it, if any (live-rooms §7.2). A slot is **due** for a principal that is not a room key when +it lies wholly within a stretch of its presence (the `join` at or before the slot's start, and +any `leave` at or after its end), and the grant in effect for it at the slot's start may +subscribe (live-rooms §3.3). The **viewers** of a window are the principals with a slot of the +window due. + +### 8.3 Samples, errors and settling + +A skew statement names, for each viewer it lists, `held`: how many of the viewer's events the +room clock held when it made the statement (its next `seq`). A viewer's **sample** in a slot is, +of its accepted presentation statements whose event's `seq` is below `held` and whose `at` is +within the slot, the first in the merged order. A statement the clock had not received when it +made its statement, a later `seq`, is not a sample of that statement, whenever it arrived. + +A sample's **error** is its `position` less the controlled position at its `at` (§6), a signed +number of microseconds. A sample is **settling** when its `at` is within `settle_ms` × 1000 µs +after a `join` of the viewer, the `at` of an accepted control, or a source's start: at or after +that instant and before it plus `settle_ms` × 1000. A settling sample fills +its slot, and is not **counted**: a viewer seeking to the room on its join, or every viewer +applying a control, takes a moment that the bound is not about. + +### 8.4 The skew statement + +| field | size | meaning | +|---|---|---| +| `magic`, `version` | 5 | `WXK1`, 1 | +| `from`, `to` | 8 each | u64: the window (§8.1) | +| `bound_us` | 4 | u32: the bound it judges by, the policy's | +| `quantile` | 1 | the percentile it judges at, the policy's | +| `viewers` | 1 + 59 × *v* | a u8 count (1 to 8), then each viewer: `principal` (32), `held` (u64), `due`, `samples`, `counted` (u16 each), `p50`, `pq`, `max` (u32 each), `verdict` (u8) | +| `pairs` | 1 + 17 × *v*(*v* − 1)/2 | a u8 count, then each pair: `a`, `b` (u8 each, indexes into `viewers`), `n` (u16), `p50`, `pq`, `max` (u32 each), `verdict` (u8) | + +For a viewer: `due` is its due slots, `samples` the due slots it has a sample in, and `counted` +those whose sample is counted; `p50`, `pq` and `max` are the 50th and the `quantile`-th +percentile and the greatest of the absolute errors of its counted samples, and all three 0 when +it has none; `verdict` is §8.5's. For a pair: `n` is the due slots in which both have a counted +sample, and `p50`, `pq` and `max` are over the absolute values of the skew in those slots, the +first viewer's error less the second's; `verdict` is §8.5's. A value above 2^32 − 1 is +written 2^32 − 1. + +A skew statement is `cw_statement_malformed` when: its viewers are not in strictly ascending +order of `principal`; a `verdict` is outside 1 to 3; its pairs are not every pair of its +viewers exactly once, in ascending order of (`a`, `b`) with `a` below `b`; `from` is not below +`to`; `to` is above its event's `t`; the policy in effect at `from` is not in effect up to `to`, +or `to` − `from` is not a whole number of its slots from 1 to 1000. Then, under the policy in effect at +`from`: + +1. `bound_us` and `quantile` are the policy's: otherwise `skew_mismatch`; +2. each viewer it lists is a viewer of the window, its `held` is at most the number of that + viewer's events the room holds, and its entry is the one recomputed from the room: otherwise + `skew_mismatch`; +3. each pair's entry is the one recomputed: otherwise `skew_mismatch`. + +A statement may list a subset of a window's viewers, since one holds at most eight; it states +the pairs among those it lists. §8.6 requires every viewer of the window to be listed by one. + +### 8.5 Percentiles and verdicts + +The *q*-th **percentile** of *n* values, *n* above 0, is the value at index ⌈*q* × *n* / 100⌉ +− 1 of the values in ascending order: the nearest rank. A verdict is 1 **in sync**, 2 **out of +sync** or 3 **unknown**: + +- a viewer is **unknown** when it has a due slot with no sample, or no counted sample; it is in + sync when its `pq` is at most `bound_us`, and out of sync otherwise; +- a pair is unknown when either of its viewers is unknown or its `n` is 0; it is in sync when + its `pq` is at most `bound_us`, and out of sync otherwise. + +"In sync" is so a claim with a stated bound, checked against the statements. A viewer whose +statements are missing for a slot it was present for is unknown, never in sync: a player that +stops stating is not counted as keeping up. + +### 8.6 Completeness + +A room clock that states a window states all of it. Once every record is read, for each window +that an accepted skew statement names, every viewer of the window is listed by a skew statement +of that window: otherwise `skew_incomplete`, at the window's first skew statement in the merged +order. + +## 9. Catch-up + +A player that is off the controlled position corrects by this rule, so that two players given +the same facts make the same correction, and a test reproduces it. At instant *x*, under the +policy in effect at *x*, with *c* the controlled position, *r* the controlled rate and *e* the +player's position less *c*: + +- When the source does not play, or *c* is the duration (it has ended): **seek** to *c* when + |*e*| is above `tolerance_us`, and **hold** otherwise. +- When it plays: + - |*e*| at most `tolerance_us`: **rate** *r*; + - |*e*| above `tolerance_us` and at most `seek_us`: **rate** *r* − `nudge` when *e* is above + 0 (ahead: slower), and *r* + `nudge` when it is below (behind: faster), held within + `min_rate` to `max_rate`; + - |*e*| above `seek_us`: **seek** to *c*. + +A player plays while the source plays and pauses while it does not; the rule sets its rate and +its position. It evaluates the rule each time it states its presentation (§7.3), and keeps the +outcome until the next. A rate held at a limit corrects nothing, and the error then grows until +the rule seeks. A seek lands where the room is when it is made; what it took to land is left to +the next evaluations' rates. + +## 10. Where each rule is enforced + +- **A room service or relay that carries the room's events** carries a control only when §5.2 + and §5.3 accept it, and a presentation statement only when §7.2 does (§5.3 asks it of + controls). It carries each viewer's events in its chain order. A skew statement it signs + names, as `held`, what it held when it made it, so a statement that arrives later changes + nothing that statement says. +- **The room clock** signs the lifecycle (live-rooms §7.2), and so when a viewer is present, + and signs skew statements (§8.4): what the room states about how closely it watched + together. The service that serves the source states the policy (§3) and serves the objects + the policy names. +- **The room authority** signs the policy and gives the control attribute (§4.4). +- **Players** apply controls at their instants (§7.3), correct by the catch-up rule (§9) and + state their presentation (§7). **Sinks** show the verdicts with the bound they are against. + +After the fact, a verifier (§11) checks every one of these against the room: a control a +service carried that §5 refuses, a statement signed by a key that is not its viewer's, and a +skew statement that does not recompute or leaves a viewer out are each found out. + +## 11. Verification + +### 11.1 Inputs + +A co-watch verifier is given what a room verifier is given (live-rooms §9.1: a descriptor, +grants, a key-log head or none, and the chains), and: + +- **policies**: the room's co-watch policies, in a list (§3.4); +- **sources**: for any policy, the objects of the object sequence it names (§3.5), or none. + +### 11.2 Steps + +It runs these steps and stops at the first refusal, which it reports with the reason and where: + +1. **The room** (live-rooms §9): a refusal, at `room` with the room verifier's own place. A gap + is not a refusal; the steps go on, and the checks of a skew statement that recompute from the + room (§8.4 steps 2 and 3, and §8.6) are not made: each depends on events the verifier may + not hold. +2. **The policies**, in the list's order (§3.3, §3.4), then the sources given (§3.5, + `cw_source_mismatch`): at the policy's index. +3. **The grants' attributes** (§4.4), in the grants' order: at the grant's index. +4. **The statements**, in the merged order: each `meta` event the room accepted whose payload + begins with a magic of §4.1: §4.2, then §4.5 (`cw_no_policy`), then §4.3, then the rules of + its section, in the order each section gives. A skew statement's checks that recompute (§8.4 + steps 2 and 3) are made after every statement has been read, in the merged order, since its + samples may follow it there. At the record. +5. **Completeness** (§8.6): at the record. +6. **The outcome** (§11.3). + +### 11.3 Outcomes and what a verification states + +- **refuse**: the reason and where (§11.2). +- **gap**: no refusal, and the room has a gap: the gaps, under the code `delivery_gap`, and + what **accept** states, computed from what the verifier holds, with each skew statement + stated unchecked. +- **accept**: no refusal and no gap. + +With accept or gap, the verifier states: + +- the policies' digests, and each start of a source: its instant and the policy's index; +- each control, in the merged order: its digest, author, action, `at`, `arg`, and `applied` or + `overridden`; +- the **timeline**: each instant at which a control or a start changed the state, in order, + with the state after it (whether the source plays, the rate, and the anchor's position); +- each presentation statement, in the merged order: its digest, player, `at`, `position`, + `state`, the controlled position at `at`, its error, and whether it is settling; +- each skew statement, in the merged order: its digest, its window, and for each viewer and + each pair the entry recomputed, or `unchecked`. + +## 12. Reasons + +The codes this extension adds, each with where it is raised: + +| reason | raised at | +|---|---| +| `cw_policy_malformed` | §3.3 | +| `cw_policy_unlinked` | §3.4 | +| `cw_source_mismatch` | §3.5, §11.2 step 2 | +| `cw_attr_malformed` | §4.4, §11.2 step 3 | +| `cw_statement_malformed` | §4.2, §5.1, §7.1, §8.4 | +| `cw_no_policy` | §4.5 | +| `cw_not_permitted` | §4.3 | +| `control_not_permitted` | §5.2 | +| `control_not_ahead` | §5.3 step 1 | +| `control_beyond_horizon` | §5.3 step 2 | +| `control_out_of_range` | §5.3 step 3 | +| `presentation_wrong_key` | §7.2 step 2 | +| `presentation_ahead` | §7.2 step 4 | +| `presentation_wrong_source` | §7.2 step 5 | +| `skew_mismatch` | §8.4 | +| `skew_incomplete` | §8.6 | + +A co-watch verifier also raises every code a room verifier raises (live-rooms §11 and the +live-events codes it lists), at the room; `truncated`, `malformed` and `unknown_version` for a +policy that does not read; `wrong_room`, `bad_key` and `bad_signature` for a policy of another +room or whose signature fails, and for a presentation statement (§7.2); and `delivery_gap` for a +gap, which is not a refusal. + +## 13. Conformance + +[`live-conformance/cowatch/`](../live-conformance/cowatch/) holds the corpus, in one file, +`vectors.json`, written from fixed seeds by `wai_co_watch_vectors gen`. It has rooms, each a +room (descriptor, grants, key-log head or none, chains), its policies and sources, and the +outcome §11.3 gives them with everything it states; and catch-up cases. + +- **Accepted**: a watch party of three viewers, a host who may control every action, a guest + who may play and pause, and a viewer who joins late and may control nothing: the host plays, + the guest pauses and plays, the host seeks and sets a rate and sets it back, two controls for + one instant resolve by the order of §5.4, the late joiner's first samples settle, and the + clock's skew statements state every viewer in sync; a room whose second policy starts a new + source; and a room in which one viewer drifts out of sync, one misses a slot and is unknown, + one leaves partway, and a window is stated in two statements. +- **Gap**: the watch party with one viewer's record not delivered: its skew statements + unchecked. +- **Refused**: each reason of §12 at least once, each vector a control of one defect: among + them a control from a party without the control power, a control effective in the past, a + presentation statement signed by another key than its viewer's and one lifted from another + viewer's chain, a skew statement that does not recompute, and a viewer whose statements are + missing reported in sync; and policies that do not read or are of another room. +- **Catch-up cases**: a policy, the controlled state at an instant and a player's position, + and the correction §9 gives, for every branch of the rule and both limits of the rate. + +A conforming verifier gives every room the outcome, the reason, the place, and everything else +the corpus states, and every catch-up case its correction. `wai_co_watch_vectors verify` and the +test `tests/co_watch.rs` check that the file regenerates byte for byte, that `wai-rs` gives +every room its outcome, that every reason of §12 appears, and that §12 lists exactly the +reference's codes. `live-conformance/co_watch_verify.py` is the second implementation, written +from this text: it shares no code with `wai-rs`; it verifies each room with the live-rooms +corpus's second implementation (`live_rooms_verify.py`) and every signature with WAI's strict +rule (`claim-conformance/_ed25519.py`); and it mutates copies of the corpus and requires every +copy to fail. The browser client's co-watch module (`web/room/cowatch.js` of `joule-moq-web`) +gives every catch-up case its correction and writes the corpus's controls and presentation +statements byte for byte. + +## 14. Security and privacy considerations + +- Every control and every statement is signed by its author and rides in its author's chain, + and every policy is signed by the room authority. A service can withhold an event but alter + none, and a withheld event is a gap in its author's chain. A withheld control is the room's + to notice: its author sees its control missing from what the room carries. +- A control's instant is ahead of its sending by at least the policy's lead, so every viewer + holds it before it applies, as long as it reaches them within the lead. One that reaches a + viewer late is applied at once, and the viewer catches up by §9; the skew it causes settles + within the policy's settle time, and a lead too short for the room's delivery shows as + viewers out of sync. +- A presentation statement is a player's claim: it proves that the holder of the viewer's key + stated it, not that it is true. A modified player can state any position, as a player of + ad-presentation §13 can. Skew measures how well the room's players say they kept together; + a relay's per-hop records ([live-metering](live-metering.md) §3) of when it delivered the + source's objects to each session are independent evidence against a statement of a position + the session had not received. +- A player's `at` is on its own estimate of the room clock (§7.3). An estimate that is off + shifts its errors by as much, in both directions alike, so a viewer that keeps its own clock + wrong is measured as out of sync, never as in sync on another's behalf. +- The skew statement is the room clock's, and is recomputed by anyone holding the room: a clock + that states a viewer in sync without the samples, or leaves an out-of-sync viewer out of a + window, is refused (§8.4, §8.6). What remains to the clock is to omit a viewer's events from + the room, which leaves a gap in the viewer's chain (live-events §6.2), and every skew + statement of a room with a gap is unchecked. +- A viewer's statements say what it watched and when, which is personal data. A viewer that + needs its watching unlinkable across rooms uses a key per room, as live-events §11 has every + principal do. Taking part in a room under a grant is taking part in its mechanics, and this + extension adds no consent step to them. Where a regime asks the operator for a lawful basis + for processing what a room's players state, the operator records it as a `lawful-basis` + claim ([jwp-receipts](jwp-receipts.md) §2.4.6). diff --git a/wai/live-conformance/cowatch/vectors.json b/wai/live-conformance/cowatch/vectors.json new file mode 100644 index 000000000..6ab586d82 --- /dev/null +++ b/wai/live-conformance/cowatch/vectors.json @@ -0,0 +1,7211 @@ +{ + "about": "extensions/co-watch.md §13: watch rooms with their policies, controls, presentation statements and skew statements, the outcome of each with the controlled position and every recomputed entry; and catch-up cases", + "principals": { + "authority": "36b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c", + "clock": "2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976", + "host": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "guest": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "late": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "fourth": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6" + }, + "key_seed": "SHA-256 of \"wai:co-watch/corpus/key\" and a zero byte, then the principal's index (authority 0, clock 1, host 2, guest 3, late 4, fourth 5)", + "vectors": [ + { + "name": "watch_party", + "about": "three viewers: the host (the direct power) plays, seeks and sets a rate and back; the guest (watch_control 3) pauses and plays; the late joiner (no control) joins at 11 s and seeks; at 20 s the guest's pause and the host's play and seek are for one instant, and the host's play, sent later, overrides the pause; every five-second window stated, every viewer in sync", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000016f5cb148515f3930ddd8a2f9b46dbc8cdabd7add6add7bfdf65e6c35f4900325d0b429d998da19e403fa820698b88b01b930886ffb0f018c217efa27601ed503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197603000000000000009019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee9140bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000050005000100a8610000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000050005000100401f0000401f0000401f00000101000101006842000068420000684200000118935505f8cbd060c6b268625bae6c32609efc2add6e31160d31d75a6aa2ffd48d39ccdd13abc0cdd907c9be7b41d5e2bb4cb2daec5d1b70fe434b00fb8cc105", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976040000000000000087ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904c0d8a700000000000010400076cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bdca9ac16f9034e41a46cbc4630d84eac6c5b8ca2d18ade7379580b0358149d1e5312a9d99529751527b23ff0cb122eed0059a62e701f0d3fa3d9c061b87a7a1066f5c026cfa99ffa91ce6a4fd55073be16a23e324361ffad8c52364e9aef0905", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760500000000000000d8a2f159e989c1dace319777073ba230ef76ddc98bb779205cfc705674e961838009ee00000000000001000157584b31018096980000000000c0e1e40000000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1f0000000000000005000500020010270000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742000000000000000050005000200401f0000983a0000983a00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0900000000000000040004000100e02e0000e02e0000e02e00000103000102008813000068420000684200000100020100d0070000d0070000d00700000101020100b80b0000b80b0000b80b00000140f5d839346a221ce5491bbc9335b0295b472763d47808dc1b4ec38daba3d47a8e21ebe8b54740d3a08f1a8d967526cd1c4cbbe815aea74d1d1565cb78853204", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760600000000000000e2753608d741db550a20580b3eb913020496b223e2624b23dfde3b2cfd5781d9c0543a01000000000001000157584b3101c0e1e40000000000002d310100000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2a0000000000000005000500020050460000c8af0000c8af0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742d0000000000000005000500020088130000204e0000204e00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b130000000000000005000500020070170000606d0000606d0000010300010200c8320000a8610000a86100000100020200e02e000068420000684200000101020200e8030000401f0000401f000001ad83aafa8219386fb5947d38c39329b482157a5fa348bf10ed9c309308dcbe49bfa6b0862b3de960e033ec6d1b69377349ac0b7e4c0cba4b7a182f865906630b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760700000000000000f1ee0a55bffce0700b1c53ecf86406dcc65b75da0526a3dce55d917cc728645500a08601000000000001000157584b3101002d31010000000040787d0100000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a330000000000000005000500030030750000c8af0000c8af0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743600000000000000050005000300e02e0000204e0000204e00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1c00000000000000050005000300983a0000606d0000606d000001030001030050460000a8610000a86100000100020300983a000068420000684200000101020300b80b0000401f0000401f000001ff643fd7d0f28a983b0ab6428f004028e6f307227260e20702776f56fa116a66ea2e0b18e7caeaecfe2a6c868a1bcb37791bb44d7c1d7baf1c60846eee3a2a09" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000009f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290073550000000000e0142e00000000000140420f0065840a5af706dcbbcf74a13e54d94e49ce748fe81249e442235a91734a4f487cbbf5fca2d4d6cd5ee7d02876642aa1c3f0e172c67f5376fe3688f98b263a780ecc956f634aab4fc13dbdd131b6351efee63216ec8609331f2afd03d86c33444d7a9fd8f4ad494ae512b570aecdf4fe6df2256a17d9bf46c92cbcf8e3a71bee0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b00000000000000d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab60b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920145d0000000000a0cb3400000000000240420f00f4b6fcfcacd2be483d30bd8f08edec092f4e189e106bc2157780a9791128edf13b47fa619ff7282bfefc49adf6bb93ced1808a2bb9803ad43f3fdf643d9c350fec71bfafbfa91eb693e126f7a9508227179772d4c24e9e99e02b1a9978699011073776ecf239a35efb7037b24edcd6e2d60852c8d537b3d2fbffaea7b0ea9705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d780516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940b5640000000000c8f43300000000000240420f00b12f36c09beda6c8541a0d4f495d6bd002341b812144458a4c504e06208a9c7643a0aba2fad19c814e56b9c1746bfedd63a217f839ed9540980d6ad14e937609c2d01edb9b8af1dcd6325e3c5dae4fc79d96d0d2c2449c39ca941eb9ec0c66b22081acf13c2519239df4620e5e444df7e20e14177d1b13916968dc5e05cc1d0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d00000000000000e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96a0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960566c000000000040e13300000000000240420f00bf4dd56a942bbf8f0034ae912c653815719e37d32efb6d133f94a08daff4e7c70f129401b1fa9131ba0d17058e9ba2840d3d975a953dd23f40629e303f3f2d013e5e778d56ba8629e6e40c41a4494e2eea6ff7e51d4300bc2ec1739028de379fe7d4ce32aefdfd525761b6061e13c0aec75f63b1a6e5f0778e6dd11a96784208", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e00000000000000219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6c0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980f7730000000000508b3300000000000240420f0046f09bfd4477030c5df8e8a1e1b1c279f67f33643052af749943e8d9f51e2d5b47b86d2fe1d33a7350a0faeabee46830e41f968351e0d9c145bdcffa46e9c5085ce83272c7d95e4dda94414d7387786f74841e62ec9d993a13445028b6e02e6f8cbc0eb8c8d2a3bad09b10d002117aa2a50519f1caab3b2fa270fadeeb460602", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f0000000000000032293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ade0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0987b0000000000405236000000000001f07e0e00a0ae094f04dacd8dbc424830ecc3eb8c715c959b462df34dd8348f1704ff9b516f1e66c04c1e470c478c7c60ac48695d378cef50787a655d9c3e7129b19a2907d9d703ad0507ba60314166290095b54520e5bfca8de81d52a6059a3ccfe81bbd8b8c7acb1940ca799930181d20dd662dc02a974dacb20d8f2d8e14796cfed50a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d308800d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c039830000000000c0e93c00000000000140420f00142d3de1e316c4a3300ea65f7122bdaacf13b879a440837fdf3ba6e51eca02bfd9aaf21c606ac9149c92b0c318123b551fa1bc0f398bdd125cda960e5b73220d8070cc8f713ff8ae2f6f4bee3aabbd5a1b38b7d2e518814b92393eb76e73448b1f387b7a74052fc06416888b3f6f0e01a7d28ae537ab37dd29e32ac1a72ea60b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74110000000000000008ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc4054890000000000000116005758433101038096980000000000000e270700000000ae5701a262b0cf24ce4fb872db4551f3a956eadcd2e7d1b616606e35344e103cddbbd66e0b6c2aaa860f0d9cb4d17a2e0587c30a0a6eb1fc03886040efa79a05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7412000000000000005b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d20778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0da8a000000000040f84400000000000140420f00442df02d81d38deabd35d6c857e4dec007ff8f8ee09e384028244365cd25c861abdad0506bb9502fa7e03b79b43004fb5ead2509f37c734ac91ff2091f4184050c9c7ef822fec62e15e2e9c621c858dc893dac1fd4ac43757a92297b8a8b7133cd6fba3e3fdbb4a4ec2c598a45675cb1081a041b01e62b9b74c5045532972f06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7413000000000000007c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a6240189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007c920000000000a8104c00000000000140420f001376c093841a1cb4776ef8a0c98bb620e5a26462d159ac2fbd653095fff5855b0dd063d322521c81aca137e1255a4cb5f08ef2de9f563f79539ab011b871f90ba7898203b8b68520c59d11a92cf846d3532a8d8c73a92de7485bcf3faaadb5beb9d3b86aafa627494e2233c654e986c65c95279676e084d27a02bb18119ae200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741400000000000000f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e9960b99a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429201d9a0000000000007f29070000000001f07e0e0028bab8c023c8e42e71b09a2343743db6a0a3936bd247d43eabf20aaaf51facd27baeb552028ea3ff37e4f9dfe6e38d4427867dadd24fe3cb82a7b6f7771ee705fcc145a29b196ab70a0af94194fefa0236a91ee1e57e9392eaa93a104f290d80bcca30d4abd8f241d4d7c4c642f5945b08cf1c3b4f1abe9038082157b5e19601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621805aa200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940bea10000000000c0353007000000000140420f00072c0d7fe03cedd52ead106afab83453d065775f2544463d60666fa010a05f5a65e1be2dce7b1ef8dc9e80f808f1e6147bd433efe2fd46ecd4924d07bf27650b5861742c07262f099f3c3642723d594f64017cd4a2b71d374b35d6e24a0526f75835171ce197d9a5327c71a69fc81ae76083f850649eef71017450be0982f909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741600000000000000cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708a0fba900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429605fa90000000000f0803707000000000140420f00af51d8538ac954f058baeb49077d2f43242345618bedcaf2198f6fae4096d7272f12221deb7f1da5176e9ad40f4f2905b1bfa2550be5e4bd129df9017ef1750d587f4c4373636257d810446655b62876ca93258393b411853175679db0c6501198e41203443c61209352d6fc119e8f0d881a8d47b3eac5716ae491d3faf6fb0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741700000000000000ea85c0e2cbf4cb7930de026478b7d93e56173af9bb74ce951beb29ee5c52be18c09cb100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298000b10000000000e0a63f07000000000140420f00f135add94ce2496c8365eac7763c930a69e0a74ead0bd1f997d26aaf923aafff9cc7d722b2c72449ff7942e3fa8d50e8ff6ebbdd3981e6400a21a862b11ce70947213235b34e48abe866dd311516c4801ac750c42dab6e355a5067874619b1d40761764d0d3f572cc6203aef5be5a0acd6cef2331533f3c8a166ff02b26d2d09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74180000000000000076850dae85e1c5e4c0b6d20263022eb185e547b02b3165856849e479da35d050e03db900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0a1b80000000000e0f94607000000000140420f00b406b10b4816470edb8b1958f3a86e419b60fc93833e8c704d59355cc4a7de0d263593f97827839b547eb5e7dd8bdebf7326a8e9677969489bda301a5a25a50dbafbe9760a9fafe3b33e93b5d80ecd01aeb4047b6c38b68e8e105d9777f1ef1135d45562d07da4724194e25392faea13c9a5d3b2fcde0de2468dfb74890abf05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741900000000000000757b328d36764c3fc1c058008a4b190604571257efdf71a3a46f4e5428b9cc8600dfc000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c042c0000000000060084f07000000000140420f0096cf1f68ca2c91870b3a009d6eec6a6a17ff0d9c8cfaa4876f3296e98bc1af0e27a9364d66793d08fe3bb57ce34ce1eed7078a012d2bfaceab98244298facc03210a5af374193d57a4f4f9b3151fad3fa96b0eff66f66263361994574a3435d4ba3abd7e91e825848b7a6036570dcc1b95ec8a6d7d2f2b39b9c34b48b5788b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741a00000000000000cc21249ac1b1185e8b33bb331beb0291a351db3a54296ddc131c2425816ec0aa2080c800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0e3c70000000000c8205607000000000140420f0063fd3b45b173e8dec0257bf1050a174c34115b32a0da9a0a5073e17b01f30a9c73b392d39fa02c3b5e13b2c7de71905781bbe8ed67a8ca7096948054409e5f01068b60c03d2952b8353a6c263a6ef8443815ff1240dddaa9783ba782bee4afb7639ade52e526ecd275a3d99ccadb5462a8ea52c2f4236ea2ac421f5e2462d20b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741b000000000000003a673a5fdbcd34041871f33cf495de531205612ae94d8c7f53f0722f3bf4db59806ac9000000000000011600575843310104809fd50000000000d012130000000000c10d9ceca0b7d6f740af9f013334c62e7a3d390be28e06228c5f85ac31a76178986776cb721b39bf0dc0bf59f616d8331925a013d17cbbe6fe6ece991e87970a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741c00000000000000bdaa571261a6f48559d52a969007817077f8b50918c21e4f6814fbcd77d9813e4021d000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290085cf000000000008105e07000000000140420f002925de82e266a8d9a493b923e25d8248ab119c35abb68d71cb70b2e4490c440abf0ab0aa7bd0ede85a17a4b9ce3e4d3b779e03a1513dcbbdea0f826afc76f70100e173fead822e3eec7655378f33fe8ab188cf551e85ed3f97e7c7cefa1fda67461ecae7489c5bc667d5ed89ecf2aae87864ec8c2d0f783fd6dec38116940b0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741d0000000000000028305620bfb13a8a728df154cb17f981da3f61a39a04affa6d953fa74b4db00760c2d700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292026d70000000000a8e966070000000001804f120096d31fa2b7540662bce52546fb2df4e1970f69e288109aa14f266800d5dd7f4c431c082c46e3aec0e2bc24dcfbd3f260723976359ccacd28fced53ec8f3877051eac103082648df971f0320cc931c1e08354515ed82891a226a82602df5d22c4362cf59db768e72b6d74de8165b5f35d926b36a741c67d48e20e7892e6d77800", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741e0000000000000060cb3bb2b3b7e5e8215a213290474adfb102deefc15611fa358760eb95e128798063df00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940c7de0000000000c0326f070000000001d0121300523eea343a54389d056c48a264eb3df603222877952c2bd626b989172c3f12083b0ff659232d25aed8f97f89bff9ff1ea72ab008a93455a436533758adb0ae004b97ffaf32eeb820a1340dc8086dd333259d6fa191a93a84b29ee1ab6b0603d6ac0a4b89b16edd04cbf76ce3afb51d9c4cfdccb7eb02166fdf7db8ed2bf9ad0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741f000000000000002d1444f5cce4d548ea21e7ae663331722b61fcff66bcdac28145dc8ebc121c39a004e700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296068e60000000000f84079070000000001d0121300a68a0e579d0cb7102e2736cd12f1ae441754a345a683c8397389831b7d3825d678fdab25c4e1b33a4327afafc516d3b41d7e3fe7cd249972db45df9d0bdd04043c52165a7a6358da355d144670e01e62112ac39079cd23969518ab95e95e8454a85e0759a54da2a036ed835487c9e47fb516954eca5c2f4daba8b170733fb009", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7420000000000000006a0109dceb62a09135b8b1564244ed17267066f38f4bdf868d6174167bc5404fc0a5ee00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298009ee0000000000407c82070000000001d0121300c28ebe88838288c6ff5efc47bdd8439fae07aa67e38c22e9871b682d222f63aef34451ca6c420cfd506dc94152ba6ee9f5034dc25eb684466d76980a19d3070735d89167c65eb13413268d3d048b63e4c1d97b38b1e5d849fd2d8699ddd80864fb83e14b814300d38c6969891ef50eb3151d96e8c134bec7f170b57a7d319d06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742100000000000000a8f78c2ee80e800fb895fb7ed3473c73e18a90ba304c384155b5a01b117be80ce046f600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0aaf5000000000008738c070000000001d0121300b90a7c7e9f924d073f56f7e5ebed45b4ad105697181709804004a9b3112f57fdd3616f6f928bec971b39a79c586a917c6aa02a42ea6a7bf7c52d6a1c333dce02d308a9952600a3ed69e8b48696adff947995ac2a914cceddff468171b9cf219151db6c8a20effc0c49587f6d5dcb0c7d93c3cecaeec75645428eb960812db200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742200000000000000502fd5b185ac8590dacdde29b01370638c4ad036967fbb5a2c67fb1ddceeb51900e8fd00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c04bfd0000000000b87395070000000001d0121300232aa2bdc5df1e822165abe41615c4039e18406edacc16e8f822fab04ad8e426ab4ff90d27aefb052750fe7c067f830667e9fe5e0f23df14389ae6c7bd57050ec93ad214650dd3afeb0757148eec94223e8fb4a6e557116a4a77e3866e7181e99b292c4d00122c6dd3989260e14f4d755f0d3f5584f16bcb29b0364dda668909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742300000000000000659c4046314e37ed6fb6ee47af5c980904361725be4a7ea681db34a5891d859720890501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0ec040100000000404b9f070000000001d0121300221b96343263fb2bef639dee511d0e3624bbcc2f7d3151d2a3b965525aefe07031a23a938ef702338d040cee7e94090b2ebc9baf0b21c7d13248dbb33a4df108e7df5927aca23499f35a2d63409a82c7f6c2ce690c85d57ce5cb4e37c9c175302135dc624dfc034d43fc02d9a5a0483f58c7e106e357a571209c7f0c28983700", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7424000000000000009eeb6b8aee6eb366639c6bde5d686394b3c9ae741bde663cf6ee5a18fd0eea9e60070b01000000000001160057584331010480a812010000000040420f00000000006f7d314b6f7af37e5c40d591c75e364e525ca5dccec52f5bd9f326629288dda2aa39de62f122a492d518425406f55f527e345937a26373ab848178dae9c8e302", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74250000000000000046a604854dbebd6c9b4d4600041ecf29b391535b92232f5a916b12789dfdb2ca402a0d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429008e0c010000000020c1a8070000000001d0121300f38ce54959a4133e61d1e3357e5e97834daa1a86fb7c63105ee655a1e1084390304caa37788987b38e460af08cbfa35860ca207d168f9c64ee1725378b14cc03524fc9071fcec25882c0714ae5e21931f2b4eb8e2c0628de2613ac1241991cd569a94fc4d7aa03442aabba10dd44a4e5721056107fd77becaeee97418ecf8c09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742600000000000000d138dcc76df538cfc2d5fa7df3025266b83f57e3942e36e417daa917056dbe4a60cb1401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429202f14010000000040d3b2070000000001f07e0e003caa56703a2b8dc47197bff6bb5fda9f61f16f092e409c27aff728d893a79655f41f848da17d4c0f43c58fb63e6b1ebb6675f6914ee156bf2184700afef0a608270cad2a300f46a44ff7826dd8d1de46a6c59457827c0acf74d723357562b7268e1594ff327ab19d7253affa7be59eeff693cc9ce167df80b4e4d8d3f7921f04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7427000000000000005030c59dba08db7a9d638e05f2a3b2011fa12dc806705031e7741852341b48ef806c1c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940d01b0100000000e0b8b907000000000140420f00f5347faa2ece87ca2c0437b9d63ec26f413706b364d7440a8ca21fda81442ad78c5ff527f208fe0a7600546240d119379c6d1447a850afd904fae249cc360407eaa02321c69af02392b076cb96a3931ecae8bf13cc104ffc44dd685432822940b10d93a69e2a88ded13f9ea3f9baaaab15629891cd59905f976d0b65aabb8a00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7428000000000000007a5342de44fad548cffc0eb5209db440fba8bf6d4f35888ec9bc47d2b086e0c4a00d2401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296071230100000000e00bc107000000000140420f00295427825db05f33434c6fd09cc009a0b82e3f517ce3a10b824755860bc32da2118b27dbf78e3e97d25f19659f64c7ff8e83da80bc60040669586b0c6033420d76f0bfc957109c63887a3d2801df00a47e03059634a2d01b1b435bf60a6044916f3c3c807ce52079da972afb57f9acb98770a689f383d892d3af1ce73c455d08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742900000000000000185bd06d21988ed8a21a8e34bd9109fadddb3ef904d92b7e7d317546275b67ba400528010000000000011600575843310101002d31010000000000000000000000008e5c634e984cdd12c004c33b9ba6c542061c653d4c8c9e1d13330ef54468fc78a1f68ecc80efe1a512ad12afb1ef67750c916574ab4c9fcc2926121896b5750a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742a000000000000007048890f8171bdf1c60a4a7e04847ae4eeeffd35762ba5d63d0c9c904886dd0e400528010000000000011600575843310103002d31010000000000c2eb0b00000000e579bd0ee8c9a3e7bb9139991f39bb50a5498501492d822283979e1130e6e30f32af38b1ff7071b2be4e6dea2cb661ca360b8d0f931aeef6a63201c8bdae910b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742b000000000000002be013aa7130272b7e7a96c3770576b267ce60cdb0ce53de4245bb41c86a17c3c0ae2b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980122b0100000000601ac907000000000140420f0016da833d64b44ff78f1bf52c0da21b1538296aade9c1b9bcfd57d0b70703234f38af605560ce69abb4b851c92b621893817ab71cbd836722a76ca4636d67e600cc85a3efa35ab862ed1320ca2f23314bc8fcdf472e14ddec8107efae4ac2078901ba932629d77fc8297b0c7aab8b8ec4f272ffef2f1387a87cd699ad90e04c0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742c0000000000000007221edfb69b5e4f94dde2a42d98c64b79bb341798dd52915bc894c3bfe57674e04f3301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0b33201000000000033ee0b0000000001f07e0e0077393bce980c1a2216f0ce88377bc317f5aa6232e661879f77dc8db9a68af5dd94c7c88376772b69a8e6dcf5e29d2a302fd7c4d9d6fb7e3791a252a0fc5baf0ed57ea10cb39a65ac35fa38f9551a15bee571c4c825ad3efaa7aa8370670426967b30b770e3db8992a1ae1b74bf593fa22911c9be4a1d42b63f9a4cf032252d02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742d00000000000000828cf2bea059d8f04e81ed584f63bd4720c5915e74a2f2e66b03d473252920cf00f13a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0543a010000000048fdf40b000000000140420f0027731d9c1718667dcf29b30d15499b719659ca31532be9b9d6dbf6671989d8f4d6b3b28c7490c4fad7d55381b6cea5cd2a9d68bc86e02ddefb2555ae0e19ec00af2f566a94f9f1b3e4347566f8b0c619640e3ed903cddd86de6bdd585733b7a271fefa74d106f10dace3be32c21c0de2da1b50d0d332ae5b589f0962277b220a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742e000000000000006a66809c152ae8099308a66651ee44ecf4011d111a34590dc437593d1d1011fc20924201000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0f5410100000000e08afc0b000000000140420f00804334c83d787331f3f961c78919471612f741ce2ed47f922ed94558c332c9cb1091adcf557dced993151d564605a6df96e71a67ea41731e84597126a333d306f595a7d70badce5226085a4b814dd4bc7928172f2c765210b247a6ccccfc5e48303942a56bf66f291fbe6c239a5798f2569742dbf7d4fa39ad3e482f10111d0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742f00000000000000b87b47b3ea8ab646335567c10aa14652e4ecbc5c4e417c2d5fb23cb994b69d0240334a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429009749010000000010d6030c000000000140420f00665b2247c266ec3e6792934515354141ae7e9b83eb21b96d461d05ddf5eacf14de62626ea7bae0899c57b622be7f9023d045f60756812311e6a0b650975ad2097b79f5680e6a9dd1d0d00ad3b3915d827d74e93a3cf05894fdea6ed36f5821fe133f6921729f68b2e43984e8a1abc6fa7d3edae5dec0a5b271cb5e8317db6c00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7430000000000000007de553f590cf69ea3998ccfeb46207ec1b5742489eb8f4e77072eee3976241a060d45101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429203851010000000000fc0b0c000000000140420f00450afa0d037b864cbaf7c783ecbd822ba4a66f41e217948fe8906c36e002af796d7355d92f7d925f163efbffd7e069e66422fcad479381ce5ca2bf3a0d85fd06f3b91e2cabe75e84af800beb3784bc29f0b721971b3b0c188b541587bd09de6d410d9dd98a249625b88dad43a62fe5a8702422c292cc0ce904c4f2cbade56909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743100000000000000fd865b3e3fc06e88a1244c755b877f1298b0d10876101f36b5bc1e9c0f775b0080755901000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940d9580100000000004f130c000000000140420f00551324312fb29a701d36e2028df42b729a64740d520275b799027605027f8dd2bdbd153970fcd25c2fbd6b77e4783dc6bc29bf6dfe65f43816e5edf8da882f0eede11fe949d0c943412107083d362d63288ceb1b1b138a6d55207e540cfcf159abec753329b7e9a25ee46d9d4d8a69b53a6fb779bb028218e248a155feeebc07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74320000000000000095412409ae1085d8c2c439fbedbc85d1ce6487e1a057644845ea0544168eefc7a0166101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429607a600100000000805d1b0c000000000140420f00317588c46d179e33f350bd1b61656064856f11ae00e29eb3b002aca2e8dd17d3a3f35e08d305cbda152a3b09ba9934b5e06daa1597ad7cfac67554a9cf5cb90ca027006d887245dca39ac6c1314b861208308c51ddccc409b38f34bf1667f6920788b060bc485d3d40d57ed07c2ca28120bfed5be3196f6295f9feea12304407", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7433000000000000002281da4bc841f292b3261b46c44d7c8c1dd697f63de239c8e2c2d6fafd9ab0f3c0b76801000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429801b680100000000e875220c000000000140420f003ffb959fad8e63bc7938cbc3834ecb57e6e7d563e47f9bc3f6903aa274be3b6fcfddb24d4e9bd8872c7a58f2732965b894174a1a1fb60ec152b9bf35c05d3b0c720a48f852d73c203f3e8fa32364ffcd634083a5d823001cad133aab1a49dae2245d7741780ed18cce9c84a95dafb083515b716e717007fcbfd3aa8a3b54cd06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7434000000000000008ebdd846b60740177f921f9106a689523128f11cc88e81ad3e2f152f74cbb3f4e0587001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0bc6f010000000028652a0c000000000140420f003aa46971a8ee998c386857ac9105ffa191b38fa93d4ceab5ec393b2e9862710a9d00b5b223675fad41a4004bcd79d2e48bd4c6d5f69d1c8b97768ae93955b702cbbdd7c84af5cce079912901458acf370356eeb69638d77af3ad49ac87f7426cdc6de6cb75b7a9c590de26e57658b4da944456453f077801a464cdc65f38ab03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743500000000000000bb133c2e1e6bd4cd1d7c3d739755c9c17d708bff659bf7bef4b611ea7139839800fa7701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c05d770100000000c0f2310c000000000140420f00ef56b6365db9eba27c758a779fdff8b1cc460740a1ba0b7a4409f128b1654d4ece2c7dcc3dc212884db3e2f61b1d34a14b6c70ed1c5a0e7759b9ded45474cc063c8d013d462e1dfe95ba870e70e57e318e286eea1d7a281d07ddf71258b644e16f2e13d17bde11b897be7fdf6625d99119c0ff5d343fcf141369b330f09f100a" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a000000000000003f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294080580000000000c88331000000000001f07e0e006909704cfc274af012c4a108ac7c28edbda13b9b91c003e8514c36acd143d46b14ae8c18cc0d53deb3f5fcad0d70cb0a4129076597dc6ac6bd97b74cf381990835bded47645025d36a3148f2f10389088482feefa8d174945ce04c5a276aa2dfee675addcd0039ef503c66a9b8c139d5063362c92a50a85175ca438f70eb1206", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b00000000000000b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602160000000000030ba3300000000000240420f001f3ec1117c1753fc4dc73ccf079789551ae7e26cb2a0f8d015897b60e947993252204d48a39839b784c778e31321a362531233e729d6410ae5c4152896e07405e00b873aeeaa24e8035052240f94b43324639afd785b07f40b298b7c5099f3b9b755c188fdcf248fe36e88a338b62e844b5bacf8662f56fd24498f00eafdcd0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c00000000000000d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ecc05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980c267000000000090273400000000000240420f00c464eac72dbaca39074f87b03b8d3056428ed16fdd763264d039e56e9ae52a5cc36eeff66e53752c6e6d85845066531a283e9ea4dcc1119c6fe08f8da16dc50279f7165360d69b26b07ab11557817b0bc78908479677fb107a74b2e7535a5b91696f506a08b8a9c610494571694fdadb3ef83f0886ef4d5f0214b9f1366b6707", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0d000000000000003947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246a0636f00000000000001160057584331010100127a00000000000000000000000000b7e970e6f92a4d995ae02de5082af3f4463021f611fd83403a9efd12b312170c13fd4facf7e531d22070f1635e23184e6e3f8018c0bd603036d0b9fb97e52409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0e000000000000007d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03e0ff6f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0636f000000000088583300000000000240420f006ee84a30bc8d07647fc9c0687d0ebbdca65cae76740c3e300f7f02a3cb488847dd96ea0adf55ef5fec7d97d60e2cb6eb3ebe2642dd20d5b25cff52b895ff3701818a1e586152d1f92eeca964c7f1c5f1375d4390ca267b7deefd72edfaa1099edc82e46fa9d9f2768ffc6e62d0673c6b97036ee2835e0b26fc02e476e3b22702", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0f00000000000000a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f500a17700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00477000000000080003400000000000240420f00c704c4a7d0db41af6f9a93aaa0e092d5e1376974d95759b4e29a0b417180da3877fc77d8067e4bc175d56ccbdc977588f76183761533fec29fc3d1154b464605de8fc826b0ad8690503a77632292a79b469aa7404b840ee4595201d97847e5cbeff1adc22e6a7d4caa5c6bee3aa2bb5b52bd9bf989de0ab9abc6f05666dedd04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a10000000000000006cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b20427f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0a57e000000000050ea3800000000000140420f005e4eeca8bc2379da8fa6ba264cab932a70d3e6092e3f42f957ddbfbebdcd0a231c91d4b45b4647277d7f01294df1e5b8c68375fd7672cd095ec8fd925b3af20b49e4feff3b1bea5927e41d0f0e29f9f11f60b6718a78da8f752dc295d6e0dfd4949de227a5064a04883afa70b37ad913df259af0acf2015d2edc94620ff24901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1100000000000000900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb742940e38600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429004786000000000098b43f00000000000140420f007b022b7b5973aafb4b0f614d7975986215ef7383c695089daa2054353a9fd1202196d22ea987692710d3ec178d1e82d05d6a17c9f429698a1cbc77500a4dc20ac43c01e8269f325daddb4605c83e9284247e710d3750eefce6ffe6a53ace2b1caa97120926e02f4e740659e0d0b461b33f05bfee61ce9521f482101c7e0dff0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1200000000000000ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e021160848e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920e88d0000000000286748000000000001f07e0e00989ec0a78952b2f08e0e2c397ec23ea9faac43007769132dc671afa82459d4700115c0d955e71f88f5af3608ccd3a0455a5e9c0f8cd533aae906bc8d1042c106d358c34d5c409d5747427975dbbee1c4fe239cae05d754d66db883c86fcc2645916d9395c02627933e7536e98d5e2ee351731c4bf0b7396ba6d02d73ea861d0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a130000000000000042e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da80259600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429408995000000000070314f00000000000140420f00e5d4eae0507399eff4ad8cbf499db206392e27e01d325a0ac953aeeff3ca3ca52ee6f4ca22689cfaaac6c68956f36b84fde1df9a39b08f51698aa6de831b5c0bc80bcf2877bd1cc821c2b36a7aee3ce36788816d874d01cda2392595caa275ccb33863c7acde77feccc43048c932806431e34ecb723dd4594f3aac194fea7b0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a14000000000000007e364c445a1a6a1846c9640251e96bb3c8eb397bd1e7961b55c4ecc1240e1308a0c69d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602a9d000000000030e82b07000000000140420f00cd80df3aea98e0a067eb6781459c42ec2f912a95af97211c0b851318a170dd3e71553e9c14270c801334c994af813f173b3e3983ba2dc1cb6d877470ce5e1d0fd40a10909d363edf9552e0535b5bfc06d313976a5e72242a3d37326cda8ac6824cf73592fbcb58fe8211f31c4b83e34c8d1d38f4a4458f8b61cd9e67a99c8e06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000bd7db5754d988ce9d8a727bcda41e64478fcbca520057a19e7392b7e70792841c067a500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980cba4000000000048ba3207000000000140420f005c48a1317028b58d49bddca85d040ceadf846b6741170125ac70ada35168ba9d8330ca638bd36ad968d64eaa92609778d73bddfb0e16abdf3bbd9e2a6ada970f4605bc367f8dc15340435c6b9eac2485ee42ce3f44fc670221f8042d3d3e5cf92b1cb559beba778dec4983e527823ce294439cb704d4040469d4a2b805617a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a16000000000000003e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754e008ad00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a06cac000000000060033b07000000000140420f00ab243f955e937b280a8e2cf536a2fb5afb3466c83e9d130ef3955c8baf6493ff1644ccf91ceff646811a7697cd2e575f95bc3ab3c71ee21b4a999f3e6639d20fca6ebba073588611d8e81fe4af368ef0d8f23699b744037fef25ad2ed6f8891a7e29883ea103389c4ae6abda9b4ba96f9c2fabcc74ee5b598b5fe2ce9bd5750d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a17000000000000008f2fe0bed855ad874e9c92da6e712ecf32ab30b86cc0a9afd20c6929a48b1ca600aab400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00db4000000000070fa4207000000000140420f001230b6f946e6f04ddd14792d5dddad71e332125d765637d5e98f05bae8d679adce3792cade21f5782a23616409de8a355d044331c6e56ec0a16ef1ac43d61701781ca5db74b84f0957e5a0588809c6f4519cab868c926b5f05040bb127dae7f3643020d561f6817c649298b759399da4096cd193b05b82de6f16f4961f383000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a180000000000000083abd576fcec5c8e6527a5da60d62b26379ac39bc95ae3858cf49cbbb9ef931f204bbc00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0aebb0000000000b8c44907000000000140420f000b256a4755cbc65b79e7a3219e86b46ae2b438890c8594ff04433cd6bb8d785e0d2a43c11e9793c3c982f8442dd8f74a35f0ddfd3504279bcc6cd5bedbe4110a60c04553bde697a94707b992bfc9f31093b7c96acac91b361afba7f7a87815ab6b9dc09f1cdf2b1cceae1b0302cd6b1544c9f09b6ed7517d57789a8f7e031907", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1900000000000000682f3f064c01bd056db984e8b0fdd51da069515e6d189ff939c579b3038f3cd440ecc300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290050c30000000000487752070000000001f07e0e00358a801117d6c85c762c78be8b9e21f73056943e34dfc0be805964f0a7b1ec76e56c48f69cc43dbf55ccb3d5b41155f6569ba946281a5054577c0f64474d190981677b36b2e5f4814302c9b2a3eac10304b6decda2d9b93ff1b5feb09d8b584598d57d31ef48ddcb859ccd92cb5a8227aa3ffb4ea9af7076520fac58d7e44a08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1a00000000000000437e3b0d102d43ed5230dc5d0b2b30d9d1f2b6c808a53b3808fe0d95f3e65f34608dcb00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920f1ca000000000090415907000000000140420f00dcbc09de990080912b1318f19b73d5c7c092f35bb5e7e04c99ef5e43a0bca8277b470d009de17b52b0f30cae4c42a464f3c4a048c0ec61bcb961778a46ca230ce0c9db71e64b940ccf6ae3c9b18da8bbba900e62621d1f4b9b36c795a9b89658dc31f083b3f62b1d8973565a0739a9456775cf024d998c138452af6c85e11409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1b00000000000000e9153f5152ead640e6a0be69ea00b5fc38614e42904b3212e0f22efe78c13cf5802ed300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294092d2000000000010506107000000000140420f0047058afcce4a61c303cacb3692112088b094ff0e91c655e088fe66de4ec42c7650a8e0ddaba413512390ddb2c853424dc58f072f67c95f79be67d1d6138df0062368083d87246dabc82d25f9dd1f3c7bd8e8c4c26b1614e29134ebf230c4ee8c14054f0e7458103c521d8b56579a437185e932b20ab0712ec3382fcda188df08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1c000000000000006a6a671a5fc6abf44a70e224bfa5974d2464050c70edb9186943bf6ddf474a11a0cfda00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296033da0000000000204769070000000001d0121300b2af7a9673f65edfbd797b6d635cd3b800866f16c38e01f24189f7c9efce8412db59e83f32288b69eb32eae1511534a0e720a600a043d654c3de9f657ac5f40228be38f44484457d6f602f2f15b502f8616931675bc32c1ad7cc8b9821884f58226889b8c2bcd604da643faa6fe30d71a2cb3e44d7ab12fdd034b02c7026810b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1d00000000000000eaa4ebb92967277fc5a6d2588a4d0a1ea0d0c7426e94d3d6f99119587dd2e6b9c070e200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980d4e10000000000807873070000000001d01213000f5a9cb1998ebd027cd90b55aa1e3e2a86553b2df7d4701d23e209a95136e6d6558600e34733c2d73f2e53fdc9e38d969caa16528e2ef2bcffb9621870933801207f771eed51473daa339acba7a425d201e71cd2d010faa3f861279b9ab57a68f7c51455752205c60af76a20540e68591775bda26af12dbe0c66a105bb69b009", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1e000000000000006a1ee9e122b08a3d5fad0bd31bdf86d0e3a341043bab8ac0726563d17dcce476e011ea00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a075e90000000000d8577d070000000001d012130085a553befd354e07307c2c38ec419ca509b670e3d7621184ea41eccef4e3e17a7c2b2a475ac9e00754c53a871119c2dd0ed951bd7be6ac034d4990e6b451730739f3236a90086015635d991ba2cd2c8b496a4c7ba943effcd9df04a5b5ee9a7dcd8f5a85f3ce67ae6b0f60ad46eca09c7b9e78ad28ef594e716ba421b867c308", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1f0000000000000031c8e8ebe3292fe1d88d770fba0e43444e6431f624324dd52bcad5373bd5c87900b3f100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c016f10000000000680a86070000000001d0121300f5fff71771ce1f8da1e01e700ab74f057acf9fefb5203751fc9d5df10b8f454ffca99ac32dad73d2b3d4cd91857575950f1f6fbcabf04b31a534d01030f0d20361bdc040c2adb36c7fd979b2ec199cfb2008074620491be94f6bd15ddd738760026cf9ff5af58e683e239a68f409eb2d4e34b5b6cf3e0b9af43d25c083fd1e02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a20000000000000001aef38924412df78118148ff7ef123f177e43f75a28fa662c295dde08fbc279d2054f900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0b7f8000000000040a590070000000001804f1200df2e266cb67cf30ce1e227e6fad5f9a691c24b715712e05f35f1f8c9fc4c97e1b00d8593be6eb2e449a920cfd837ae7003963486a62c0be5932a541bfa8a410c0e6da42681b537382b2187cef6d810ffc19af64cafce7c30867b1e7e053ee001cb8baa4c8adfdefb6e9e481cf02b86d5a6dfa5166cab1b37d69476d434dfa30e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2100000000000000afd2fe122702fa27aad9a4f6081d4cfbb47d4535662f0b3c924958cb39f3258940f50001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290059000100000000d05799070000000001d012130051712dc17f2d7e1a1f5a81f54acab1bc0ae7f81549e91ac0477a238ddfcc4d1104282689d9131727e79f7e9e7d6bbddae756f50ec3c4183a14e1fd4c611e5d0115838ffaf7af7cfc9b130df574060850f86081b2af9f78300d32e58ded167cfe7cdaf5f7e830e009289bc6850c574312baae21a511a25c0aa0aa5e3958a38d03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2200000000000000b231e31592f8d535912eda687414ed9679fe55c30cbb842846e5be11e377a43360960801000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920fa070100000000984ea3070000000001d0121300b5f8bfdb75c8c813fd1334827fd057288cb75f80e2727a0a97aa583af02b6d5d260010b40317a9279a5a669dd77e533afd8f62c3361d9296cb02169e2cb0510dfb09392b7e9909453ddb1565191df6da3713f9111c9fbee0afcd3e6a1a6e88b82146d131d5322e53f1177d6f7bdf048f0c79531470437e479d4550f91869cb03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2300000000000000faffa8c10d826cb5f01c66573a6007853d99bafd314dd285f103f1a31b81e14280371001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429409b0f0100000000f808ac070000000001d0121300ed607da0af7e52fd95125f0ec8fc85811fc333a8412db68a9970795bb7386b5cfe6179fb3835f8bac7166c27f8993e24a126a95bee291d86eb3af80a154a0a08778307f28e9b57c65964348aec69cab41deced17430190dc78d90c06545c4baa6d4e3e71bdffd75f71fda3bbe198bb0ba7b50e6523f9a13b5eab900a5b52850f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a240000000000000038ee526c4637f1b08d3364d99d746cd48695c2f5cda4a4e69f245ab33a92baf9a0d81701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429603c1701000000006015b507000000000140420f00446c83080b5243c7213adaeba9a4b6281478db4cc09e93c3bfecaceeaf7f01b7c40be0a780f3a7ed875a0897bc4f5602db4a26e77e958ea7f2608f57ee78980f0d76e9e2b4cd55257a9f39e8bb1ab47b99b724e065e50bf3d9a74363e6a370ce72585745d34d03b732c0e1475306b71a2b60a4717bfcd93c391dddff76338b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2500000000000000d21d547642b741a81729f6b7b8e952c6cd0d6ed0ddd3fb0fd6fc14eacbc0748dc0791f01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980dd1e0100000000700cbd07000000000140420f00c5cda9b69cc3d5dc81dd356554455fd52c2657d0f760562c335615f0e8cce6041bc96309730e71d05a56bb1ecc7db1b8ea4ba993cae7b57bdd85d55c18cb1603f9e5877c5df9e8deb8fdabf7fd82b22acd12f970da6e8a7e938f9e9317a6a2ae442a354895096557fae6cef44a7796451f1d4f7b2a1af75cb9eb3d475cacc90e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a26000000000000003dd5526a844cdbf462b05fd305ec0e11d4686c4564f4b68931fa17df9372d73c00f824010000000000011600575843310102002d3101000000000000000000000000bb19fe3401dc16cbc9ab8b5b8a176d7e02a96bc86c1c44934fa3e4847dbc079fde20f7f0500e8caebd8c919a824b993df863d84d7741b6da0f940cabaf41b80a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a27000000000000002dfb3dd8f87ff6312b4d6a12fba0772e3666c42e97ddbc2262c885eb3f26a561e01a2701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a07e260100000000b8d6c307000000000140420f00d0272883aed469a7b6bfc6a8a37810632c1ac9973a95cb957e67d6779f7fc1fd8dcf0bde3b0a9bf64ed79362eece78bfefb592f904726950254a3787b05ac009afdfc0b7f893266e596de2e4c420a8f2eab63e5e11c095159dd9f869915233f9af0c64d9189d0808cfaab46911422b26a13a0770c35730efbb1f58e6cf444502", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2800000000000000bbf2355952fbe74d548f77f5d40752be6019241228cc53b03f089e1832e57f5300bc2e01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c01f2e01000000004889cc070000000001f07e0e00dd0db05319adf4231049020f09076023d2b87609653f1b63a5dcc3a5878c9291715bc335b2497ed4f9a4a232b29d992a728ae54367cb91a98bea8b8bf98e5d0eb4819c1f5b5855440eef376b7b7c7493c1ded467f31249477dc9548c186b3437377dd6d269869c209386efaef761ffb2de77c79a52e0ec7e15cf701313f1790e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2900000000000000cfb3029e1a4a5d6bccf7da281492bfd46e663239febaca779e9096676af707e2205d3601000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c0350100000000d02ef00b000000000140420f00913adc18899c97d8d0c8c02ca47628e8351d9180a08e18cfce6013cb09d8d76659f1d15b49afc05f4dde6e29b1e657c1fd634c92cdea590347c00dc00aa9210df38635319d5ccf0fd5dfba925e9973d69b146089038f4506526b2812aafeeb338e410d5e9189bdb1a61ab677c9950315e39a57d70bc7d509090903216b77a606", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2a0000000000000033cec905c73b2d83f38565eb4e0095bda2607e4bf9ec416a2e1f9dc2086b283440fe3d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900623d0100000000503df80b000000000140420f00d1ec72258ce9c335d03eb2fcffe814ecd656012fefe0aa0a7e106bedb8cbba8bcad62e676fcd692ff410320ce88d42ddaed6b9dd2a67ffa2062c0916c47fea08b11b2abe49ab90fa9d2ba2d587b7002dbb14e8b9197b95a3529d7962c3393285600dfaeb91a30567801cf27fb47e4d1e479a0a9f9a92f132af8eb631fccf440e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2b0000000000000013268b27b13ff9d2e2c5be9b3f82113df29a71966e2e4951f2424dece1611cf8609f4501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292003450100000000680fff0b000000000140420f00ae32a7dc302203e6fd3adf3bc883885cfbbddec46401777c790796b144f792a49354f8f51eeb151a13e88edce34fa71a930a83eaf5727cbd42aa433d5ddfc807fd7afc7e5f768d9561bd31a4af2cfba653b3019c9223d1b9f3c734bae803d99fa8122f92e1bb62900fb8d32c0d108d63579943896e98c036c2101c72d74e1a0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2c00000000000000c9c0bff7e56dcc3f187be1f25a923835b9d9c711e8ecd8ad48d7483b2786fedc80404d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940a44c01000000008058070c000000000140420f00038210773214bc06212eb9bcbb6c1b0dccd5fc97766d5ab733caf5719cdb5109583574db66b108da511661c272fc196198a73cba2ed0e8dead2ca743de74d004390844c82633f7bf0b67ccbac3640732a30c4bc4a3f36f3cbbe52d842493bb2eedfef1dad1d99e12d4bd16d3b70bad42dbaa4f1affd918da3fd5c202a1b3c102", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2d000000000000002c41c6e65b823c97a3d5c3d9dc1cb91a6f5417d8ad4ac46d6d5a248de0f19a3ba0e15401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296045540100000000904f0f0c000000000140420f00b7797e06ddac5a85749955715a989e0e1a09341a8563930302e176c5cca481a4b6d027640095a144c004b4ba2fa638b80cb19f6f8d2fab8db035b3f1acb30201e9f9366029c6767e8782e96935a71e7eba70bb6c877d47ba8d3ba2ac36cb0620a113061bd06c4daf39e8e1ef4541fe9a6202f06158ba9163ce2d2cbf524fbc03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2e000000000000001de2ea3077f7e90273c32256decbbbdaff4b73980208647812d0a0a414702ec7c0825c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980e65b0100000000d819160c000000000140420f007a22fccbba7e39c20ff7e56ab4d00523ea643aad87671819817149f523064aeebb2b293358678f69619aa6a9ec6187b4e68b8f0e442463db2003620345e17601e714c9f53b86fd650f9c5672a43bec3a8707e2945dad52bbb17912773eae315f035b8da547634833c53d1be0cd5231aa98dba2f0ae2b529e3626c2f30ba6300b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2f00000000000000979cbebd0fa4f943d4ee9ebd6dab12c17f9d3d3b2dac3236083024f00d06ceb4e0236401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08763010000000068cc1e0c0000000001f07e0e001107fcdb509513c2be194e852b5d45f9df595feae693e061e9774492f581c6ea0c648add9682bef2f6fb2afa0f8ce14ccd88565cfb1d488d8843937a91d0c50d14b08896bb06979451feb13abcf1da0d0f1708b73c46c5b43c2bed2d0728764e641c8a9185eaaa971ecb07cea2b03cb55536caef89681d708eb143982802c800", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a3000000000000000a1620a12b27caf6e4895c58f6e9ad83f5c2e42bbe17c338aa6b7e120f32db48b00c56b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0286b0100000000b096250c000000000140420f0048806bede8fd7446b668659f7e7bf5882c4cb69500e49e9139d541b604a5954360499d87f41205b74c31ef7a967e30c8170a2aea18b601e0802185c717fe300749f5465634020cc0fa6804f147d7f6136b58058b7856e489c1ef691eead8c25853f8d5ae33812da41db090cec287ff57b1ad6062a01f011dbd09189a17c7940d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a31000000000000009c55b57f043ccfe860fec2d1b3269b8acd720084d70dd55c1a840774594f5af720667301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c972010000000030a52d0c000000000140420f000261683301d66cac1154a6e5e8cf025096962619fee0b00489b2d8d4ac54e1b289ded2b29f92fe427056fd22366de2647a2398ee95acb1d5b30636841aa44201589cfe416fc13d453e733001374558c805cb13c161e65f1bdbc972248e8bcec112d9f8ecfa6af0a7994cc53570caa4e376039da1b3b145238b277cf5ca19cf08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a320000000000000054159ee800aa6d542899377d01edb0de2c1592937f74b64ee18dbf70f98d914b40077b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006b7a01000000004877340c000000000140420f0040fd7517fa1077938a7cafb7b71089a5c97e037e95f46d43d4ce2f49999179c10b804af81ab2acc6b7478d4c57edaf5993c990c1b61a825d92127e037434db00742d7c812a02b60dfe1a432333b0bebc91a596a9fa073c93b9b8cc26a808905426f051d2d81fbb19795691941c661f100c78614a3f67c9855e20b309414aef0a" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b000000000000000000000000000000000000000000000000000000000000000000000000000000004082ab00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900e6aa0000000000e00b44070000000001f07e0e00a318339d7ba3848356d409d4a93be22850d7d4f44f2b35fff3276809d9ba1c25a4afe39499b842a47c397326107491c8053415839416fb3bd7307605311b4e0a29fc56c3ab8b624fb87b9dfcaba6dc15eb9abde679dc8eae3fae4bb7225b5b687f10aaef7d5c0b9c6d18f978ccc8618f6e3ba9047a18fbc5d1aacf13cfd86708", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0100000000000000b00a70b835347ab9ab8df49339ee93c8872a76a47f11caa3a9c1c51b2ea533176023b300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292087b2000000000000ad4b070000000001f07e0e0032c6feac53fbe1c98b036de4423b9d4d27f44655d9c994647f97c63b91e80b40d2b3d7639c39cb4c1b1eb3df8e9177560dc6209bfecb830728a03772ece60f076bc36afc438f7da2117a41b0933d53f0389165adf023f464a95c5950ff34b49ffdd1c1f553d62faf45a2f700b3e9de7cf0b18b569015a768b3079139d01e2f07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b02000000000000007bd4a82d0c281a0f53a1904e2d1b6ec374bf0f82b91fd3f44d7948af7ee49a1780c4ba00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294028ba0000000000388c4807000000000140420f00a5ed53713ae693e893789cc20732820687160803a750a304366097c0b22eb62677bbc3a61e3ee5c3a6b97ead0ffd2f88c7f0cfaeef4b633e8e490b378ed275094251a8d3afaf8396d3c260fd6a480ca81fe65b694e598fc084c4b2e8fe91f7e780fad65d49405250455c55cbd37c07c3dbae4f9e6316587a10b6ad69412f7601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0300000000000000e0d01f22a5e195c0c548506953dcdd1f067b1ba24256587a4299a8a65f54ce79a065c200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960c9c1000000000040ae5007000000000140420f00e63a18086121b0a7dcf83eccf60dd0b373ed6750508c43cf18463a9831c5a1dc2411f1173aa3a47fa3598eff23747ed6f54f464ab3feac0c36f7ddd0ab9a2a0f25a1622ddb8a33236d9f05ca288a73be1ffb97d80d4c05df18d70f752b86b6d21e5dd7f106c390afc0307dedd6f763658c3a9168f999eed388a0c6ee67958d03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0400000000000000d99975777821cbe9bc3c4cf9e6925dec7f7d579dc6d978f57f82196af9c67f19c006ca00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429806ac9000000000020b35707000000000140420f009dd9684299924097fb41333efa75aa1c0bfe4202585b35afcfd64b377c947b90472ae558195777c721a3dd6a9a7091ff29a45de9594a7657836b9b7cdf290b00287c08dd003ca63214155a626be06fe19183ba8922a1c3af39b0b8cc112d4e7ef02c61ae39eb31a11ac5510e561ab87fd3f172aced0b608cef4758de685c2307", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0500000000000000329b40f95f11841f1b4d642304b5d4c064fc9c05fc44859c54755e2603627d97e0a7d100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a00bd10000000000909a5f07000000000140420f0011ce40e2c308399fdc40548cb23e1c3aff1f057b48a7242a4c5192b78a3df68badc7c26231cbf4a16944b6f33ac864c9533d88cadaec56453b3aa68e54fe8701094a382f4db96f933898c1e2c9930bc55bf02b8fccbe508902bbc651d41539459e003d27d3bb64e6f734076c7772784f68d09812c7012555f51d7537265f4e00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0600000000000000411fa02230a3ab75d0abdf160c41b1df9338e451f210336535112553e360ee370049d900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0acd80000000000f0d168070000000001804f1200f7cdbb48bbd0d1dcdf2b6047cc57d1fc6220a0cbb6a4661c1717f5abe6012ab5330ee352421351d641dc436f87f6c07e6a5a173f96308438a64ffb97fa03a7049077cc5a01ccb7afdf20c1270eea4a7fe653aa4ffba792601e3227887a4dde77e73f43361ccda335aaf2dea78ebc35928b05ef05fc0dc34b95709653e465e605", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0700000000000000142e4c7fe0ea48229ec45ca4e429ea3b7e2a7edf7e6705f34a214532e90ebcd220eae000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e04de00000000000d82271070000000001d0121300ef84a8f5dee3c77006bf9f8dbb71e0bcc28358fb372023037dd87087a4cb31f75798d51fd743a6d5fbe596340d8a675e20eb18c660c998d433b9ee20cd5997005d6421df27e0af61c02238baa14dfdc71b40afef155e6a18dff1ba2fd012044d43ed1c0d490aae5bca4c1f54b701f39a702704f4453034a4b74fd532fd288a04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0800000000000000e192833f4aa3b36b8d696cc18a119fde084a4b2b4435e78b432e5d469d127101408be800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900efe70000000000f8347b070000000001d0121300f89d560edad95b3d4c1cda57df2f201a8a26988330888828ab58bfe94e65b57bf2eeb2a88480cf4ef8e7ff777cfc3a6a6f35386eff1739a1f0879b1cceb9dc0e3ecef8fe4b135216238eba963750ff510647e0d3b438665c10660745403929586d80ea5d9ee9b15d017e706a68e28ec72f4cc7f563ffa914e71e5f93faaa6a00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b090000000000000040063e5ad8634b21bf4ac5d42daa98aec4286d3d2d296e7f369292242772de2f602cf000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292090ef0000000000407084070000000001d0121300b4bee526a3a042c38769caeab02e4e53dd1ad1117ef8f68d0db521eeed92e2e9319388bd6b9451f1138cce565402b0033275d7f77fa670d3d1a1fb8b9c4c310b2ddce23666b483adb80af3bed3c1aa58446a9a50d8c4cc8b96ced97dc0ed94bef8f9c5550cc14d26f03ca12dd3ae0f0a90474d8cb49dea42098362c7b62b8e0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0a00000000000000653e03f327027a2325d4a8f03f623dc0b64b34bb3a37bc19408eadabd984542f80cdf700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294031f70000000000907a8e070000000001d01213007fe2b3741454d7cb15b2d59badd6e04ea660335a25698b257c9f283cbd7f0dd9e9f11ebbd53e336810ea71f72262d0d4f4a1f82c7ee09add3737b8cd9b93180331b6593ac9df5a9878744072b946600250a5f43ce0959a3640029de593db4f44b4afc10bd0c37779012181f539f13fe97561eb4be9adaaba4fab16c64d590a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0b0000000000000014d372d970e2f93c298c57a090f8c23b6b639eebadc18cead1ad5f2d540febc8a06eff00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960d2fe0000000000b86797070000000001d01213009bda0c64927f8ef41a6eb87f0572592103411e7e0ea067270ccad26148af60cf2ca9b39a9ce02cc310a8fe943481900b0774426471b9bd7b02762263f718cc0468804a9215ef2f3322ca4945580a079089609fa32292da258489094c402264ad601d1a40f95a01790c27715bde37c34f57e2a73d7216a0a57135ec62278eb40b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0c0000000000000056bd4def121ec5890a290a3e5b8bcabf552d48d2ea6103d0181dabbf3eff7196c00f0701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980730601000000007037a1070000000001d01213004161d997a7d23b477908bd9285b614c504bb0e96c35b9cd88ced206c0dac4fd78a19eeaf55393ebbc0478a2a2a8c6ebc5697e650ac376e69ea1ed4fb78aab009003705def6846814da63240aec707017f88e2c2259cc7e608876840a72df1ac4672721db98745c8e7edf0fc6e8d2b67f69a3400661a79f318b3573dd56da3006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0d00000000000000f26566592f3353a803e641eda1d5313bd10d067946397b0106989653c27c876ae0b00e01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0140e0100000000502aab070000000001d01213004b5fe3d24a00f5f641ba7bbb5d56c6de296b4bf69dca2557ddfead3e277780d6de6c9263ff93e7adc6d3c62885f3d1a4b47c8c012618eb7efa314ce3515bbf0ef89c41a56c57ab2450d8efba87b583bbc500eca1a3b96f7e9da9a7cb19e54240d6d9f6bad39892982ccbdbd9f921ed398df21f7f96d4619e315e8e4c5295da06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0e000000000000002f994c01c77645be4cf04a3c921bd12bcbe15a47d249d52328c9351a8194de0400521601000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0b5150100000000e059b4070000000001f07e0e001d72dfaf69a8553f2fb5bc9964c06083e1c4aefea0593b2af5b7f3acaf6bdf4d5b386bc9b2b0b94005298f5f39a25cdf7b6e3875d8e3e7b91632ba303a94d909e477b8fafc8b0ccea823d6fe750b72708638ba0f688feeae3c7ab53fc31aff5ba0e51463e76046e1f6944056e4e32923162c50724567ee7148abc70d9ca24b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0f000000000000000ff49d4e69dc6c79a2628c7818ecabf5c904bafb6dd888c8a54d2f4cfe51c25b20f31d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0561d0100000000384bbb07000000000140420f00e75b203758fe54a06f9261486503ed1d8aecf80debbcc47dbadcbd4457a0276e31b0601c54a1ae6481572462c10bb8a4f64086d78f829b9d72e007d767883f0b1b85ce0c757a1a0dacfc6224392f58802cca6b1f2d06081d84a9a4eb264a9be736812a4719f3ecd1b14e3e3168bcdbc7db70342663d915ae855aced1fa9ea000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1000000000000000b3c83a0a3f1fd99f1287ec3f7a771e94579db99f2dd19d2780f3ebf046e7e43640942501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900f8240100000000389ec207000000000140420f0070737dda8240b8c8fdfdff3a37f38d85dfad4f6ace8fa53fd773901517498a65168f2499245a255255f702b01615fee6c88a42c8ce6ec68f08126b83a9e4700b5b12c1317cd032702f856494a0d0a75db090f9327dedde24a4848d5c1d8bc85f26e46f47733b264687ed264e12eb06c3c0f7aea0631cdce645004f555c465d0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1100000000000000e2ff4f034500e22e580745c2823173d44b131011f651f56f319f50b22332a64f60352d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920992c010000000040c0ca07000000000140420f0055d77b9ae0b5fc919a7eaecf7dc9d72cc3b664e8ee0f44437c11737c88258ea59a797a4cdca6733aadd61dd3cf556431600756b22433aaf8ddbaf78dc8f09007727d77577d818c44cf64509d292365473fdb4d351dc307424401b3811a77427b5cf0527e9100abc7808eba1b1d83cbc40e94e2e57e11b6095957e45c2bd7c40b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1200000000000000a3bec274594593f21f8ec9e77d4ab1f6899722fa2261633b7d967208643aba8580d63401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429403a340100000000a0b9ef0b0000000001f07e0e003530c9b000944166b2a52a3646cf2d569fb4577480e208054af031e34b81bc1d4ccc52909f3300e35cd8432419e3d4b1e48ae38529d50d7c598fcb8e67dfac099d91ad6021f4d0f2d1c20e6a3df8885aedf7ab5280d8334e06a6b9f498627236d374979ab53ebbbfd2e774d241d480e3cb7bc5433c884b37f813070f4b217705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b130000000000000057cdfbd20eeca6fd1a5f45ff6899ddae359aeacb02d750d2802523ba335b2e30a0773c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960db3b0100000000d087f60b000000000140420f004672368e9ff253b07c966a3ed9334db71497b2803a7398c734c199eee7b1b543ca5e1229ec374adddde475b92438e73eb0b0e4f8b0b7ea6a70760bf1d6cae80e12c2cc9056414d949e8f63816c021f23ab6ac06133fd891013455eee772eb0d8883751a2254addb3d0d16cf8c2512ca67c47f8ab419bece48c5b285faa923a04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b14000000000000006eb76511a1fa57ac9ce02e00233fe4d2c1a076400e899907db17f524ded15bb7c0184401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429807c4301000000006892fe0b000000000140420f00aba6720caf090c44462596be044f203cf3ddd03a49ce4bac90ec836facdd0c3859e107d16abfacc1441a8b5f5e560fcca037bba6e90f63caa74e05183b97470da8b2c8c6833504371e2e663732648d3c99124a4df12e962311bacc2d3656a0de5b5eb343ada5af418854991a8e8422463c7d999ec72b380290dcf677d2b14000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1500000000000000967edf9ba5c81812ba8523e56cdca7f2bf7bf56b17c991d6ccdb1a2f34d96e89e0b94b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a01d4b01000000008064050c000000000140420f0076c7ce454c01ed549b5fc7e8ec22230f1c8c61b3f3555f8e58283f675cd4f5337b0599c1b790e9b5e924d42592ad04e4e1437a6b0a9fb0739ef0b12486578702cd11d2a845bdc69eb1ec96cf600ff0242eda0156c0e6b9ac0fcac0802a9af558481c27dcf152a41a7b278ec668b7012346c98e6a5bf37f22d58eb55ce558cb09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b160000000000000030e6e7a2ec1933ffac74471c89d7cb7f52305a181a089a555278ee2092a44d4c005b5301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0be520100000000588e0d0c000000000140420f00ee6e1397e4e5a9248b4b1cf49c68b41d0080105b454a097b5708ce099294ef1fcd723022042fe292164adb2634af4894f28bd4a6024a4289f629bdd9e7115c0da7ecd498cac84413fca7259b898fd049a6302390f3266320b5b4cde6566781840b4ca7e137614b59a6151623622c876ef22dcd0f2a5ced77f5e19bece9123e04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1700000000000000385f4cb1941ba16c98116ea2f6a8cc6a8d36cc5ca53cac80bf79b85d8c19829120fc5a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e05f5a010000000058e1140c000000000140420f004a55c3ccf34d28517e79c7d4f1240cb58af6d3ad85b8435436328b352e1c646c8d527b530d699384165dcbdd453670b1b569a9dc7a97459c6b1a367f712f43033bcd6177df1353765ea7596100a897c563f4b10e0021fd8aa7b6c23747f500a2b581d3cabb8378e41cf92e79bfdd0b10b406172e0b3defbafe312dc18ba08904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1800000000000000960bfaf1000eb6e6ff94ba636a55eeca5c354376dee15a0b90e43e2a87e6ceb8409d6201000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429000162010000000060031d0c000000000140420f0067ab9c4f75c0cdfbf44dc8af001db78550d06f498e88a45366c9504c391853761a60574c0ba5811744b9140a97e33cd83376acca23eb979f830f24211d10ce01ccb5ee14f21e1cfdda6e96e940e309d281a2a0aa0daf47e6836faf7b580fd6f56a28c0103306749f8daabb9b92cafff756383a2230436e4d4f91ffc43d8eea0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b19000000000000009c1f21d94cda739b62dfd8dd232c7c0f0f7c56c3c3fd11d25eb604c1d4dd5022603e6a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920a26901000000004008240c000000000140420f0089ec5d4a7675bf9ee99bf10531beb56499540c27e58c5d6f00f3167ebab2d41925521e3aba7138e6dfd8b896ccb96dde07ca184a402be6173c4abb14c2f9670fa12c0687221e9bed72f05a1f7901d0282e66daedc9e7d5c6067402884c3656c2a9ab4917d249892810cda0a7ec6af549302b14f4355ae29342fe8d93c6b01c06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1a00000000000000370516b367c5bdf7dcc3a245db09b95140a57e746e785d12838751465cdacf4980df7101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294043710100000000b0ef2b0c000000000140420f00c3ecdcad8c931f896fdc5d4c7492ac47cd196fae34f00bf8235922ef5ed33886a10c54535271d0862ac4e2fb7c6b58cdd2215a3d3b0a7fd39bb50a5e9271fb0c7aa60d949c1e5ffd6141a3ffb6bbef34e0e1d3f744d28ea952887a8d7717bb666a89ec26ab4f31c4b69a78dbfabc02519211f3e6d1e179ecea76ebd8ca429e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1b0000000000000051c2cc3c62155182bc271905c293840041eeceb11943c8e4b3b4a5b685fae5dda0807901000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960e478010000000048fa330c000000000140420f004897031f6d5b70511c262bfec2be173e2dd9bab404b66bfc8c8005afe672bbdc2cbc232bd67eb724f7e0e1343797d32af998e627eb090b466708efd61cde16003ec41b7847abb82048c58fefb7d20c16ec25dba9d57f3890470285d226cd18e06c8c46fabc2db86d47c55c8b4e7db1e5620de924032a50b7ff5339d588ceab0f" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "accept", + "room": "9b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e", + "gaps": [], + "policy_digests": [ + "9a7242e1b726de4aeef26e784201c318d38333a2d8f3dade8001d860b4d62474" + ], + "starts": [ + { + "at": 0, + "policy": 0 + } + ], + "controls": [ + { + "digest": "008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 2000000, + "action": "play", + "at": 2600000, + "arg": 0, + "applied": true + }, + { + "digest": "3f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 5400000, + "action": "pause", + "at": 6000000, + "arg": 0, + "applied": true + }, + { + "digest": "7d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 7300000, + "action": "play", + "at": 8000000, + "arg": 0, + "applied": true + }, + { + "digest": "5b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 9000000, + "action": "seek", + "at": 10000000, + "arg": 120000000, + "applied": true + }, + { + "digest": "bdaa571261a6f48559d52a969007817077f8b50918c21e4f6814fbcd77d9813e", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 13200000, + "action": "rate", + "at": 14000000, + "arg": 1250000, + "applied": true + }, + { + "digest": "46a604854dbebd6c9b4d4600041ecf29b391535b92232f5a916b12789dfdb2ca", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 17500000, + "action": "rate", + "at": 18000000, + "arg": 1000000, + "applied": true + }, + { + "digest": "2dfb3dd8f87ff6312b4d6a12fba0772e3666c42e97ddbc2262c885eb3f26a561", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 19200000, + "action": "pause", + "at": 20000000, + "arg": 0, + "applied": false + }, + { + "digest": "7048890f8171bdf1c60a4a7e04847ae4eeeffd35762ba5d63d0c9c904886dd0e", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 19400000, + "action": "play", + "at": 20000000, + "arg": 0, + "applied": true + }, + { + "digest": "2be013aa7130272b7e7a96c3770576b267ce60cdb0ce53de4245bb41c86a17c3", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 19400000, + "action": "seek", + "at": 20000000, + "arg": 200000000, + "applied": true + } + ], + "timeline": [ + { + "at": 0, + "playing": false, + "rate": 1000000, + "position": 0 + }, + { + "at": 2600000, + "playing": true, + "rate": 1000000, + "position": 0 + }, + { + "at": 6000000, + "playing": false, + "rate": 1000000, + "position": 3400000 + }, + { + "at": 8000000, + "playing": true, + "rate": 1000000, + "position": 3400000 + }, + { + "at": 10000000, + "playing": true, + "rate": 1000000, + "position": 120000000 + }, + { + "at": 14000000, + "playing": true, + "rate": 1250000, + "position": 124000000 + }, + { + "at": 18000000, + "playing": true, + "rate": 1000000, + "position": 129000000 + }, + { + "at": 20000000, + "playing": false, + "rate": 1000000, + "position": 131000000 + }, + { + "at": 20000000, + "playing": false, + "rate": 1000000, + "position": 200000000 + }, + { + "at": 20000000, + "playing": true, + "rate": 1000000, + "position": 200000000 + } + ], + "presentations": [ + { + "digest": "f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1100000, + "position": 12000, + "state": "paused", + "controlled": 0, + "error": 12000, + "settling": true + }, + { + "digest": "7b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1300000, + "position": 30000, + "state": "paused", + "controlled": 0, + "error": 30000, + "settling": true + }, + { + "digest": "0add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1600000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "58b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1800000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "0ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a666563", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2100000, + "position": 20000, + "state": "paused", + "controlled": 0, + "error": 20000, + "settling": true + }, + { + "digest": "ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2300000, + "position": 45000, + "state": "paused", + "controlled": 0, + "error": 45000, + "settling": true + }, + { + "digest": "045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1ac", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2600000, + "position": 60000, + "state": "playing", + "controlled": 0, + "error": 60000, + "settling": true + }, + { + "digest": "9bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884f", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2800000, + "position": 260000, + "state": "playing", + "controlled": 200000, + "error": 60000, + "settling": true + }, + { + "digest": "54236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3100000, + "position": 505000, + "state": "playing", + "controlled": 500000, + "error": 5000, + "settling": true + }, + { + "digest": "36120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3300000, + "position": 718000, + "state": "playing", + "controlled": 700000, + "error": 18000, + "settling": true + }, + { + "digest": "241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3600000, + "position": 1000000, + "state": "playing", + "controlled": 1000000, + "error": 0, + "settling": true + }, + { + "digest": "fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3800000, + "position": 1165000, + "state": "playing", + "controlled": 1200000, + "error": -35000, + "settling": true + }, + { + "digest": "8cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4100000, + "position": 1478000, + "state": "playing", + "controlled": 1500000, + "error": -22000, + "settling": false + }, + { + "digest": "11e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4300000, + "position": 1708000, + "state": "playing", + "controlled": 1700000, + "error": 8000, + "settling": false + }, + { + "digest": "e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4600000, + "position": 2012000, + "state": "playing", + "controlled": 2000000, + "error": 12000, + "settling": false + }, + { + "digest": "557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4800000, + "position": 2230000, + "state": "playing", + "controlled": 2200000, + "error": 30000, + "settling": false + }, + { + "digest": "9f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5100000, + "position": 2492000, + "state": "playing", + "controlled": 2500000, + "error": -8000, + "settling": false + }, + { + "digest": "a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78e", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5300000, + "position": 2675000, + "state": "playing", + "controlled": 2700000, + "error": -25000, + "settling": false + }, + { + "digest": "d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5600000, + "position": 3020000, + "state": "playing", + "controlled": 3000000, + "error": 20000, + "settling": false + }, + { + "digest": "b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5800000, + "position": 3245000, + "state": "playing", + "controlled": 3200000, + "error": 45000, + "settling": false + }, + { + "digest": "f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6100000, + "position": 3460000, + "state": "paused", + "controlled": 3400000, + "error": 60000, + "settling": true + }, + { + "digest": "d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ec", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6300000, + "position": 3390000, + "state": "paused", + "controlled": 3400000, + "error": -10000, + "settling": true + }, + { + "digest": "e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6600000, + "position": 3405000, + "state": "paused", + "controlled": 3400000, + "error": 5000, + "settling": true + }, + { + "digest": "3947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6800000, + "position": 3418000, + "state": "paused", + "controlled": 3400000, + "error": 18000, + "settling": true + }, + { + "digest": "219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7100000, + "position": 3400000, + "state": "paused", + "controlled": 3400000, + "error": 0, + "settling": true + }, + { + "digest": "a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f5", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7300000, + "position": 3365000, + "state": "paused", + "controlled": 3400000, + "error": -35000, + "settling": true + }, + { + "digest": "32293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ad", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7600000, + "position": 3378000, + "state": "paused", + "controlled": 3400000, + "error": -22000, + "settling": false + }, + { + "digest": "6cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7800000, + "position": 3408000, + "state": "paused", + "controlled": 3400000, + "error": 8000, + "settling": false + }, + { + "digest": "f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d3088", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8100000, + "position": 3560000, + "state": "playing", + "controlled": 3500000, + "error": 60000, + "settling": true + }, + { + "digest": "900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb7429", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8300000, + "position": 3730000, + "state": "playing", + "controlled": 3700000, + "error": 30000, + "settling": true + }, + { + "digest": "08ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8600000, + "position": 3992000, + "state": "playing", + "controlled": 4000000, + "error": -8000, + "settling": true + }, + { + "digest": "ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e0211", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8800000, + "position": 4175000, + "state": "playing", + "controlled": 4200000, + "error": -25000, + "settling": true + }, + { + "digest": "7c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a62", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9100000, + "position": 4520000, + "state": "playing", + "controlled": 4500000, + "error": 20000, + "settling": true + }, + { + "digest": "42e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9300000, + "position": 4745000, + "state": "playing", + "controlled": 4700000, + "error": 45000, + "settling": true + }, + { + "digest": "f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e99", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9600000, + "position": 4985000, + "state": "playing", + "controlled": 5000000, + "error": -15000, + "settling": false + }, + { + "digest": "7e364c445a1a6a1846c9640251e96bb3c8eb397bd1e7961b55c4ecc1240e1308", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9800000, + "position": 5190000, + "state": "playing", + "controlled": 5200000, + "error": -10000, + "settling": false + }, + { + "digest": "f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10100000, + "position": 120160000, + "state": "playing", + "controlled": 120100000, + "error": 60000, + "settling": true + }, + { + "digest": "bd7db5754d988ce9d8a727bcda41e64478fcbca520057a19e7392b7e70792841", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 10300000, + "position": 120318000, + "state": "playing", + "controlled": 120300000, + "error": 18000, + "settling": true + }, + { + "digest": "cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10600000, + "position": 120600000, + "state": "playing", + "controlled": 120600000, + "error": 0, + "settling": true + }, + { + "digest": "3e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 10800000, + "position": 120765000, + "state": "playing", + "controlled": 120800000, + "error": -35000, + "settling": true + }, + { + "digest": "ea85c0e2cbf4cb7930de026478b7d93e56173af9bb74ce951beb29ee5c52be18", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11100000, + "position": 121078000, + "state": "playing", + "controlled": 121100000, + "error": -22000, + "settling": true + }, + { + "digest": "b00a70b835347ab9ab8df49339ee93c8872a76a47f11caa3a9c1c51b2ea53317", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 11200000, + "position": 121900000, + "state": "playing", + "controlled": 121200000, + "error": 700000, + "settling": true + }, + { + "digest": "8f2fe0bed855ad874e9c92da6e712ecf32ab30b86cc0a9afd20c6929a48b1ca6", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11300000, + "position": 121308000, + "state": "playing", + "controlled": 121300000, + "error": 8000, + "settling": true + }, + { + "digest": "76850dae85e1c5e4c0b6d20263022eb185e547b02b3165856849e479da35d050", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11600000, + "position": 121612000, + "state": "playing", + "controlled": 121600000, + "error": 12000, + "settling": false + }, + { + "digest": "7bd4a82d0c281a0f53a1904e2d1b6ec374bf0f82b91fd3f44d7948af7ee49a17", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 11700000, + "position": 122400000, + "state": "playing", + "controlled": 121700000, + "error": 700000, + "settling": true + }, + { + "digest": "83abd576fcec5c8e6527a5da60d62b26379ac39bc95ae3858cf49cbbb9ef931f", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11800000, + "position": 121830000, + "state": "playing", + "controlled": 121800000, + "error": 30000, + "settling": false + }, + { + "digest": "757b328d36764c3fc1c058008a4b190604571257efdf71a3a46f4e5428b9cc86", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12100000, + "position": 122092000, + "state": "playing", + "controlled": 122100000, + "error": -8000, + "settling": false + }, + { + "digest": "e0d01f22a5e195c0c548506953dcdd1f067b1ba24256587a4299a8a65f54ce79", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 12200000, + "position": 122195000, + "state": "playing", + "controlled": 122200000, + "error": -5000, + "settling": true + }, + { + "digest": "682f3f064c01bd056db984e8b0fdd51da069515e6d189ff939c579b3038f3cd4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12300000, + "position": 122275000, + "state": "playing", + "controlled": 122300000, + "error": -25000, + "settling": false + }, + { + "digest": "cc21249ac1b1185e8b33bb331beb0291a351db3a54296ddc131c2425816ec0aa", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12600000, + "position": 122620000, + "state": "playing", + "controlled": 122600000, + "error": 20000, + "settling": false + }, + { + "digest": "d99975777821cbe9bc3c4cf9e6925dec7f7d579dc6d978f57f82196af9c67f19", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 12700000, + "position": 122728000, + "state": "playing", + "controlled": 122700000, + "error": 28000, + "settling": false + }, + { + "digest": "437e3b0d102d43ed5230dc5d0b2b30d9d1f2b6c808a53b3808fe0d95f3e65f34", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12800000, + "position": 122845000, + "state": "playing", + "controlled": 122800000, + "error": 45000, + "settling": false + }, + { + "digest": "3a673a5fdbcd34041871f33cf495de531205612ae94d8c7f53f0722f3bf4db59", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13100000, + "position": 123085000, + "state": "playing", + "controlled": 123100000, + "error": -15000, + "settling": false + }, + { + "digest": "329b40f95f11841f1b4d642304b5d4c064fc9c05fc44859c54755e2603627d97", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 13200000, + "position": 123188000, + "state": "playing", + "controlled": 123200000, + "error": -12000, + "settling": false + }, + { + "digest": "e9153f5152ead640e6a0be69ea00b5fc38614e42904b3212e0f22efe78c13cf5", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13300000, + "position": 123290000, + "state": "playing", + "controlled": 123300000, + "error": -10000, + "settling": false + }, + { + "digest": "28305620bfb13a8a728df154cb17f981da3f61a39a04affa6d953fa74b4db007", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13600000, + "position": 123605000, + "state": "playing", + "controlled": 123600000, + "error": 5000, + "settling": false + }, + { + "digest": "411fa02230a3ab75d0abdf160c41b1df9338e451f210336535112553e360ee37", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 13700000, + "position": 123706000, + "state": "playing", + "controlled": 123700000, + "error": 6000, + "settling": false + }, + { + "digest": "6a6a671a5fc6abf44a70e224bfa5974d2464050c70edb9186943bf6ddf474a11", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13800000, + "position": 123818000, + "state": "playing", + "controlled": 123800000, + "error": 18000, + "settling": false + }, + { + "digest": "60cb3bb2b3b7e5e8215a213290474adfb102deefc15611fa358760eb95e12879", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14100000, + "position": 124185000, + "state": "playing", + "controlled": 124125000, + "error": 60000, + "settling": true + }, + { + "digest": "142e4c7fe0ea48229ec45ca4e429ea3b7e2a7edf7e6705f34a214532e90ebcd2", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 14200000, + "position": 124310000, + "state": "playing", + "controlled": 124250000, + "error": 60000, + "settling": true + }, + { + "digest": "eaa4ebb92967277fc5a6d2588a4d0a1ea0d0c7426e94d3d6f99119587dd2e6b9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14300000, + "position": 124340000, + "state": "playing", + "controlled": 124375000, + "error": -35000, + "settling": true + }, + { + "digest": "2d1444f5cce4d548ea21e7ae663331722b61fcff66bcdac28145dc8ebc121c39", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14600000, + "position": 124728000, + "state": "playing", + "controlled": 124750000, + "error": -22000, + "settling": true + }, + { + "digest": "e192833f4aa3b36b8d696cc18a119fde084a4b2b4435e78b432e5d469d127101", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 14700000, + "position": 124855000, + "state": "playing", + "controlled": 124875000, + "error": -20000, + "settling": true + }, + { + "digest": "6a1ee9e122b08a3d5fad0bd31bdf86d0e3a341043bab8ac0726563d17dcce476", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14800000, + "position": 125008000, + "state": "playing", + "controlled": 125000000, + "error": 8000, + "settling": true + }, + { + "digest": "6a0109dceb62a09135b8b1564244ed17267066f38f4bdf868d6174167bc5404f", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 15100000, + "position": 125387000, + "state": "playing", + "controlled": 125375000, + "error": 12000, + "settling": true + }, + { + "digest": "40063e5ad8634b21bf4ac5d42daa98aec4286d3d2d296e7f369292242772de2f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 15200000, + "position": 125515000, + "state": "playing", + "controlled": 125500000, + "error": 15000, + "settling": true + }, + { + "digest": "31c8e8ebe3292fe1d88d770fba0e43444e6431f624324dd52bcad5373bd5c879", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 15300000, + "position": 125655000, + "state": "playing", + "controlled": 125625000, + "error": 30000, + "settling": true + }, + { + "digest": "a8f78c2ee80e800fb895fb7ed3473c73e18a90ba304c384155b5a01b117be80c", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 15600000, + "position": 125992000, + "state": "playing", + "controlled": 126000000, + "error": -8000, + "settling": false + }, + { + "digest": "653e03f327027a2325d4a8f03f623dc0b64b34bb3a37bc19408eadabd984542f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 15700000, + "position": 126120000, + "state": "playing", + "controlled": 126125000, + "error": -5000, + "settling": false + }, + { + "digest": "1aef38924412df78118148ff7ef123f177e43f75a28fa662c295dde08fbc279d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 15800000, + "position": 126225000, + "state": "playing", + "controlled": 126250000, + "error": -25000, + "settling": false + }, + { + "digest": "502fd5b185ac8590dacdde29b01370638c4ad036967fbb5a2c67fb1ddceeb519", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 16100000, + "position": 126645000, + "state": "playing", + "controlled": 126625000, + "error": 20000, + "settling": false + }, + { + "digest": "14d372d970e2f93c298c57a090f8c23b6b639eebadc18cead1ad5f2d540febc8", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 16200000, + "position": 126778000, + "state": "playing", + "controlled": 126750000, + "error": 28000, + "settling": false + }, + { + "digest": "afd2fe122702fa27aad9a4f6081d4cfbb47d4535662f0b3c924958cb39f32589", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 16300000, + "position": 126920000, + "state": "playing", + "controlled": 126875000, + "error": 45000, + "settling": false + }, + { + "digest": "659c4046314e37ed6fb6ee47af5c980904361725be4a7ea681db34a5891d8597", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 16600000, + "position": 127235000, + "state": "playing", + "controlled": 127250000, + "error": -15000, + "settling": false + }, + { + "digest": "56bd4def121ec5890a290a3e5b8bcabf552d48d2ea6103d0181dabbf3eff7196", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 16700000, + "position": 127363000, + "state": "playing", + "controlled": 127375000, + "error": -12000, + "settling": false + }, + { + "digest": "b231e31592f8d535912eda687414ed9679fe55c30cbb842846e5be11e377a433", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 16800000, + "position": 127490000, + "state": "playing", + "controlled": 127500000, + "error": -10000, + "settling": false + }, + { + "digest": "9eeb6b8aee6eb366639c6bde5d686394b3c9ae741bde663cf6ee5a18fd0eea9e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 17100000, + "position": 127880000, + "state": "playing", + "controlled": 127875000, + "error": 5000, + "settling": false + }, + { + "digest": "f26566592f3353a803e641eda1d5313bd10d067946397b0106989653c27c876a", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 17200000, + "position": 128006000, + "state": "playing", + "controlled": 128000000, + "error": 6000, + "settling": false + }, + { + "digest": "faffa8c10d826cb5f01c66573a6007853d99bafd314dd285f103f1a31b81e142", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 17300000, + "position": 128143000, + "state": "playing", + "controlled": 128125000, + "error": 18000, + "settling": false + }, + { + "digest": "d138dcc76df538cfc2d5fa7df3025266b83f57e3942e36e417daa917056dbe4a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 17600000, + "position": 128500000, + "state": "playing", + "controlled": 128500000, + "error": 0, + "settling": false + }, + { + "digest": "2f994c01c77645be4cf04a3c921bd12bcbe15a47d249d52328c9351a8194de04", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 17700000, + "position": 128658000, + "state": "playing", + "controlled": 128625000, + "error": 33000, + "settling": false + }, + { + "digest": "38ee526c4637f1b08d3364d99d746cd48695c2f5cda4a4e69f245ab33a92baf9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 17800000, + "position": 128715000, + "state": "playing", + "controlled": 128750000, + "error": -35000, + "settling": false + }, + { + "digest": "5030c59dba08db7a9d638e05f2a3b2011fa12dc806705031e7741852341b48ef", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 18100000, + "position": 129160000, + "state": "playing", + "controlled": 129100000, + "error": 60000, + "settling": true + }, + { + "digest": "0ff49d4e69dc6c79a2628c7818ecabf5c904bafb6dd888c8a54d2f4cfe51c25b", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 18200000, + "position": 129260000, + "state": "playing", + "controlled": 129200000, + "error": 60000, + "settling": true + }, + { + "digest": "d21d547642b741a81729f6b7b8e952c6cd0d6ed0ddd3fb0fd6fc14eacbc0748d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 18300000, + "position": 129308000, + "state": "playing", + "controlled": 129300000, + "error": 8000, + "settling": true + }, + { + "digest": "7a5342de44fad548cffc0eb5209db440fba8bf6d4f35888ec9bc47d2b086e0c4", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 18600000, + "position": 129612000, + "state": "playing", + "controlled": 129600000, + "error": 12000, + "settling": true + }, + { + "digest": "b3c83a0a3f1fd99f1287ec3f7a771e94579db99f2dd19d2780f3ebf046e7e436", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 18700000, + "position": 129715000, + "state": "playing", + "controlled": 129700000, + "error": 15000, + "settling": true + }, + { + "digest": "3dd5526a844cdbf462b05fd305ec0e11d4686c4564f4b68931fa17df9372d73c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 18800000, + "position": 129830000, + "state": "playing", + "controlled": 129800000, + "error": 30000, + "settling": true + }, + { + "digest": "185bd06d21988ed8a21a8e34bd9109fadddb3ef904d92b7e7d317546275b67ba", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 19100000, + "position": 130092000, + "state": "playing", + "controlled": 130100000, + "error": -8000, + "settling": true + }, + { + "digest": "e2ff4f034500e22e580745c2823173d44b131011f651f56f319f50b22332a64f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 19200000, + "position": 130195000, + "state": "playing", + "controlled": 130200000, + "error": -5000, + "settling": true + }, + { + "digest": "bbf2355952fbe74d548f77f5d40752be6019241228cc53b03f089e1832e57f53", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 19300000, + "position": 130275000, + "state": "playing", + "controlled": 130300000, + "error": -25000, + "settling": true + }, + { + "digest": "07221edfb69b5e4f94dde2a42d98c64b79bb341798dd52915bc894c3bfe57674", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 19600000, + "position": 130620000, + "state": "playing", + "controlled": 130600000, + "error": 20000, + "settling": false + }, + { + "digest": "a3bec274594593f21f8ec9e77d4ab1f6899722fa2261633b7d967208643aba85", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 19700000, + "position": 130728000, + "state": "playing", + "controlled": 130700000, + "error": 28000, + "settling": false + }, + { + "digest": "cfb3029e1a4a5d6bccf7da281492bfd46e663239febaca779e9096676af707e2", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 19800000, + "position": 130845000, + "state": "playing", + "controlled": 130800000, + "error": 45000, + "settling": false + }, + { + "digest": "828cf2bea059d8f04e81ed584f63bd4720c5915e74a2f2e66b03d473252920cf", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 20100000, + "position": 200160000, + "state": "playing", + "controlled": 200100000, + "error": 60000, + "settling": true + }, + { + "digest": "57cdfbd20eeca6fd1a5f45ff6899ddae359aeacb02d750d2802523ba335b2e30", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 20200000, + "position": 200260000, + "state": "playing", + "controlled": 200200000, + "error": 60000, + "settling": true + }, + { + "digest": "33cec905c73b2d83f38565eb4e0095bda2607e4bf9ec416a2e1f9dc2086b2834", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 20300000, + "position": 200290000, + "state": "playing", + "controlled": 200300000, + "error": -10000, + "settling": true + }, + { + "digest": "6a66809c152ae8099308a66651ee44ecf4011d111a34590dc437593d1d1011fc", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 20600000, + "position": 200605000, + "state": "playing", + "controlled": 200600000, + "error": 5000, + "settling": true + }, + { + "digest": "6eb76511a1fa57ac9ce02e00233fe4d2c1a076400e899907db17f524ded15bb7", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 20700000, + "position": 200706000, + "state": "playing", + "controlled": 200700000, + "error": 6000, + "settling": true + }, + { + "digest": "13268b27b13ff9d2e2c5be9b3f82113df29a71966e2e4951f2424dece1611cf8", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 20800000, + "position": 200818000, + "state": "playing", + "controlled": 200800000, + "error": 18000, + "settling": true + }, + { + "digest": "b87b47b3ea8ab646335567c10aa14652e4ecbc5c4e417c2d5fb23cb994b69d02", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 21100000, + "position": 201100000, + "state": "playing", + "controlled": 201100000, + "error": 0, + "settling": true + }, + { + "digest": "967edf9ba5c81812ba8523e56cdca7f2bf7bf56b17c991d6ccdb1a2f34d96e89", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 21200000, + "position": 201233000, + "state": "playing", + "controlled": 201200000, + "error": 33000, + "settling": true + }, + { + "digest": "c9c0bff7e56dcc3f187be1f25a923835b9d9c711e8ecd8ad48d7483b2786fedc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 21300000, + "position": 201265000, + "state": "playing", + "controlled": 201300000, + "error": -35000, + "settling": true + }, + { + "digest": "7de553f590cf69ea3998ccfeb46207ec1b5742489eb8f4e77072eee3976241a0", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 21600000, + "position": 201578000, + "state": "playing", + "controlled": 201600000, + "error": -22000, + "settling": false + }, + { + "digest": "30e6e7a2ec1933ffac74471c89d7cb7f52305a181a089a555278ee2092a44d4c", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 21700000, + "position": 201680000, + "state": "playing", + "controlled": 201700000, + "error": -20000, + "settling": false + }, + { + "digest": "2c41c6e65b823c97a3d5c3d9dc1cb91a6f5417d8ad4ac46d6d5a248de0f19a3b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 21800000, + "position": 201808000, + "state": "playing", + "controlled": 201800000, + "error": 8000, + "settling": false + }, + { + "digest": "fd865b3e3fc06e88a1244c755b877f1298b0d10876101f36b5bc1e9c0f775b00", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 22100000, + "position": 202112000, + "state": "playing", + "controlled": 202100000, + "error": 12000, + "settling": false + }, + { + "digest": "385f4cb1941ba16c98116ea2f6a8cc6a8d36cc5ca53cac80bf79b85d8c198291", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 22200000, + "position": 202215000, + "state": "playing", + "controlled": 202200000, + "error": 15000, + "settling": false + }, + { + "digest": "1de2ea3077f7e90273c32256decbbbdaff4b73980208647812d0a0a414702ec7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 22300000, + "position": 202330000, + "state": "playing", + "controlled": 202300000, + "error": 30000, + "settling": false + }, + { + "digest": "95412409ae1085d8c2c439fbedbc85d1ce6487e1a057644845ea0544168eefc7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 22600000, + "position": 202592000, + "state": "playing", + "controlled": 202600000, + "error": -8000, + "settling": false + }, + { + "digest": "960bfaf1000eb6e6ff94ba636a55eeca5c354376dee15a0b90e43e2a87e6ceb8", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 22700000, + "position": 202695000, + "state": "playing", + "controlled": 202700000, + "error": -5000, + "settling": false + }, + { + "digest": "979cbebd0fa4f943d4ee9ebd6dab12c17f9d3d3b2dac3236083024f00d06ceb4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 22800000, + "position": 202775000, + "state": "playing", + "controlled": 202800000, + "error": -25000, + "settling": false + }, + { + "digest": "2281da4bc841f292b3261b46c44d7c8c1dd697f63de239c8e2c2d6fafd9ab0f3", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 23100000, + "position": 203120000, + "state": "playing", + "controlled": 203100000, + "error": 20000, + "settling": false + }, + { + "digest": "9c1f21d94cda739b62dfd8dd232c7c0f0f7c56c3c3fd11d25eb604c1d4dd5022", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 23200000, + "position": 203228000, + "state": "playing", + "controlled": 203200000, + "error": 28000, + "settling": false + }, + { + "digest": "a1620a12b27caf6e4895c58f6e9ad83f5c2e42bbe17c338aa6b7e120f32db48b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 23300000, + "position": 203345000, + "state": "playing", + "controlled": 203300000, + "error": 45000, + "settling": false + }, + { + "digest": "8ebdd846b60740177f921f9106a689523128f11cc88e81ad3e2f152f74cbb3f4", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 23600000, + "position": 203585000, + "state": "playing", + "controlled": 203600000, + "error": -15000, + "settling": false + }, + { + "digest": "370516b367c5bdf7dcc3a245db09b95140a57e746e785d12838751465cdacf49", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 23700000, + "position": 203688000, + "state": "playing", + "controlled": 203700000, + "error": -12000, + "settling": false + }, + { + "digest": "9c55b57f043ccfe860fec2d1b3269b8acd720084d70dd55c1a840774594f5af7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 23800000, + "position": 203790000, + "state": "playing", + "controlled": 203800000, + "error": -10000, + "settling": false + }, + { + "digest": "bb133c2e1e6bd4cd1d7c3d739755c9c17d708bff659bf7bef4b611ea71398398", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 24100000, + "position": 204105000, + "state": "playing", + "controlled": 204100000, + "error": 5000, + "settling": false + }, + { + "digest": "51c2cc3c62155182bc271905c293840041eeceb11943c8e4b3b4a5b685fae5dd", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 24200000, + "position": 204206000, + "state": "playing", + "controlled": 204200000, + "error": 6000, + "settling": false + }, + { + "digest": "54159ee800aa6d542899377d01edb0de2c1592937f74b64ee18dbf70f98d914b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 24300000, + "position": 204318000, + "state": "playing", + "controlled": 204300000, + "error": 18000, + "settling": false + }, + { + "digest": "6aaa3808fc1eddf32f957c23972fa1eb07d48707fedbc989358e7d48d57f9504", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 24600000, + "position": 204600000, + "state": "playing", + "controlled": 204600000, + "error": 0, + "settling": false + }, + { + "digest": "99d5be25bddd35c73c9fcf4cc4b0f780b11b4b361b6d1329aebe3852678267ae", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 24700000, + "position": 204733000, + "state": "playing", + "controlled": 204700000, + "error": 33000, + "settling": false + }, + { + "digest": "b78282fa2346cabecc262cb34fc9bc8eb06e74dc4b3fca837077f44cb0886ffc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 24800000, + "position": 204765000, + "state": "playing", + "controlled": 204800000, + "error": -35000, + "settling": false + } + ], + "skews": [ + { + "digest": "9019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee91", + "from": 0, + "to": 5000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 10, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 8000, + "pq": 8000, + "max": 8000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 10, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 22000, + "pq": 22000, + "max": 22000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 1, + "p50": 30000, + "pq": 30000, + "max": 30000, + "verdict": "in_sync" + } + ] + }, + { + "digest": "87ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904", + "from": 5000000, + "to": 10000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 21, + "due": 5, + "samples": 5, + "counted": 1, + "p50": 25000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 21, + "due": 5, + "samples": 5, + "counted": 1, + "p50": 8000, + "pq": 8000, + "max": 8000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 1, + "p50": 17000, + "pq": 17000, + "max": 17000, + "verdict": "in_sync" + } + ] + }, + { + "digest": "e2753608d741db550a20580b3eb913020496b223e2624b23dfde3b2cfd5781d9", + "from": 10000000, + "to": 15000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 31, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 10000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 32, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 8000, + "pq": 15000, + "max": 15000, + "verdict": "in_sync" + }, + { + "principal": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "held": 9, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 12000, + "pq": 12000, + "max": 12000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 2, + "p50": 5000, + "pq": 17000, + "max": 17000, + "verdict": "in_sync" + }, + { + "a": 0, + "b": 2, + "n": 1, + "p50": 2000, + "pq": 2000, + "max": 2000, + "verdict": "in_sync" + }, + { + "a": 1, + "b": 2, + "n": 1, + "p50": 3000, + "pq": 3000, + "max": 3000, + "verdict": "in_sync" + } + ] + }, + { + "digest": "f1ee0a55bffce0700b1c53ecf86406dcc65b75da0526a3dce55d917cc7286455", + "from": 15000000, + "to": 20000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 42, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 18000, + "pq": 45000, + "max": 45000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 45, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 5000, + "pq": 20000, + "max": 20000, + "verdict": "in_sync" + }, + { + "principal": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "held": 19, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 6000, + "pq": 28000, + "max": 28000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 2, + "p50": 13000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "a": 0, + "b": 2, + "n": 2, + "p50": 12000, + "pq": 17000, + "max": 17000, + "verdict": "in_sync" + }, + { + "a": 1, + "b": 2, + "n": 2, + "p50": 1000, + "pq": 8000, + "max": 8000, + "verdict": "in_sync" + } + ] + }, + { + "digest": "88e56ba77305b1cfbe7c679b576c66a4b6e2fc649d31f569ff5c77fd85ee29f3", + "from": 20000000, + "to": 25000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 51, + "due": 5, + "samples": 5, + "counted": 3, + "p50": 30000, + "pq": 45000, + "max": 45000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 54, + "due": 5, + "samples": 5, + "counted": 3, + "p50": 12000, + "pq": 20000, + "max": 20000, + "verdict": "in_sync" + }, + { + "principal": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "held": 28, + "due": 5, + "samples": 5, + "counted": 3, + "p50": 15000, + "pq": 28000, + "max": 28000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 3, + "p50": 18000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "a": 0, + "b": 2, + "n": 3, + "p50": 15000, + "pq": 17000, + "max": 17000, + "verdict": "in_sync" + }, + { + "a": 1, + "b": 2, + "n": 3, + "p50": 3000, + "pq": 8000, + "max": 8000, + "verdict": "in_sync" + } + ] + } + ] + }, + { + "name": "next_episode", + "about": "a second policy names another source at 10 s: the controlled position starts again there, paused at 0, and a guest's play at 11 s starts it; statements before 10 s name the first source and after it the second, and both sources' objects are given", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000012000d77617463685f636f6e74726f6c0200313577779e4dd3194d3eb2942add773134a3566d56995d7ead2ffd1900eba2ef58c63c2c965e6893c7aa21bc6f1c1bf64954cf43e863802bc4fa78caa1eedc260d0e" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a3017e8b7844b210f74b0a2d504a9b9b1f66e57e37abf80aabbdd5d317efaa0fdd6199b1309a87f0d44d43228a01dc2f09e251cff6d73648bdf4a16e53c22079d8c4a63ea22acb76727b8d845a0a2235c29cb95de3c6ee1594414f7cfadbd4f05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760200000000000000ce0b9d3b8bc9e42e0878671b53c7bb544e0d2a4fa94926b04af6b5b2148b7b0d8009ee00000000000001a30057584b31018096980000000000c0e1e40000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1d0000000000000005000500020010270000b8880000b8880000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741d0000000000000005000500020000000000983a0000983a000001010001020088130000b8880000b88800000109c12fad5b4554792d8c3f0cb3a6f70d8376af3673df1f408b4819d0dece20956090bddd4aa25eaf7b54adbe6ad776d2c97386a0c6da2f55ec90289503c6f50a" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0be0c8100000000000e02e0000000000000240420f00b8837b16d1b7c076f330e6c0d3f213c340b58d07c8a0664628ddd76bcb77fa4eb723415576049f2cc928124e3a43173049946331a67cc157a2c4f1a651a3f304f8690864b93da3f70da65afb217eb7a2c6bc41d63323f9bbce267be25f06927cd495c367746d63d991cf31e3b578471939e411d13fd037653631aec645da1607", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7401000000000000000339b7ff0f0d3c889c09863ffbf92fd4ced6d2db47fc9807f30a07bfff013996006a18000000000000011600575843310101200b200000000000000000000000000060808b5112c3abeab9b48d8e8d9be2676cb472f58d03e62d6698a8e7c36e5bf66a8739995695d1eff7eb2296d56704607b01475ee92ddb567ab07ee7620d0d09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740200000000000000fa1cd48cd9862453b9765fb1f19f1aac4e7aa64e60d301298383133e97a8c79e40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b006a18000000000000000000000000000240420f000cd57eba230f25e5b71416d2835a8d1e78a689fdfc5a5a01a02f48b1e8c50b0d93d5edd45d682f7da9eac385fa600afd0cee3e9427687bd5cc90f6a802b1f909d99d18481a5d14e6ff8dd0fb1627ad3e762d65da9b4426a472369380c720bcd0834a8041c6538304fddc6db3b782f849eb95e71b5d6418c4e062352086235700", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7403000000000000003967200590d7644c0edbdb0a44bab06713fc7cca5bf9e2ef68acd8a4feaf1a9b60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b200b200000000000204e0000000000000140420f00e1f79315f68bfd83488328ecf588390c8c41fcf1bbf261ce6e40fd151fd491c74ae9991415f20d9e2380f637a24577498148f0cbf6ff190e798f3b6aac8faf0fd2f74739ac4e482aa2ebe27ecb4251e2f512ce298c21c9799a85aec348bff600abd319229714187747bdbf7018d2aef6e80844c91165a0c899df05273cac9008", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740400000000000000b41bce1ddd361f3c4e4007faceaa5aff0f52eb8745718062dbc0fa6e6f85885e80482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b40ac27000000000088660700000000000140420f003153bac4c099bbb6b02317c9d25346753eae62743c4a56f2e00e9a08d83427e801a2e746cc3c4af4845fc7fa76a6427906fa7720e466ad8448055d7d8c0ee4014843c64e894bd4619889f2a56f11ec73a2586bbd6ba4bfdc9d7b7b4d68f0302f3edbb12288067b7518032304e3f3693ed27d70f08c64a30246633f79ff74a30a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000923fd8ba6431f9235a8b081ef748b218ddcc5add70db9d622002b5f516ca4dc9a0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b604d2f0000000000c8550f00000000000140420f00073f3728a9431c6c0e5cab414a8a3674d33a7d27c24388072774961a820d4e4b9cc3c20e790a72adad84e216fc58b09c455f9828895806073cb53aecee6e6f011a2bc9e1034746c54c2499597fda1815ab44077e501ff6aefb6c102b2d235bd522239def7d6bb36297533b70b518b37b64fc70aef89cf9873f1128b298f25304", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000038037365566e8e946df486d15da57c559c15a138df8d9a628c799f28e6076632c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b80ee36000000000060e31600000000000140420f004ffb1bebab6ba5aec17d1790c6d173eef165357d7e035c6b48e9ca845d57e61af262a1a65c2b5fbf5b176cc52ec79de4702e1747973c738b44e3774343fcd20e553fff73010222ebc67a6e071fdd32d06f47c0528b4a0bbb8901930beb47b587d4c73697577a0df6da28b00de156892bf70ff2b40866a1779812f4e9654af10d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74070000000000000009eb3e58a4aab0beee0328828a37a6f7b3d3375621dc06844a8792876271fbaae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0ba08f3e0000000000902e1e00000000000140420f00ba85e265cd46abad2d820c615eb91ba33500b975eaa84dadddc52bf29c7f25a5fde583f06760a88acaebd75dd61273ea29f415e86d9c650c6abce1739c05bb0452f52122c01c8c5d24fe91d4a01ef6d068749277a3bca8ab3b13efbd34d03a67a55d8af2b02b6caaf044f866872387bda594437e65d0f148a61853dd5102f30d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740800000000000000229334862b8c967cec92ca9701d175b0a487f0b9c727bd9cf2bd6e839275750e00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0bc03046000000000080542600000000000140420f0027293f4480f133f929f1b22adc0f8497f91459b854dc2930e5c931d1ebfab6394a4608e93ab426ebbd91f30ccdfecbee41890e36957dc21a14c5902a49201a0320ba8a966a7e83050f93d5a7ef7397a889f78e2681826580279c8a2e4ca2d84d4bf83d7d12ad1b84b64785e398c5487e872e8885482a6d898a59db4ba7733e0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000d054460c910ff74e40e25c17db250f7d983d49caad735d9ab73245e1d3de9f0e206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0be0d14d000000000080a72d00000000000140420f00d2a1ac8e77bf166d4a3103972c82574e7c143f345efc7efdcb931aabaa445916001609c6410d7a6c020b7e21d18379b8e13fb440578e04282c56df118e97db009c603bdd08fa31a4c1035922cccca9e652a50413059ef199f28d6b67b39b050753ee461674ba387ef526bdf77c4e39e393af05c106f049d7a633033718f0be01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000053709c13fe17c9a1ad530f0f06f2bd54bcfba99760952e72746c346230724e7400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b007355000000000000b63500000000000140420f00123a23714bdeb471e4bed0495bec1737177c8cf6c915856eaaf4c7401951fcd4b47aaab724921aa1267c1be17ba0ef1e56db5071f7f0ff5f4023f7a6de1c7b04629c20d67a2dab9d9bce1bb7c6f9ccf0d8d8ef56857b56dc62c7cff208db10003ddcdbfedbc544b1bd94136e18085b7fa7675742448a48acdc9a7bff9511a204", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b000000000000001aafbbaf3ead1dc1b8110488b3ff7342d4a8413296b23d4d83c448237034af0860b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b20145d000000000068ce3c00000000000140420f005aa4df3c8233af8fcf3d73d00085a3c1ffe576974fd56632285846550e3a7e65a85b4ed972f3be75ac005fc146868cfae383a57d630c8943eec3130e5fbf38022eb59c8f027872944dc19c788d52a3d5ef2a18c2b7c6121d0cc91d918c6d1c5f4225e9a6d19b8d0586c0e07da653d2860c504c9508a62c65fc39b49b44b67708", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000d95647517281ae3d63689f8b77229043c0756585b1979cdbfbe7aaffbe9adc3980516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b40b5640000000000a8bd4400000000000140420f007ea19d8e748db290d0dbf19ba0da64da0a7961da3cbe76b0b02c4499ca916724334b38dc7389c7a8e4f19f11ea5de7da90955abc6055e7013a301e19abfac7050dbc6083a1390496343309ed9e573b3490ae75e2313cbea49bc46e4f863ef0ec97e91a427e92573b3658510064c616915897d48115d54d02a422b1e7e9cf7107", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d00000000000000585e978a6fca87720b44cbc7b8ae4f29eca21b6294fbb516ee8db4a6f910190aa0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b60566c0000000000404b4c00000000000140420f0053542eed48b58cb30f6e10f7de22509f21a7f4f598d4882e7b7e0c065b4a38a1d9970e0550b030eb1e4c3ca1b2d99f5e1e6911db69f17e54a5bbb7bc52467f0cc1d5cb35795cd38acf7779cb52ce1e8946e8c1cbb7fe85919ea1313684655f3c924e649b6a4abd5f64d33df563c0ad6e64610af064042aedddeb65ba0b8a9c0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e00000000000000491282c9c1af71d8da9c38cefae029174a3b76b6c6f6cde6deae20242c73a9edc0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b80f773000000000070965300000000000140420f00bad7d99d84e31cf9d2f4c15522a20f8c5886c9cd61b468be9625b06b8a365d96631ab01786324ead585a14c6ab34dd138f77455d1abe994fb8b579ca094dbd06a91e26e1a02ad4e32d068a3c6ee27c46df61fdc52784753a46ac1a8ac4cb9d1e77db21360a664e47dcef374de507d015502be458214a4da37575bb1c240fc80e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f00000000000000a95a9cdf04edd5b55535371fc5a6ad8088d68aa427ad7efae281c6845d49c3b8e0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0ba0987b000000000060bc5b00000000000140420f00aaa0d4275552e67949b28edea5b51458c45945e16ab03b5bcb3d462c3c99d2364280c084b66bb874b54224c8b76e190dcba204f273f387347b973c005e37090b2710758ba2f92c94922c81e67d2a957506454d91d707e7c805d397a5d1f4a47806ce12c3de635d8d9990c80df64f1f46962ca5a9b10059ba721c7c0281a46601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000d7eeea192a3451314e1cf8b8dfa81c2e56786a22f7651eff31b9635ef218ad8400d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0bc039830000000000600f6300000000000140420f002eddbe1f6bab35fb713f01017f0c9a80d943ffcbb9acf1c367b213e6d111217296590806231fc806c7124601a6956103b1923d19238083d58bca9f37fe898204b6a399e88282f46881605e69ca75d771d96f105f453f35569a39a4f4f3e1c697ca3a65c144c822940870d477817367154dbc86611837944be7de3380bd86620a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741100000000000000419f171d49f306453524aa64c9cbb4255188242f750f3fbb703c1bcd8962f8d020778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0be0da8a0000000000e01d6b00000000000140420f0055bff264251af07fc72c0199a2e89106b5db1e406d42af89700bfe737f9405210894bc0b45a2db06f54946589f1cd411be9815726baa2f17108cbee03462180749576c4ff5d0ace0557930f3c5db81b97469f7d641f9612d1e7b5beb7cc7cf336b920b7336f12cf4064cc1d05db1350fd0ad5ddbbc9048edd3284fa8fd5cbb03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741200000000000000e8068a810dfba54beb791e605313546e50a4d7764109a81b03db9488b231166340189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b007c92000000000048367200000000000140420f0031221ad78d89cf50f76f76db6d3407d40b02fdd1a1fba177609ad5dedada0e708fa97e37e392b191d0cf77e8dafde91d29e652ddeb576f4bcaf3ae3c3f193a0094472ae53690f158f5d6befc871eb4fb46f1bd8de9bc44845cb3145b33b647fa7eb42cd62f5c01db74717211df89aa302122a277fb9ffde811c4943df2059b01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741300000000000000d53a91751fd24bbdb9099667ebbaa951f14663238e9ca447f0a5e3adfa63593a60b99a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658201d9a000000000088130000000000000240420f00be763d4597936b83efc47b83e19d74023e102b0e4ecd9f2d24b437aa29fd4d5a612527b369ed821029eebc27e30d3c04a5709acdc08f4cd6a0c83a4ffe4a1102bb93802822651dcefca6a6f0c468f0fba3695aeb64fc3f6203bf4a794e814a27961a291ad3c423739f4c8e63fbdda12c04acbfd8e70b851cab28f933e1eea80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741400000000000000fbebc8ff7dfee69422f63372fd94cc6652d83291d93d3cfa2c29d0cbdf0f7b68805aa200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65840bea1000000000000000000000000000240420f00696f2b4611024e115a8adf75c8b175a0fb5de7b0656587fe3d1ef15cffd24ec7c78a9b3680585e9a485e9be86d1b05ca5dc458cbecce6fcc49e7b636b2b1d90e6973261d79c5624af7a39c322329412904684a3ffd3c0281c59ce145c9999ee112ac0cf1aa0e7725716ac5bb4deb774eb251a6a4c5e00bcf51fe0c08204c7f02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000f7dbeb409c7c4ad0120095de646cc85d23fe9b7037ff34d67cbe0237679b90e8a0fba900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658605fa90000000000b0300100000000000140420f00be1b1cb775575d87fa45b643265c61406bf2619194182de991c886c0a4ff908b474f797b7de9e8380de6f2fff15480b3bbf020107bd584f46260c4ce783ec70a71c8fd17b815f3e089a40d2aaee0741d655fee966cccbac963da20074dc87e8b6ff5536e21591c6361c4c86653ab3fb37f732dae24b83bedf3c6f2415456050c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741600000000000000e8430ef89361ce101cfbab99ae17c0f57a67f2a403883501870a7c94862a54a7c09cb100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6588000b10000000000a0560900000000000140420f00daf21595734919d9f3cb978126aea37507e9970a22644edf451eaa5e1a45d480ac338c3baa626b8837465724b35ae22f01d70d916af09121583b853781dac801a51e187a3b41a7c705a0a9062c87e08f5360fab8fe0c26ddeeef5d22ac7bb05ca2e534f1e54dc47a8a343998881f605d6f153449f7dbb9fe854b6d944481ff07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7417000000000000001e8556a9522777d2e4cb6671a643af7bc310aafdab81e11c8795bb1baa547237e03db900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658a0a1b80000000000a0a91000000000000140420f0085dff0c8095506a7e23b2a011213cf8c7f9aa9edc45b8fa157c9328b1ba7746df18438cdfa838e005f064c1d5e9821a8b64d90eb0d54b30b3aae827f9edeb9097a7f65d228e4e24abe2a580ee84fe82325f586f1df2628303385e9bfc9cb475579610975619890a4620fcdd92a7e8adc0e02c3c5f4e94d838d4fe3d10fda2a07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741800000000000000a23133171f991cc31f1b96e7730448139ffc8516d293c4efc73c465cfc50c3e900dfc000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658c042c0000000000020b81800000000000140420f00738ce7c1eaa7a1fc34cfd5bf2473879ae342fc37e65dbd043e52a3dcece10016c60ca5dea3473db5d7fbf444234c8e07da3afa79d2240bb46507d2bc11b1790490bf031bbef86844aeceb5f43bcb389344ec912f8f5179e3837522aa2b9b4f58fd16e58ca08337dd8a99321c7f3b6d03367da9b2df573b6deeabc1a5d223e706", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741900000000000000c91b4c289bd54ae3326995e40b8d924432b234c4ae4ceaffa69efe9bf82701cf2080c800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658e0e3c7000000000088d01f00000000000140420f00e3f2846544595aef48800478966906bf6dbe9ba92f1bbc0d2de5fba6e8683d156d636ad64af6daa505c02fbb08d7277b31beef0f95a8cf079332b06db8c10004a305d05a0c558aee8377848ed5b2ccd0dff7a2625dbfde2c43a98ded49c020bf70f8dc65b62f7e501b72dbd406acfe751ff9ea4158dee92820b9a0177513750f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741a000000000000003cf975a296e8bfdda8a76055f275fad5bc22997b30efbeb5b515b608771ec1394021d000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6580085cf0000000000c8bf2700000000000140420f007afbf6628de2c4b80c471bc879a30b505723f629bd54eadfabd27c78e4bab0d7ca0e6e39117ded41c56c3244ceeba69fff6d29f3fab95fd393f10429fef3a90b1a513c674ea79fb4b7adac689189047e918c768c775a3e12f4fc41b4c194e6d4d2b66529c5ecaa19b3da6ca28861ec44d4479fbea53a80be1642535fa3019006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741b0000000000000000280928e5d2f9b2d01d203f0440edfcd22a05972f3667c2d605f2f86e0bfe4d60c2d700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6582026d70000000000604d2f00000000000140420f00b4cabf3c7b7f79932e62ebb976dbd1e28d67bf79dd11c2209688bf31ab3763a42622ce643bb3560e0997d2e7a2454b24ed60b540f5cdd1d5b8bd70370e026502c1b191cd20d6dd9747b7174a4e85276365817e60370b345cb9575e6f6cbdad34f42889fcaf6754675dcf4d187c2fb957d8414499b15b4486e9e67a2ac07ee306", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741c000000000000003143c37f67e077d79c631574d1e0dec9d68235e34792958a96e8d9c880c148838063df00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd744c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65840c7de000000000090983600000000000140420f000e5fe6bb23e6b632c4b93cc8828bdd10ac4518c902e5c4653358fd71f616400480ee8410842b053e4142cf551104f3501183da5568dfbb93704934b2ed5e0a074633c5bd478328d4fdc0121c4478d9ba84dda0bd7cc8c374601ffac7d9ef5aeab8ad8de3dc0f2762145c3bade4aaa09a0680e38578d50c0201bd6b6ff8fc8c07" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b20d613000000000030750000000000000240420f00bd5afc1c102ee9df9678e975a6e5431591ffadd93ee34bae5e5ccd9f1526470ea9ae672a499eddf872d38f2fd6843063b408d33d18ac122acf634c099765a0024005f5ad0adc7431980397618ba706889d25d46ebc8222400cf60d0fdbfd8b73c47dbe30bad81ea0cbabf3ca074bde27cd0428ea59c29a0d4bc42a16b4baed01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0100000000000000f02e0a4e1d577bca99cf14a5e95c98970aee705c057610c682d62f2f826b6a5880131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b40771b000000000000000000000000000240420f0048809447b2e8b6352ab827fc6d8abe689b41e1e23a656999933a025e800f7283693875081f0abb22a3873d3c9cf05f21615afa5d5bf678dd4244dbf7fe6c130fa4271fc8bb54fea6632fde267eb45cee40c85844612ba473ad398f6ce1322428c5e6b2060ed680e726feacf44a443bdf8620a2aba2450cd750bf88dd3e74e304", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0200000000000000f1ade7c9613273568a681cfef3989a9f05215d7d6b22d0eb50769cd2b2e15cdca0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b601823000000000008bd03000000000001f07e0e003b1ef67bbb7626e8f58a69248b6dcb0a9479e5bd8aeda6043aefd8ecdc4b1e1684d2d30f64fa646d2def9fef4f27011732fda7433332f9dd5083e7e53098590053cc83d2a368ba8dd810194fe65eff5f5127a65f71792f0f3e803a438368e47f00bccad569f90381c9832861bd4026af3c6fa568032dfaf63ff8347b0e8aad0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000dcf94b4131c2c5e80b8071a3d3b1b2d2214b31d57e6c15df10ed1951e171529ac0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b80b92a000000000050870a00000000000140420f0093176f02f490ab80a27f2325925246cb1decafdb53adb07fce7c1f974dec68597c5ac14a7a110f32dd89d60e2c544d5110b8bac25b8b88549432f27e1cd61b070d8b09afc4aaa0f390f70c9c187efbe98d0953add519fddee72694df156cb785d889615f265c6ad8f44422d193649970c04419465fa8ba3c8a7da5fd12136108", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0400000000000000311bfa56d8ecfadcf00e88c58919d892212b4d0bf7f23d3b7bb79a7fa8b05d83e0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0ba05a320000000000d0951200000000000140420f00c5fcc4ba31f9add0787d862f29652cd6de52899456de01db7dae82473b5c9cde28168b313b57f74aba7525199449af7234e213f10e186413cb1eaf8c713b640305bc51a59809bdb2f8e6b055926dce73f8488ae9f7645da8f8cb9485c65e8ba38358b4e85e2ea3dd10c7040faae4c4f0bbcbca5ee68630a2263b075980a0b005", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a05000000000000007c4d15dc7ed9238b4a61c40f99a4d43a57f983a34f9632a0936bb20699b9b26900983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0bc0fb390000000000e8671900000000000140420f00eee23956bcb67334cf4acdc24d7889ccd340df4369b47dbe6bfd61900033921a2255e8f88e883bc509ca72039ccd92bddaa353c4c3736432dd6b31e187acee055b866f272ecac7ffbc47ac7f10dc2afe43f8376e5252e2e4e25ad859ead3b8e84eb6704779285b4346602e74eedb83f66635acae3a59f261317cb3ffb050940f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000a4dd42062d7b6c726a96d5151afbdc9d55cd4b429460c311ed8f2aeb4af92bbc20394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0be09c41000000000000b12100000000000140420f003f79838b2b3934c4563a47cf7c7ef26c8b163754efb5c90653317cf53fe9e5ed31c849fc7c309494539f4f733ef7e37b33c5ce4fb8d3abefe7e1d760da88af067a8857b65b5dcf6b622d52ada18bbb11f26fbb1393291a39654ce6907a5d4a939ba6f1f9a75d66107562e3f911ecbdca5ca362d2c7e434ba2fe98b28ee2b9c00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000076d4c4554fcc1f8636f042486a9d1bdc589cb9052b926e840f72ae809714daf340da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b003e49000000000010a82900000000000140420f0079c14862a6b5b52101b6c7b554e551224ed5ad9d04c97e32ba867a91014a9bc4c75b3eaf72d2d196d33819fe484ff5ca0cce9861c979f8f078d955e1bb21bf048e98f885b185b8173bf7393c7df831473240aa22210124113fbf6e43fd03cf92b91a2083d1fb64e7e2076284b979ffc025934635ae36b14d7f52d15238c6470e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a08000000000000008fdcf3985f26fa1d7284d4b2a966e5dac0d40ffd20dd2ba7c577ce7ffe06780a607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b20df50000000000058723000000000000140420f00e27b10f435555a842840902a09f609e5596df60ad11176bc871e89a5dd012835b7062742a64ee898a077052feedcc30f668a61f32674d5169913d922610bb6098a29f46f9be86d1c3d210abcfd7dee208d49f60c3d3654a921cb92dab2213cedc5cf5762ead1ee6c2ea3a519ead2dadd547763d636057f130c7aa7d4ecd5020e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000cda83f2a443dc9419921132c5bdfae9052d30643a95a50fed480633e75729e43801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b4080580000000000e82439000000000001f07e0e00cddb760d94692cd423656b686ed9135b4a2725a22636da2e9c4486724d8bf4c3bb3903e8a38998cf8990fc6af176822509c48c606821e2f76964eec70ae58102077d664cd369d6c7dc1a5de9b6ba87a0f8090bd5d2881d57a9ec51945e91e082f12e861a253ab083d352275d68a0465a50a92963cdff53cbedc41605298c4a00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000bf270b0d2f67a70f6b3c430e4839ec4d9f2578ab9bac1faf07f6bf9791721e51a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b602160000000000030ef3f00000000000140420f00759dcef5a7c3e6c67d96799716f4948ee4392c62d94b6ab5ad3e778eae270645f9451c74f12b8682735ca9f88392fc983f8b862e65571c95fef6d11206ccfc089cd808a5fbb0f762f220148b9011832fdc4b4ac19aba2e57e95f4208cd78d2f3b7120d70e369da8b1dc488a40ad293097484c598c46c713e72a69818e3878d0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b000000000000006a5708039445f3b4a31510cadb124fb87ed00ed0391a00f81878b798d1e73a86c05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b80c2670000000000b0fd4700000000000140420f0022d72d32f2244e09e6a7b0d084a723b22ca5f677b7cef9e9f96dfaf25fcc9accb022f0a683dc50b20a506c357632e7e9b8a1c1f3aec3c96b3a5ba65342d6440b3787c2292fede140609fce4bdbfb7cd80bb3023f490fc860e119ba4fbaf3999f2c6f5c3960fb66cb022725f321b0a8243a2dd6e8db98286fba5f1dadad2d8a09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c00000000000000062a06f19041d8c76220a2e2bb0d5f916d2ca1af24d01de9b612c4215400140fe0ff6f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0ba0636f0000000000c8cf4e00000000000140420f00e602e7276bec6a3281b67d17a999173a81e9c7431f69a9b2739d6b2e76d1a40fdeba0f27a097cd416e02835cd499605b4b34aa65924f01b1811308b4ed2bc700a1d5148f8b83bc6654c9c14b59402377be9c335f594a142cd55ea7353de17381def60d50f6b3e1f9601d111f6707a8deb21034188c22228f4a246b51e04b5f01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0d00000000000000b694ca2b5aaf0cebb03892bb4a63387a626cc8c18eb0a1db60d4c6d72169a3e400a17700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0bc004770000000000e0185700000000000140420f001b532847a4351eef0cef4440b71bacb01cf96bbd5b05fc28d0325eca65a4ad54cb37f8637f7a790c966884e3294a7215559a71375f348c4cab9e3b9f489de90b19e1ce90cd91e43f6ba345b06125296d805bcdc1b77eab404d82e65a88743d0b4e85b2d3252421272d6de784d80530d3c35aae73a0f8d341a5cd3cf524f68d0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0e00000000000000d55e78b6b95636cfb2a5e9afd2cb908e01e83970ec0dd82ee26af613f12e789d20427f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0be0a57e0000000000f00f5f00000000000140420f0028d33f3ca2c7948012248b42ebb67a125ab8577721107f01b0998b695f11fae8c025666e482034ab0f5b3ac59c16cd890fb29fa7d10aa58b059d8112a792920e7757b69a9cf152056007cfca78dac22e84e4071b0efb9c699f6aef2850cf2e397acf6c7a22a3a53928dfc6e5f3a543d0bb33917d5207639095b74a95fd40a80b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0f000000000000005eb7c3e42a2df94f4e9022ec8a1a49a619dcae9e8ad2d118f46921e46ca0beeb40e38600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b004786000000000038da6500000000000140420f00b35c501779f289ea3c889bc4e37163e1708e40dbbd61e4a55fdfae33ae3ed0afc214ecdabd741f56c1b1e706bedbbda9724832a531e41aa8f02b7e5b63843c038c1007a80c146648f78d82516f673d02fef8fb158a8d177cb9852b1414df07442c65a120a4a4e9455877591f58600f9f8bb4857444c150ff1c64a8afa6ffa904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1000000000000000b778b69c813e91e538d1223d72ae9746f24365952c2bc38bc70a84dec75d415960848e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b20e88d0000000000c88c6e000000000001f07e0e00d278e98d6df2b91543f0e4d0cf0bc378b296e6e99b0ee48af254523b3593814141f138e750ee46f27f861661df4c4dd99f00e40378795588d5c6424a4bbebb0889cf84f63461f6f25a53f2a9975b217d6e81ab39a46c41de9de5039f3af915a236c487a0225a43a19ad9c77495d96503312baa4330bbcb7330c1f1b55700400d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1100000000000000db9fbc505e48d4da52c8a5316b7f6ddfcc73941611f2843f21b92d5fc4220dad80259600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b408995000000000010577500000000000140420f007ef7e805cad604178e80a0386ed11bb516bde2daa33a478617b283f3a151a30a9f3a3a08b0cb2eec47b45b875c80191b55363628ccd7e51deded12fff275d70ec1e3b79cf9a75611c4b3f981075e992c6e2696d919343635bf1fd8988d5ff0dd171c1ee892c083dc6538df578758932464217eb4f9f59ee839fd75e98c81ce09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a12000000000000000dfef1e89553ddb93e59eed7bd358a1accba527ca577b20873c466acb16962ad602a9d000000000000011600575843310101c0d8a700000000000000000000000000ad9d26585f81199db95bfc3903f0c629b4b08fa141d067b246d62b8998bc7fd8cad510d1fb79b6c71fb1845439ef1978d64aebfbaa169b2ab59e34e1a81b710c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a13000000000000001672f132ce6a5e53df1ae72b7f400faaf27411de281e04823b9c45bf3544b181a0c69d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658602a9d000000000050460000000000000240420f00c3a525697db678d68700cdc3cd7d769f987b4aa6935bd276701b93daab2b479a1811b6192d02e3aa03a416042830b44cf1042c518a18ec1f589a5b659416a8082b5de26f2095d617af8bfb80690d944a32e922054b9ac344adfb54cc72486d2a3762de048490d63e3a474775653dacc8d3155aa07a27a736df305912a1aa8905", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a140000000000000085d02afa8fd191eb5d44d8a5fa7259106ffca50349cc02a5d47cbee993d81b37c067a500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65880cba4000000000000000000000000000240420f00d87168e858ffc39d2b845e91d8060e016f64a999af5138ee2bffd6cda24e12aa10739ad49f14f59f5cd281e95e37790a85209eb55d0629a7db2a7302aeaeef05c1fc4b3805d72f622f4a46373c173a063fa8ca6343567b272181b9b3f6f8d8127535ae97a0f9c3cff301a6d36bd841b44f5f505b610341ab1d45406584df700a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a15000000000000001154238630118c2dcae90ce758633e08c0e9fc73eaef79458aace6f955682112e008ad00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658a06cac000000000020b30400000000000140420f00446795480fa3248fd4e3df4eeab7cae77042108ade55c7f81c3e49088a0fe7a893b9b360de4daa96ef6fdc470c048c5e47115657da3ff69e5e4c84eb39dce007474ca47d02e78433276b637ae235ecda66507bf7d57a95de4f7b9f3765228cd5ad52509f70a026348f5bfc31fef5e0805962244d4028da86b9350366bbae6004", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a16000000000000006e56ea1253e4776d06f4c5d022256598a20559898ac9c8b25c4c1e25868b2b4d00aab400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658c00db4000000000030aa0c00000000000140420f00af610293f7880bdb5fff7047c7d458ae722ce5c050f93e0e19f4f3a3de0954da626d6e39707bf418f70109583f743601742cd5d1ee71a07a972e1544fb7fbe082c5b07f454f1411b5c2cb8b57dad8f91d279a4b7a5737ed5859854215c4cbf28383cf39d36019bee4fe5bcfb2958539345afe5f2f3d6b398f228d4b4d63c8e09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1700000000000000e4db476adc71f8cebdfe2d8035a1e19cb331b5451c5b73e6f0ce283af257872a204bbc00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e658e0aebb000000000078741300000000000140420f00e49b56e4c7c877eed086a1277299cffe60d8aca2e9a9ec13d697e07939acc284f0b79b9057bb9b3e3bab7bf7c61cbc5fa400c0064093048ab9e9b94a54008a06c60356be5e0c240282c190ff7fb983f0d47f2ee67b2522fb7b591e1fc6dc0f4b189f621c2a4ac165ae0e0fa8e997137ed17c28ccb956e3ad2e430a1e7b08dc0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a180000000000000043a8851d988ecb5db6a93bea8a5bb2ffdaf73ea19076d4b1e5ff99cad78ab5fe40ecc300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6580050c3000000000008271c000000000001f07e0e004e4ccbea945471b26af498fa370bdf3831a2eef1dd69b30f08f6c87df30bb9e36a018a204324388c3c5d3c91e89ffc24ba6b4fb965d693ef5e716b8535ab67048aa362a211946713cc1c4178061bba0f18f745c0c0dfa8fe34c513f1ddbe1fb87a2172b7793e002324f09952ed49e7f567a2dbdffbc892c6e66e53ba6b2de505", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a19000000000000008d3e40a12427a953725c1d07c605d0e4b7619ce78f6eb693d2186403e4c0d52c608dcb00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65820f1ca000000000050f12200000000000140420f00bde0d3be148a62d62527d4786cf8504587645d2827e92eabb7833c687986440ab8c76375a25d48dbc0687e739f68552ad7f3d7d4ea42d987c0cbf2c7cb74ac01a9249d671a71e56591a121815c78954e8323550e2ffd318bd400c14d2d3c70fa3514c2a1ea6c64a1920bd18e06000f5a8311ae0daaf54f87b1d4f9c14f6e050b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1a000000000000002f1f52ae3a4a71484ec3e4ff384404824d01478fc87b3529ec5c2e9325b0271a802ed300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6584092d20000000000d0ff2a00000000000140420f003b7eea6a966ff05e2d1140f089347ea9e2dcdaf9b6bdf5effb69a51c6fa980e8ab676a9d2682db54a4c5b558ca030880014dad87c9e4f474ab99b575f52e9b06888efb469499722a49d12b5afc4c2aa18f46ece77723c603f4ff299a4182f4a3b31d8a5a61c0765b3ca9e553bfe764171c9b8dc9c5ed9a77191af247f886de0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1b000000000000006d47ddc7d196f04ba9fcd53bafce44fee4a01086a57c2508423c96af089958cba0cfda00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e6586033da0000000000e8d13100000000000140420f00213d39851ddf612bdf9e50c6888431bdf36eff487642c6d083f1a29c2c42ac19ec266ea61068a21576cd35bc0c5fab34ea16b565a70cc23f5f90cf0df3654e0ae516430a46703c0aed3b56fbf954e512884fc9e5453a5bf25039a12ba7ff2b149d7bb566a4ce1864a8e0afb848f61133b6bcf2cafab52c698a8827b9bdb13b0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1c00000000000000e78f04dfe40c3e26274e309e23418deddd817e8aaa652d09e651a910055a058cc070e200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a4c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65880d4e10000000000001b3a00000000000140420f00614235ee47d3c23eaba585a8cd403c45b5ee4ed4f527a76f3eb0b4cda685d70a9115ba1c217706d965755da5bac2280852a7f54371549b68d75e7630c1f38c00d9a53db8e49a2292eb200c27da6644d51e5a3ce99863697ca40ecf12c36958341c2ff756f14e0b6bc56de1935be369afdc8b3783e68d8814dd858cad2c7e4b0c" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002266d23d924318f965e1db34dbfa31e1dfe6f257e78de843b3e85517cabe66f0b005ed0b200000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f00d7cdcadc2b3a1e28f15315adc24eab55bc297e1b301f2cc3262b9f4da168937917fd31b425e1c9b4e8bec897256e5bd85c8d7723e5061062de5adc6ef60d2909", + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05ee0ec17c771bbede957f82493b50f869f682b3252410d12e684e691fc5872a74d8096980000000000024c6706aab38595db3c983ea479af6ac83e528a4d366ab699fd5dcbab7373e65800bbeea000000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f002b22bdfef729d27ce044a7bf244c56025e069652462dea4e3087abca7475d90a2f481e5db9b10a489e4625e62e5790f75a3544a0756d548a525193f7c47ff408" + ], + "sources": [ + [ + { + "content_hash": "06095e8ed1b2ac08763422b5e2a676ce2ee16b0583be08ee9c2e0b47378d65b3", + "duration_ms": 1500000 + }, + { + "content_hash": "cb8ed31a8b5fd2403cca278649416ed3a4f49c8f00afe79d664573a98525b0ac", + "duration_ms": 1500000 + } + ], + [ + { + "content_hash": "f78b1829fca227737efe857fef92b0a8568b51beb6be19cdad85e02111ec5056", + "duration_ms": 2700000 + } + ] + ], + "outcome": "accept", + "room": "9b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e", + "gaps": [], + "policy_digests": [ + "e0ec17c771bbede957f82493b50f869f682b3252410d12e684e691fc5872a74d", + "8ec8ba69523bcbe952f66bccb69a87153c301b73fe380cf9d1c3ba51c0538903" + ], + "starts": [ + { + "at": 0, + "policy": 0 + }, + { + "at": 10000000, + "policy": 1 + } + ], + "controls": [ + { + "digest": "fa1cd48cd9862453b9765fb1f19f1aac4e7aa64e60d301298383133e97a8c79e", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 1600000, + "action": "play", + "at": 2100000, + "arg": 0, + "applied": true + }, + { + "digest": "1672f132ce6a5e53df1ae72b7f400faaf27411de281e04823b9c45bf3544b181", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 10300000, + "action": "play", + "at": 11000000, + "arg": 0, + "applied": true + } + ], + "timeline": [ + { + "at": 0, + "playing": false, + "rate": 1000000, + "position": 0 + }, + { + "at": 2100000, + "playing": true, + "rate": 1000000, + "position": 0 + }, + { + "at": 10000000, + "playing": false, + "rate": 1000000, + "position": 0 + }, + { + "at": 11000000, + "playing": true, + "rate": 1000000, + "position": 0 + } + ], + "presentations": [ + { + "digest": "0339b7ff0f0d3c889c09863ffbf92fd4ced6d2db47fc9807f30a07bfff013996", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1100000, + "position": 12000, + "state": "paused", + "controlled": 0, + "error": 12000, + "settling": true + }, + { + "digest": "f02e0a4e1d577bca99cf14a5e95c98970aee705c057610c682d62f2f826b6a58", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1300000, + "position": 30000, + "state": "paused", + "controlled": 0, + "error": 30000, + "settling": true + }, + { + "digest": "3967200590d7644c0edbdb0a44bab06713fc7cca5bf9e2ef68acd8a4feaf1a9b", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1600000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "f1ade7c9613273568a681cfef3989a9f05215d7d6b22d0eb50769cd2b2e15cdc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1800000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "b41bce1ddd361f3c4e4007faceaa5aff0f52eb8745718062dbc0fa6e6f85885e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2100000, + "position": 20000, + "state": "playing", + "controlled": 0, + "error": 20000, + "settling": true + }, + { + "digest": "dcf94b4131c2c5e80b8071a3d3b1b2d2214b31d57e6c15df10ed1951e171529a", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2300000, + "position": 245000, + "state": "playing", + "controlled": 200000, + "error": 45000, + "settling": true + }, + { + "digest": "923fd8ba6431f9235a8b081ef748b218ddcc5add70db9d622002b5f516ca4dc9", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2600000, + "position": 485000, + "state": "playing", + "controlled": 500000, + "error": -15000, + "settling": true + }, + { + "digest": "311bfa56d8ecfadcf00e88c58919d892212b4d0bf7f23d3b7bb79a7fa8b05d83", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2800000, + "position": 690000, + "state": "playing", + "controlled": 700000, + "error": -10000, + "settling": true + }, + { + "digest": "38037365566e8e946df486d15da57c559c15a138df8d9a628c799f28e6076632", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3100000, + "position": 1005000, + "state": "playing", + "controlled": 1000000, + "error": 5000, + "settling": true + }, + { + "digest": "7c4d15dc7ed9238b4a61c40f99a4d43a57f983a34f9632a0936bb20699b9b269", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3300000, + "position": 1218000, + "state": "playing", + "controlled": 1200000, + "error": 18000, + "settling": true + }, + { + "digest": "09eb3e58a4aab0beee0328828a37a6f7b3d3375621dc06844a8792876271fbaa", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3600000, + "position": 1500000, + "state": "playing", + "controlled": 1500000, + "error": 0, + "settling": false + }, + { + "digest": "a4dd42062d7b6c726a96d5151afbdc9d55cd4b429460c311ed8f2aeb4af92bbc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3800000, + "position": 1665000, + "state": "playing", + "controlled": 1700000, + "error": -35000, + "settling": false + }, + { + "digest": "229334862b8c967cec92ca9701d175b0a487f0b9c727bd9cf2bd6e839275750e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4100000, + "position": 1978000, + "state": "playing", + "controlled": 2000000, + "error": -22000, + "settling": false + }, + { + "digest": "76d4c4554fcc1f8636f042486a9d1bdc589cb9052b926e840f72ae809714daf3", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4300000, + "position": 2208000, + "state": "playing", + "controlled": 2200000, + "error": 8000, + "settling": false + }, + { + "digest": "d054460c910ff74e40e25c17db250f7d983d49caad735d9ab73245e1d3de9f0e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4600000, + "position": 2512000, + "state": "playing", + "controlled": 2500000, + "error": 12000, + "settling": false + }, + { + "digest": "8fdcf3985f26fa1d7284d4b2a966e5dac0d40ffd20dd2ba7c577ce7ffe06780a", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4800000, + "position": 2730000, + "state": "playing", + "controlled": 2700000, + "error": 30000, + "settling": false + }, + { + "digest": "053709c13fe17c9a1ad530f0f06f2bd54bcfba99760952e72746c346230724e7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5100000, + "position": 2992000, + "state": "playing", + "controlled": 3000000, + "error": -8000, + "settling": false + }, + { + "digest": "cda83f2a443dc9419921132c5bdfae9052d30643a95a50fed480633e75729e43", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5300000, + "position": 3175000, + "state": "playing", + "controlled": 3200000, + "error": -25000, + "settling": false + }, + { + "digest": "1aafbbaf3ead1dc1b8110488b3ff7342d4a8413296b23d4d83c448237034af08", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5600000, + "position": 3520000, + "state": "playing", + "controlled": 3500000, + "error": 20000, + "settling": false + }, + { + "digest": "bf270b0d2f67a70f6b3c430e4839ec4d9f2578ab9bac1faf07f6bf9791721e51", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5800000, + "position": 3745000, + "state": "playing", + "controlled": 3700000, + "error": 45000, + "settling": false + }, + { + "digest": "d95647517281ae3d63689f8b77229043c0756585b1979cdbfbe7aaffbe9adc39", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6100000, + "position": 3985000, + "state": "playing", + "controlled": 4000000, + "error": -15000, + "settling": false + }, + { + "digest": "6a5708039445f3b4a31510cadb124fb87ed00ed0391a00f81878b798d1e73a86", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6300000, + "position": 4190000, + "state": "playing", + "controlled": 4200000, + "error": -10000, + "settling": false + }, + { + "digest": "585e978a6fca87720b44cbc7b8ae4f29eca21b6294fbb516ee8db4a6f910190a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6600000, + "position": 4505000, + "state": "playing", + "controlled": 4500000, + "error": 5000, + "settling": false + }, + { + "digest": "062a06f19041d8c76220a2e2bb0d5f916d2ca1af24d01de9b612c4215400140f", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6800000, + "position": 4718000, + "state": "playing", + "controlled": 4700000, + "error": 18000, + "settling": false + }, + { + "digest": "491282c9c1af71d8da9c38cefae029174a3b76b6c6f6cde6deae20242c73a9ed", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7100000, + "position": 5000000, + "state": "playing", + "controlled": 5000000, + "error": 0, + "settling": false + }, + { + "digest": "b694ca2b5aaf0cebb03892bb4a63387a626cc8c18eb0a1db60d4c6d72169a3e4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7300000, + "position": 5165000, + "state": "playing", + "controlled": 5200000, + "error": -35000, + "settling": false + }, + { + "digest": "a95a9cdf04edd5b55535371fc5a6ad8088d68aa427ad7efae281c6845d49c3b8", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7600000, + "position": 5478000, + "state": "playing", + "controlled": 5500000, + "error": -22000, + "settling": false + }, + { + "digest": "d55e78b6b95636cfb2a5e9afd2cb908e01e83970ec0dd82ee26af613f12e789d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7800000, + "position": 5708000, + "state": "playing", + "controlled": 5700000, + "error": 8000, + "settling": false + }, + { + "digest": "d7eeea192a3451314e1cf8b8dfa81c2e56786a22f7651eff31b9635ef218ad84", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8100000, + "position": 6012000, + "state": "playing", + "controlled": 6000000, + "error": 12000, + "settling": false + }, + { + "digest": "5eb7c3e42a2df94f4e9022ec8a1a49a619dcae9e8ad2d118f46921e46ca0beeb", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8300000, + "position": 6230000, + "state": "playing", + "controlled": 6200000, + "error": 30000, + "settling": false + }, + { + "digest": "419f171d49f306453524aa64c9cbb4255188242f750f3fbb703c1bcd8962f8d0", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8600000, + "position": 6492000, + "state": "playing", + "controlled": 6500000, + "error": -8000, + "settling": false + }, + { + "digest": "b778b69c813e91e538d1223d72ae9746f24365952c2bc38bc70a84dec75d4159", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8800000, + "position": 6675000, + "state": "playing", + "controlled": 6700000, + "error": -25000, + "settling": false + }, + { + "digest": "e8068a810dfba54beb791e605313546e50a4d7764109a81b03db9488b2311663", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9100000, + "position": 7020000, + "state": "playing", + "controlled": 7000000, + "error": 20000, + "settling": false + }, + { + "digest": "db9fbc505e48d4da52c8a5316b7f6ddfcc73941611f2843f21b92d5fc4220dad", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9300000, + "position": 7245000, + "state": "playing", + "controlled": 7200000, + "error": 45000, + "settling": false + }, + { + "digest": "d53a91751fd24bbdb9099667ebbaa951f14663238e9ca447f0a5e3adfa63593a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9600000, + "position": 7485000, + "state": "playing", + "controlled": 7500000, + "error": -15000, + "settling": false + }, + { + "digest": "0dfef1e89553ddb93e59eed7bd358a1accba527ca577b20873c466acb16962ad", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9800000, + "position": 7690000, + "state": "playing", + "controlled": 7700000, + "error": -10000, + "settling": false + }, + { + "digest": "fbebc8ff7dfee69422f63372fd94cc6652d83291d93d3cfa2c29d0cbdf0f7b68", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10100000, + "position": 5000, + "state": "paused", + "controlled": 0, + "error": 5000, + "settling": true + }, + { + "digest": "85d02afa8fd191eb5d44d8a5fa7259106ffca50349cc02a5d47cbee993d81b37", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 10300000, + "position": 18000, + "state": "paused", + "controlled": 0, + "error": 18000, + "settling": true + }, + { + "digest": "f7dbeb409c7c4ad0120095de646cc85d23fe9b7037ff34d67cbe0237679b90e8", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10600000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "1154238630118c2dcae90ce758633e08c0e9fc73eaef79458aace6f955682112", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 10800000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "e8430ef89361ce101cfbab99ae17c0f57a67f2a403883501870a7c94862a54a7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11100000, + "position": 78000, + "state": "playing", + "controlled": 100000, + "error": -22000, + "settling": true + }, + { + "digest": "6e56ea1253e4776d06f4c5d022256598a20559898ac9c8b25c4c1e25868b2b4d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11300000, + "position": 308000, + "state": "playing", + "controlled": 300000, + "error": 8000, + "settling": true + }, + { + "digest": "1e8556a9522777d2e4cb6671a643af7bc310aafdab81e11c8795bb1baa547237", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11600000, + "position": 612000, + "state": "playing", + "controlled": 600000, + "error": 12000, + "settling": true + }, + { + "digest": "e4db476adc71f8cebdfe2d8035a1e19cb331b5451c5b73e6f0ce283af257872a", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11800000, + "position": 830000, + "state": "playing", + "controlled": 800000, + "error": 30000, + "settling": true + }, + { + "digest": "a23133171f991cc31f1b96e7730448139ffc8516d293c4efc73c465cfc50c3e9", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12100000, + "position": 1092000, + "state": "playing", + "controlled": 1100000, + "error": -8000, + "settling": true + }, + { + "digest": "43a8851d988ecb5db6a93bea8a5bb2ffdaf73ea19076d4b1e5ff99cad78ab5fe", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12300000, + "position": 1275000, + "state": "playing", + "controlled": 1300000, + "error": -25000, + "settling": true + }, + { + "digest": "c91b4c289bd54ae3326995e40b8d924432b234c4ae4ceaffa69efe9bf82701cf", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12600000, + "position": 1620000, + "state": "playing", + "controlled": 1600000, + "error": 20000, + "settling": false + }, + { + "digest": "8d3e40a12427a953725c1d07c605d0e4b7619ce78f6eb693d2186403e4c0d52c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12800000, + "position": 1845000, + "state": "playing", + "controlled": 1800000, + "error": 45000, + "settling": false + }, + { + "digest": "3cf975a296e8bfdda8a76055f275fad5bc22997b30efbeb5b515b608771ec139", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13100000, + "position": 2085000, + "state": "playing", + "controlled": 2100000, + "error": -15000, + "settling": false + }, + { + "digest": "2f1f52ae3a4a71484ec3e4ff384404824d01478fc87b3529ec5c2e9325b0271a", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13300000, + "position": 2290000, + "state": "playing", + "controlled": 2300000, + "error": -10000, + "settling": false + }, + { + "digest": "00280928e5d2f9b2d01d203f0440edfcd22a05972f3667c2d605f2f86e0bfe4d", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13600000, + "position": 2605000, + "state": "playing", + "controlled": 2600000, + "error": 5000, + "settling": false + }, + { + "digest": "6d47ddc7d196f04ba9fcd53bafce44fee4a01086a57c2508423c96af089958cb", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13800000, + "position": 2818000, + "state": "playing", + "controlled": 2800000, + "error": 18000, + "settling": false + }, + { + "digest": "3143c37f67e077d79c631574d1e0dec9d68235e34792958a96e8d9c880c14883", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14100000, + "position": 3100000, + "state": "playing", + "controlled": 3100000, + "error": 0, + "settling": false + }, + { + "digest": "e78f04dfe40c3e26274e309e23418deddd817e8aaa652d09e651a910055a058c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14300000, + "position": 3265000, + "state": "playing", + "controlled": 3300000, + "error": -35000, + "settling": false + }, + { + "digest": "53c4aa9fd8d7a0736e5dd495203b078a475c990d39fea33b13b6fbf4a31c667c", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14600000, + "position": 3578000, + "state": "playing", + "controlled": 3600000, + "error": -22000, + "settling": false + }, + { + "digest": "ecf6374dcdb63fa41be94eec12510cddf05b260151eff2524b6fd9ef08cd240c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14800000, + "position": 3808000, + "state": "playing", + "controlled": 3800000, + "error": 8000, + "settling": false + } + ], + "skews": [ + { + "digest": "cac17e9a347c9c10c8dafa193e7467d4376f8bb439a12458749e0820d6283999", + "from": 10000000, + "to": 15000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 29, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 10000, + "pq": 35000, + "max": 35000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 29, + "due": 5, + "samples": 5, + "counted": 2, + "p50": 0, + "pq": 15000, + "max": 15000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 2, + "p50": 5000, + "pq": 35000, + "max": 35000, + "verdict": "in_sync" + } + ] + } + ] + }, + { + "name": "drift", + "about": "four viewers: the fourth states 400 ms ahead and is out of sync; the late joiner states nothing about one slot and is unknown from 5 s; the guest leaves at 7 s and has only the slots it was present for; the window from 5 s is stated in two statements of two viewers each", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de600000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000e82e473b8fab8d17bac65ad4213ec4f31044a2b6c2d3cb6e7545c947332d083954e204f51f438c707dad4c574b9ba0d5d8f9445fe52111a25ea117007888400f" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a140420f00000000000010400076cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bdca9ac16f9034e41a46cbc4630d84eac6c5b8ca2d18ade7379580b0358149d1ef4a1133250fa89b412079d7287873b2a3513d70211c051b290167c0d7458c53033539cb3782485857463ef9a90ef0b1ed746bd9922ee0599451ec2f123cab109", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976030000000000000061b7ae71347daeef16b31f3ad82088467299f5f291d1c5dc864d71bae9dbdc0940420f000000000000104000689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de643beb907cdf770648163497d333d5770e4bab7e176c6c94f759a7df8642d2faea8a2c97b288ed358864d8d42d9dab503f9a529f4e3bba2fe1e711a2e0dd4759488d5d1aab82241279d6bd0c431394ea735ddeeefb944e76a7abed315fc556b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760400000000000000160a831298b407a89fba1d0343f4aa75bf726594cc39bd4be41d337fc49d27d4007355000000000000016e0157584b31010000000000000000404b4c0000000000400d03005f042c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f055000001689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de609000000000000000400040001001855060018550600185506000276cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0900000000000000040004000100e8800000e8800000e88000000106000101003075000030750000307500000100020100d8350600d8350600d83506000200030100a8610000a8610000a8610000010102010008ab060008ab060008ab06000201030100d8d60000d8d60000d8d60000010203010030d4050030d4050030d4050002a929293d4e1481fd4741dbbd8f69ea19f2bffc256a0de59d301967dfcb5338118356203f81d7ccadbd291cadecd482b7ed0f69090627798e38e55bd65dccd703", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976050000000000000089d97d961c6458425bfe8655a75d5fe75ef971842975583924ff9e6946d726e8c0cf6a0000000000001121002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01709168dd87c085dd6bc70a2d792ef82d663741e4dd22d7fb6b8d3cf3811ec1b350dabab5a6de76caa44fae080be9566fa4d860f6287e2f0b88cc3b70d94b3f06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197606000000000000002e4478785c1f41397cbc2e7981233ac4e7e8d67c4c8fca1e040966570bc86dc040bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c0000000000000002000200020010270000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741300000000000000050005000500e02e0000204e0000204e00000101000102008813000068420000684200000145aee55ab46fc493ef2ac7774fba80d05675681807691254e15fc2a60dc59bb0c353441ad0065d7886b3968a7cc04193a55a5f2ca1afbbe206e0022097096a0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976070000000000000009f55fe28385f3b41c3e68da7916101e8ea0abf86e02d4a1577f659b5b5201f940bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f02689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de61200000000000000050005000500801a0600a0680600a06806000276cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b100000000000000005000400040070170000204e0000204e0000030100010400f8060600a0680600a06806000322376468d5c6429c7de2c0a9e0e70631276bad9d30f4d806d85d59194ec173b5be9b255211a686a7f8c399062a4847a5877a8fa2f6d7a74ebb94b928bf809a08" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a006a18000000000000011600575843310101200b20000000000000000000000000001b9d64c08973c6ddcd9660e855850929c7acdb93f9529832223de0f8655ad9e03bc817b59b5810181f87ef9f24c98f06f21a942a113a6099f9a12fa0071dda06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740200000000000000a40fd7f458e2532b77064d061e309cb4afbd7d787cb1378a12b9249967f06cb440061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07b8612a73b00b85aa63c79251e8bb9c3d4b0bd526423e6ce6757a4e9016202e56312fc2d79d4f08a798e3f6a8af92c31fc651145e0901ead1612677541bd9b506", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7403000000000000005c3b114447c29d64461841d9a1bb8b3eed5b45077da50f6a8749ae323b3795ea60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000140420f0034d82e1a7f2dfd1950b257fe440d349a5a2f982a71130da47033d7d1307b71f596685957ab3c103b3e436430ff985cf5ec65ec81a339f65001e49ce7ee534b084a11dd43f594e363f6ae1189b1fd9642ec0980cb617e9903dcd478fae3ef0a06277c50f5727f11672befef322f71e8277efcb37bdd2ec112d6177714fe5eb10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740400000000000000e1df6c350fd3ea7660387d540af2b35c68293e73914930e0399dc0c639e687c980482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000088660700000000000140420f00be1ee4f0dde30fee2904cd5e95ca8c2a66d6292ebd0ca1d542a1c0ea2c625f290298540585e2dc549cb6c7745b995fe637ed827964f12d24fbd6a58079f0ef08c64eecb4d07e494abd227fc4f1f3d3c0b55068700af9b343f32649737193c26be1cfc62d30886fac7fd23b824939893e1703f03f5484ee0d2d68d1e5346b0602", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000c6de11f96604200a074dff31b1148d50fcd93042b7dee9ea5eb33d3e2e78ad9da0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000c8550f00000000000140420f00d2864fbec9346b8c5a1b8343a3836b2540143a067b0fde02edc3c47d8008c745db3772a4849b0cb4bacf5279b2e6aa5c236e438134f770fd5486dfa9114bcd07affe7387f7ddc01dfb71607f350cad8db9377dd5ec86d84e24b358dd225060c9c94b68d21988b4e8cb72e240f98a29934ba867de44d8fe6b425966806833a60d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000038fa823123e5804d96d4bbbadb08b3b73893321b408d39c385906a3689e1adccc08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000060e31600000000000140420f00024b92e628c4572cb20b6076e8dba6fb647f864094aed788d53a1387920c23edbcfdffef16303c81625a500fd02adab56c5a5a936ce2e2966bcaa5bf43b9180ff52821ad121270f75d72a7be5c7fb795835eeaa4543bae32f0c938e99464ef6b436301be43c02e37fd66d0b1bebb6406ee5c3c76e10c62957f34325c81f17e04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7407000000000000005a0323c9e5cd1b8e2ba0c2848cce2c38d5fce8a2cc91fa5ed82101ba3517cf36e02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000902e1e00000000000140420f004b928be975f7bb4d01cd6952d1ad8c49eb9cfcb90f84154a4b3a1057e7cd03f323e46f6962aff186a2190ecbc9c96520228c9bfc153f51eb3044e4b4e160ad0972787323abb59831c40d7fba6ec5bc474c3e0b6f8dbe58f2214a5d79053b93637c8698d72648a1b93a3e0fd37feb39a083dd88ac6b62ca6e5c20e15a90142c05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740800000000000000fa72e3977ac7d778278081a7f4b8d704491fdede63e9f614dd264f3656866eb100cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000080542600000000000140420f00386dd1c004c293f7af472b8c2983d47c93faeb3818824e11d0537108629c604c4c7b86c0441670e2f760c13a3eba95ecb23f5ebd52ec14344f184148ecba6808fc336be3b6644ca455977fa3f7610bf0574894136e2e4408cf98f517eb623b48fe107f82a7acf961bf6ee1ae1d4e319a64ca5eed4b6c12cc4251e40b6df46e0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7409000000000000000242b1b91b3af6c54761e455470e5df84627d53895122738c6e2434351fa5d1d206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000080a72d00000000000140420f00ff753d07dd09cd315a7664ced00cbd6fd20511d06caa8c74237abc71f049a7f4aca50ff94766e87ac3c7eac5ebc9fba065d213b5d8e14375a9575bcc8690450b4338a64a02c671bc7cba771d5d04ecd960588ec729103da1d94cdf97721e6acb3f97076d642fba42879ccb61d3dd20bf0fd5e1226b79d24800bd97dc1761ee00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000002da744e60971803977d83712b753aa05c121871ecc7c4e19ac75e6583cf62b60400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007355000000000000b63500000000000140420f008bb08420b7e61597585192415805c26ebe9487ca7b293047308f28391bafea83ed2dd8efcb3ae69303ed2f5596b037717fd5f29c5f77e19c902c66a6d4abcc0c5c56a841f4177886ea0ecfb716ceb3fdd508db1a51aafbda0d4361fa675b44c20e9e072c386df9d3759accd3b37f6fd75a6e2f584104033ce14c34aff2b5ac00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b00000000000000c568180cc40b02dd3f1b45f13273ec83f763807c29bfc1196c2236a80984b75e60b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920145d000000000068ce3c00000000000140420f009e0e3e1b35d4dcfeafa70877b85fbc6bbeb4483a6dba71228d7797351674c3c672ce22862e0e2068460dadcb1eed1068e9b4620459f9d6328e2b93462556290c2194acef6974d9b5fc465f000fc3a2f7df53ca082ac4451fb22f4470d707bea1e892dc639f90fa6a0b789ce6516e7030113b4bf40a533e3fd580b7faeb46cc03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000a1472d5facb1bef5b01abf0fc00726cf1a26f56450768139eafe65af9542996b80516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940b5640000000000a8bd4400000000000140420f0010de6e8a2eef6010c58efbe2d3efe032d22e96ca6f050e3322acc8ef49450b96ba815828f44ab2945562913389c615887c5a9a7713b527f1417320d594652e03bd8022d36df74ab4357a419b6f6b87a1ab91402afd5f4cacd6c66054767b0cd05fdb6343a11e43aefc88cec71ff4fe2a87ce0060e68e17d7913e79c221865707", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d000000000000002ec02deff374f9fddcd5d7509c9ea123312f02c1e2d95bc8e56f0e9a17d5d2b7a0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960566c0000000000404b4c00000000000140420f004c4706b776be63f60d7c68cff17c69c9d16c1b621f19ff2134ef3fa1f951172f2d7b229ccdaa6fe906c83ef4bfd1f6ba7efeeaa851fd11368b1602b1bf2f7c04e380c7dee94d3599226f451583dafcde4dbd90225f9bd9b4fd59f04da44e969f599b1128b17bc5fe2fe4696ebfa274a5fed5611857f4c330b592ace0ab2ea50f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e000000000000003852af5e7060498dcc8adaf6ef64b4e25a4d54b0af175dba1b8e8ca09daa69d7c0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980f773000000000070965300000000000140420f00d1ce281beda49daf416e0050865ba068483f572802c484c9cc41dc8a0668736a201689666d957d430f34a652c5dd645451bde8954a498a1ab94fc22e486916016471249b9dd78bb2420e86fd4958f7c935f1e939aa6c30fcf7cc450644de928274e6a1c543aed0b1d222836f55f627957bad00f0091813fd425ab8b5becd9e09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f00000000000000056e45369534db6de3d9437d828bd056f8aec4c50442c7ec879be126677cf278e0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0987b000000000060bc5b00000000000140420f003f858674140c99179f5d68bcbba2c1134c7c6200f6fbcf13fec5b63e776fc9a628547e14015282e1ded844409cb97bd060978cdf39799a339d56cfe81e774703dbd0c13094901368fed1c557bac7569af02305b5f59a25a466a8995ef8377c9578484941a0d3e9422783a3cd1704d6aba71d4376d3cc33aea71121276b6aed0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000860c11c25e6612b6fa95655cadb56353625077aa04404e1a2f806e9297808a7300d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c039830000000000600f6300000000000140420f0021973f7646ef004145bc344b299101651873520a798c2404f5357ec6f28bc7e8440faa3bd2e99ceb253781d77cd10320f5a4d48634b31313cd203883515a580d149b5ea7af78a3a14617a1f147f81a9097c30da05ccb878809524896e0f4c9b2d8b50d0296ec24d2db50887caa64a5025028b6fd6bcd0cfcd257962163c4060d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7411000000000000000b8b3670531f5197b6a9d283091611128c9685aa096c34f95c32cf0f972d331120778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0da8a0000000000e01d6b00000000000140420f0052c73a55f3fa03a97b28cdbe95321350e8791719a816ecadc4afe16f6b0d11178b859d618343d209d351bed6bba42b684d2e942979a06d07767d9f18f0cda90813ec63eaa4275c9c2fbf319aaaba871d4ea26abc162186152c1262442a2a3579f9904b1a57e326f3323d59768478ab1bfb5a9a4dea86e0cef5555d525d213109", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741200000000000000231e137c5c921faffbf800c8490e535ffb5c0c1509a8f4c1d6ab7839557dd70c40189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007c92000000000048367200000000000140420f00f1df799280e7a0544b3c2fbf7cfb68a3d995ecabfe80e26223128bfd9cc3fe3018031dbcf9b3bb7335423239be51a48823746786ecd8540c4c46446bf6606f0e9eafca53d9e97b46914a0d79bb3b159f8abb10f1b8ea9812f4cda823f488f6638faed74fda98da1936f0a8e334860646787bc3b11143af5e24cdd1fe2c678201" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000c0eb1200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429804f12000000000000000000000000000240420f00faa7574a0bd2954652d6e575f40d95a2bbf260b1a057da1af58e2ddecfb9351934d54352b7b8d42622baa050a8a70d5e209927f7f24b554dd431acc6d1ede00e509e5ceeca16a91ddda967341d7bb488838c3c32963718414f7bac3a88705d4851713387ef946047cc19ad9e0ab435d663095780156f68c581fc298e7fbc4509", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b010000000000000081b23345ca58e5c0d905feb9e0dde8b4602fdb2e59056ad36ed40b06fc0c8786e08c1a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0f0190000000000983a0000000000000240420f003b3670eaa49ce6ed3760b05498742182c2e20682a541caddd9f26d287b8edb61f8001e7ea2c3189d2686b22383d43ae8ff061a3f60ad447b4600fc1e8939df0f9a913febd2a672e26214f34ee73d20edd7da1cf4161b20ad2b4e4b9e2412b5a314d67f94317254e4f5e108ef38fdad26e91e616c044059725bc5e6af9d405500", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0200000000000000a913a57b7322fbb9d3d0f50580dd4f2954ea537e7f06a2b9fb8ae01ad22a0d24002e2200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c09121000000000018730100000000000140420f006b693dd97d6fcc2aad63dee3d80a549128e3e4851e2897c27494e0933a4f7b9211c8574cbde6e9633f131a0c956184742230691af45c35d17ea7306ec2e10005399a3e45124bc343b6db09ddb520c86fd2767d981971e640e56c40474ae6499234ca0169dca6260edc411dda806f4428998d8028ac934944b989150a0a7f080d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b030000000000000081c1059f6be7eb960201158ba3fc391f8b4006fb3e3ee94c656e3707ff51d85620cf2900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e03229000000000020950900000000000140420f00eb02b930bb7701cf099847eda1daaa5c80c6f9ff862d0f2623dbc47e46e34bccdbef2b91aabbb1e6ebaaaf6777922d42287df44e4f49b41bfd215918ece5730120fa937b327a69e7794789a265426836ab92fe8d82c588a81f9e4b2cca485494a060bf98a158920de758701751b6cb69b620e3f97f2bb4ce65eda6a0c397ee07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0400000000000000541dc68470c5303ed40cbcbf8abb1432002cb481d7ebfe5bed7ef6efefc0305240703100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900d4300000000000009a1000000000000140420f001169da1660c25f7aeecdc6a78866f448567216b69e6a47bf31906503f13a2b41e0e2e77aed367e54bc786426dc1f929970b8509e8de1a59c65bda03a263e87021147f09e5295000ea75aa8b579711c747f4a427a2c4666b22644d1c2eeeadf5dad9344d7703389abe892cfd629b2437e30cd76c0d30e8a7501fb31ecc1ed4708", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b05000000000000000c9004a7820a1e8e80917df81e203aeb170ce16a2df4723739c7b3d39ebaf00860113900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429207538000000000070811800000000000140420f002d6eac7d55233745648bdade676f063e45ebd6cf071211e1e3198e37aa8529aace2a81e3852515b586b7120a15a42728537ef4102551a9ada6f317900270bc081a10b956ee3363ccfce86742e7b50d5b0f01872b8b03bbc98a2359770b4d704128218248a9cf9a9a2c98e2513337a63fdb50668f979d6093da310ef542cb1a01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0600000000000000ba170f4cdbd5d29c711ea6cb0adf76e39a597688d282f2a080bc86f25b2b85a980b24000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294016400000000000088c2000000000000140420f00a1e7519bc738de055f9b28af6ebdeebcbccff024bcf0165900a12aca44b39d1f43ab69df6e4cb8658e14ece983951a0c8ef6b9d9b56944c903b84c0f8d84ba091628f52511850e86098d2e61ecfde7acb88cd2e6271dc203f02bb4d02d26665be9ae4152ab98e8d6039ba7975c77c914aefc315e34d3009a44e7db77575cf10e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b070000000000000089428a174186b946dbbfb07a5d48661ad689d53ff2c003f463210d81b479ba0aa0534800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960b7470000000000205e2700000000000140420f00117c8f2dc7bdf486b494623bf32232112ad0149b15b627f2c334a83c3fb909250e41141bae904a15ad9f230d00f83aefa85809dbffd468e0f9c0421c6176c40535f178679623acbf18d6e71ebe7db81ba43d211ac9fb871cbd91ccb1a9c829e6e1006b4cb7180d790881261cbf96e55564dee5c44738207fec2cb21905b3490f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b08000000000000008b229ecf7a03cb7c3d2f0a99bc4113f0c3be2cbd6e9fba4218821c11794c4432c0f44f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980584f0000000000f8872f00000000000140420f007e600b986ec8c840da211e5ae6fb96c50b69600b9c17ba1db4d6455f82aee6bd8bbbd3a7fcbba7c30f45173923d034365e9b55c1c0feced3afe6ee5138a6820930151d1082e976dbaef387e9acb41791fc821ca99b07b5cadd6769e5d9d40ef0dcb0d95c6b67964cf9d4e5259423d8572bac72317b6c10b842478734b8e3ee03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b090000000000000001bbe1d55f8274bafc4748ae44b6509fc144c246d18af71837ba1d2b9ceb3db9e0955700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0f9560000000000f8da3600000000000140420f0085e1e84f19d8f10a1f3946fedf646ca1dc1e350554a1a55528462413143f8448336b78bc5dd3c111890d2f68f63c256fdc317149df9c60c94888594643960707cb3355ded132f8dda712143c19002649bda5209ec743f2fd56cd8debae1abb5dc9a1e9ae8cd827986e07be67b1991888155b9059d7d327fb0e152cf45a06a30c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0a000000000000001b3f07d4c1c207df887ca251a04c694bca6460c1baa761cd3f7a6e3a2bacdc1840796e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900dd6d000000000050e94d00000000000140420f000a7d8298509f1342d3dd488d105d3f4c1ae86335e6fea0bb7a512ad1fb0f01b770d99bbd6fd798861a5118ec4be08f25972864f87e59b770a2f8114657872f0823eafa5cb79ea66e4b04d931c9602a59163c21bdf929ea3ba5490a41ddadd2a25264b35106c3b2afac227868a98e2079a40abc0b536372ba3f0e8d7bef485007", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0b000000000000004b6022595325209d37f12b6d23307fab0e5e0996e28e903471c03e266d4aefd1601a7600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429207e750000000000e8f35500000000000140420f00af9b58dcd5fcdb6a3a693518da6eabbe988a2147d6d8e37758f02cda17da896792c05e94d01b3e6a485079b942da0f254d4a6948bf29c1ce1ba419ec22e2e10a547469bbcee096655329d9a9f55a53a9004cb91305348d0257a201d2608b1b4c4915fba1449b880f2a077f847d77778503bb5d9b5abd99b703538064a3575008", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0c0000000000000066e0b73c30138abc9ccba8c8a1d4ff94f6d9aad986256bd8bc805b058ae4a11080bb7d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429401f7d000000000000c65c00000000000140420f002c4ed2ac541aceaabe3d6ae026ce26d0a268262b8c087021ecb5e0f216cc62a394dae8ef5595983ed003a619cebbefda7b613ceb67ec17385ba9161e8ac25301a3eeb15a256b3fd06896b1b709230be48e6d1290945411710ef6da10c80d843fbe23d9c8dd301d628bc4ee0235ebf3c0ced22be71121432d9deca7f9569acc05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0d00000000000000145c829c4543297dc083dae60f206cfff9e4d206075e6b94b9699481ebbc28e4a05c8500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960c0840000000000d8ef6400000000000140420f00cdd7ac29b7999c505314a29520f25628c89abfd7bfed1a254c41b33856ae482393440b3fcb9c88e2267aabe7338476d0b0fb48621b907822ddd6f2cab4548307a4e7b5dd7fd14b170badb90bd86782353388cfd0ca57c5dd659534770db556fdb6a4da97115b920b75d982824e53fc7d696c6456f9e0464342eae8d0b973d30d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0e0000000000000034753f1b1ff5341f9d46c1e96fca1b3e2e394ab2c8d945c5960adf689ec297bfc0fd8c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980618c0000000000d8426c00000000000140420f00bed43ed2529da6ba74b2379a14c35531a9e69e176aecdd709c1af883eb50ddc0a2b81a9ef64811c9425b53bf4682626bb4c7803a064e5beaf5018b48147c5f08fb24c7847e3a6507334faca840f8c7669f62d48e5d5fb1dcd56595b12c411986afa2ede73bd95cf1e0a7b6f19a2fe7f1239955007aff73b23ed1e526bc60900e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0f0000000000000070a7abbc1025a4d2fd949e04cade814a22bfed2d1685503dc404803aecd615a8e09e9400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a002940000000000e0647400000000000140420f00870c757a0cae0a7207d1db8c4f92f063f8e1ef1b7fae6e564673c8d6e88450b693cbf157da0a1b18058e42101181965cf865ca661b9b1f9260c9faef7750a3054c2fa28e9e178335a33f2ee527190f5a846a191d4255ae5e1f3dae24a079c963bec70ed95c287bfbe66ab87801fe7b6d467ee5097fc9535fd08a5529c27b4a0e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429601823000000000008bd03000000000001f07e0e001e1ef72ca94de5629f5e8b71ca718078e6913da9a4bd867fa9881322ffe3cc8043c7c046df280f49037eeff2efb05d60c6ad14c16de0863e4c65c133977d65064ab6aae3abb6e89542f4611584ed19706b571b846a7414b08d8e8eb641d01244e41696f58ec753065f922491f613b8eb467c1db127c6041bed9bf83a84d67400", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000f9ae312386bb46e3da738118867f7163bdfed72c9e1f0a4ebac36f60c8bf19b1c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a000000000050870a00000000000140420f007bdb0efd29d43130a8d4d2ddbc36f908633361527734229a5ea8c7784699b98adf72492f00e0c00623ac1afaa97ca1f3c53ae18ddde0c528dc972c0b7a49400419a62277ab33222c6e8393f6d7573497c02bf579348fb1c3a81d312bd74cb7fc63af6d8bba8114a3eee48d2bf1dea9fa6ef91277348194030fc199fd36dd530a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0400000000000000761a72f513e6d9413da2e82efe450fb0d2f7ee4457bce9a3ea1570be20367c69e0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000d0951200000000000140420f0088331de9a3f74357140de43b9eef19d33e0270c2150236db0bfeccbd9e6178d291340dca145eb2324421080d9696bfe3c39e27af38373857ec1ff4fa0a4f460da3a7866fd8b97df289f59db26d1c4455375d213274c3b2f7215631872f9a565bf05eb60684854d0d70c524be73f015993b1960ffd973802fd22c05db68712203", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0500000000000000e33634e0b7f0ec0909e915e339b0545c7e4dd57df4f5dd4a0e068309979f83e900983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000e8671900000000000140420f00d29b4f682ffae0c2a28a51988ad20126b4b9e0237b0fb0ebcf1e0e7efb8c38380414aeedc211f30707aa1393b6de9645eb31968ffb7b85c49bfb8a4eccb7b104de31db0a4faba7b8e6f0440c24bf77ad7570e0c880a7c62b6dee5e563082c1717c7d9eb9d9ac4413a0e60e96b70574833f8cc60a1c475feea04264ea3a68a50e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000cf7812253c49feb12df91ec2488044e0b543764b979d843aeea9f46703f33f8d20394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c41000000000000b12100000000000140420f000badf7643ab132a38da35f49c5ae26c9e5ea648c5945735317b5a7b1c1f79cbfe4e10f85530c29aee63ca53916de8f1d09e7ac5f413f6a36119c684fbcf7ed0b8bf4cb68f24fb69fa8969832e809647d0796686ad8f3269409ded8e3471f4b078ab5408f9d6dab72ffc51acd1ace48d4c12ea62c5f90626b35588039e7023405", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0700000000000000845d059f46c1b2a8a23e7fd0f2eebb858361b88503139417d45faef7083a823440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e49000000000010a82900000000000140420f00be46b5fa748273a4aea2b52282c3b87f86f6d5cf1e4c35f06d5868d859b6e2247e05909a95f491f47938a27343258ad0fbb068fea3c5ed3304c4de685ad87b0f297320c8fa397606940a97c658db18d799e03f5a6e61ac14534bd572e6aa866988d933883ef54bbea7e658e91ed26ca4e47f6f63b569a3d4a7fad598ea037700", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000daae973af57aa652f85fb4fb1441c848c211d36e9b43cdae3866475fa61cd940607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000058723000000000000140420f006c0b0f1b35d589687b1d393b4b4ff74d8677f16e292578fcfdd0e2f2c7685d5d5672a84aec0bb54ec3b300b837559f9c64fd6ef1a90adf030d93b2076ba8c807fe4ce228b104a47c80014599797f06fd673d346f1ce48d63757dcdab1eef7c5047c3b0d955b78af77e21e77fb4e4633494d324ec44c0b32d1d2ea29436ac5608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000839e7e7809b7dc4cc919f1ffff594a13d2941aa07cc597fb186bd93b94f4e876801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294080580000000000e82439000000000001f07e0e008d3ac27d6decf65e155d760085d5048fc96c369342ae99e34897688904c0f8ffa9301409556545a25aebc1a6d1632bb0e45cd101d3f92818a90d9789e5479c027f3a0584275235c5827d8c32464f32cdca5b070a1d9ff4f9b8bc4c17645c12f8ba789f48773e111ad8fd955a8d171c581701faedc881f24bcd77ffd149b42b0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000c709aff28f77cd01485459d085cd99af3261bb762b50bfed9ee9cf63d8267e98a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602160000000000030ef3f00000000000140420f006cc94829bbe1690e64b062d444ad509014fab21cdba7e10e0b5981fd498ff03715fdcb3243e021cbe5718e39c49c2dfa3304ce126abb89facea9c170a99c970a5db550ed4d45c70c3487ab3f423b7fe898fd141d978d40cd807d625704f58779d203fb765eae35d198cd65bddab865a986263b8b8e4d69559e8962892791280f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b0000000000000095adb309d80ca78f422b74f6434542064bde2e6493fed078a822f6a981820489c05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980c2670000000000b0fd4700000000000140420f000fc65a22de3739b1538a6c8a3381c1e5590b97cf0ea98cfb063aa3be5bc2ba041630360939736eb7c53b9ae701c0c10d05275b47b98df46e97a265804d631706ca599d3fed11c581760e42cdb579fd99254cd933d732b96517f4c252cdb2330da6b374be6d1a88130114e2cbc20cf11362936879ada1e20d8c4232e0e7e1bb04" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60000000000000000000000000000000000000000000000000000000000000000000000000000000000f91500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c05c150000000000801a0600000000000240420f00ce6a52f8c5d2489ad5fb8370828984962693e57a2e1bf1e38d7f4a985b49c3028fd5b04550da3614785c714d1f6c815e329cd745789fccc6855e85a33d0b560bfee71cf94b95928b7e50050e316675775ebbca7a1aa7cb0da1068535bad8cf5d350f357120096c329dba6b8a0a70241091b12485b6ad16fc2012d6b738a93a0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60100000000000000eaa12316d80bff8bd7e06e483717a3bb9913bef08d1de0e955f1728fc388e388209a1d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0fd1c0000000000a0680600000000000240420f0044b90294d1ff14947c6a40edb2cb01660476fe38909cebf85679532b9b17acb5c21361c349419c72abf8f791d5bf345c64569339c840a8a3d37a7c3df6368e0d84e1255f8261b43a298464fba202f82feeabae8e2414285d8c8da41881821165337e262466029e4f3c492f6e1565914a363c4c6d2c3077bb28f53e587c22650a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de602000000000000000fce9a0727f446f3c3cd0a220750877c466d8f3ac11a387d42c01381aae9e91c403b2500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429009f24000000000050870a000000000001f07e0e00750aae537c7152ed9d23a0c3dd3608f2dd14d533d539f2a2107628867e9e960490a09e9ac9ed62ff0cdbb3dca0013c26a9825769596c3f603379582234d8db03350ba0ea40a92d985d09e370a6b298ae2e035305972cf5a69f6218c217510fa10b8ef9567ddcfef2fdb3ead58e3976a7f81db5c4be9ab5326d3e6da4b7b50d05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de603000000000000001b86490bd13377229ef0566f237e4066578b9f6d8656e6a6d302df5717d707af60dc2c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920402c0000000000907612000000000001f07e0e0039d01d443c86f808fa825aba75b7b0a64e5915d065b53ee32910fe748fffb18cceddcd7622f0a8e30bbd167e135a1a1183deb97ad27ba8d310f2e52140171e0080b141ba8f800b04a3ab3d2f15841ef5dcb0af0b2c7407bdbf1112651a93d5e81cfdca88fc45a8bf2ab1f67e416a439355ab4c88f9025b76d5fa80ad95ad4a04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60400000000000000eb7d4538d21bcbd98d9ee1c0fc496802a9ecb639074543a7b3c2e5acc3f1ae73807d3400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940e133000000000028041a000000000001f07e0e00452ab074e5f86ce96975ec9afe40ffc7c9ed1807ae7d0092381fce2805b15aa1bef368069be765720f9e9ce2ff9fd2549a4919f6bbb013ada2d11634c977e30cfb2a0bd6c5c81cce184a30aa8b277c908a3a26cff828eb62e2bf628652f8876f272b6fcfa1469dfa3b4fd21ecb0b598aad478479eabd4e2d094c8c0ad1f95905", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de605000000000000006dc975ad44892455950f1995117f98c400bb664695f8f4e5274b6e28c6b09c76a01e3c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960823b0000000000387e21000000000001f07e0e0091a7e95dba36842407ced88f94b51a58b7beb7b1db608c8d9e6a83fa8139426b3863eb2630cacdd5039f329918cf5fcbb74ff5b7ccd1f60e70d832f191b51e0f56e3b04c67df24dcef23142b4c2bd264fa3900d0fe1ed2c8ccd946f479a844d7cf80aa572120f5342a59ea95bb6f761786f8a68a08b1cc9ada96377c00771a07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60600000000000000de943c2777938037af0946a7f3737f75615f03b41099ae9b62fddaeeff028619c0bf4300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298023430000000000786d29000000000001f07e0e00f5e3ab9e6ac120f9b432e9ad537c511eac0f7dfb388d697843c0a9bf78577e8ca866db11ef40eb6079cdd4981cc0744f0e520e99f5157e312042e98b6f65000fcf17d01f88ba46c2d19d0fd2d257143c71f7e95f9d6c8efa3d710ba4ab7d5726b81610c49c650e7319bf4dc123560f2cfb0bf0e2ab6b668e735bb6da3b59870b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60700000000000000e8258db021511b6752385b27c7edf00a5bf76fc3d765aa6ec1c0a0cdd27f89a7e0604b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0c44a000000000000d430000000000001f07e0e00cdc163dfac210daa9b7263e1e607f8ca38f3ec5490e251c3dd40ae642c89df1e08629513e1b28809e30bea3d6be9f58d12eeb3129ac35a58bc3cc3ea21f10f03673863da4f283725fc5724766c42e75c4445898ee17e12915644216cc07ace2e1347402b845346587353f363e9f15172ef9c054b74378b981b906e0400962003", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de608000000000000008a3f6fff9e71823ac1cadbe4c2f47b1abecf88747f13ea0993ff0b0447c9615f00025300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c06552000000000040c338000000000001f07e0e007ea62a6c0f2ed9696a446502bbadafb2691cb2e6027298ac89d716d2a698384d6c066e2273c4c3e7f268ef637b8df7147942a639cd4766d5d0dd930f0fdb6b0237b182bb9fe7768c9c9defcfc98cb97955e60d46126d70f2613a3d7c4505e7a6ef69b22d65ec8e1f8f3523fac922cc81703af16b470afe37ec3eec09bdcf6e0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de609000000000000006800e214567b5f3a73846805f691946a07a41fbdc92789bbbaba184a8c6a87a420a35a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0065a000000000030ef3f000000000001f07e0e0062c7cc4fdf4f9ff3266ec255c4f4f5477f19f0155b782d50409efc7c8bf4a00c3128d5f5ea80bac2a00127844e39ce9e1ea131e7acccf3da225939c801b3a90da3b72d65d86fbe48bf3be71e4775a2ee42ebb97bdaf4219888cacf51804971839bfbd44b768e817f3fa29067dc4a849c8c8ec39651d5d3e027496ad4a9ae9808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60a000000000000004a2d1fd9d7184cb8398ad9e381a12d81af4144ca6895f929fbf6a5a95ccaaeeb40446200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a861000000000070de47000000000001f07e0e0029fab7733649bd4047c02d3fb8b6057e08e8ac39c21310a110f562342438fdd6da17e767cff6cc621c30b25cc1d320581b5f2019db113ac60062d9884e7f0309984b6aff312d0683f11b71097ac4c1baefb73c45aeaad472d66e8e878664586f064b13e1ce2ecd942b6a62c8578fdbed7c40e84e64c39665d6ad178fe551c60a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60b0000000000000016bcffbc9ac3dffa852b0068cad6ed080926182ab3b3293d9bcc4f395f33a2f260e56900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292049690000000000086c4f000000000001f07e0e007c13f524f91f79e01cd25044452ef1c4093bbd83ca016f975de6abd61bc86ce767085bac0b88f3ae5acda1e09c6f23015afb45d70c0b88bcece9739263f6bb02ee46045188c2b2699093931b2895a7eb22a524a67f8c19964fa6360584dd29b6c74b0c91c9c4cc22177b46cd2875f51ce38b173ae6dffc1e33015b3b10871e07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60c000000000000002d67bf1e3fc313d765230a4af01e4cbf26cca1c8dc87592c35124e75d1aba6f580867100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ea70000000000018e656000000000001f07e0e00b479d0b24072a856ed4b6acd82864b4b3f7d0819bb4fd19343c71570f313fbb20df233830edc200bed2c623aab46ffe6d08fef73ba019de21088aea4ba9bda06f9fafa14fa04fa53c222a509562f26c6899ba5ec99b99ccabae8edddf8bb22a758fa1b54ac886435ed89f4140c8d4bb6522868b637cc7ddbee8daab56585ce02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60d00000000000000d9fbcc83c784e781065082ecdd9840e384641d9c2565c3fd238fee5193858aaaa0277900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429608b78000000000058d55e000000000001f07e0e0095a40a724f7a886d3f0b3131019797e7aa30b98f25810be94773702b15af0818f5d7b696c334e22a73b62f0864a6dd7f5c911ee35f0a1eca32b16aaa6a822707925887cce5b7b94870d8146ea5cc1a63ffa648f9cb6708c777f51266ccf0b588347b37cc7c5e596cd572740962a3bafeb6d622b010b4aada8de399c6530e7601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60e000000000000007d72fffb37e7ab0023dcb69ec55d31a8559d3d339b429da1c3fd2308626333e7c0c88000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429802c800000000000e03b66000000000001f07e0e005d0706621dc96122862e0d4813d922db8699d923abeb1a44ef78444d019c8cf2142c303420ec298d58e6783ff194f93b6c61796ca09e26b92c962ec759865806ffecefc1d0d92e0190635b534cd71920e31a6a08973c7cbff20b9bd66880964b9366bc678caa6a4b2919886a0f2a3631b02489d04248e83c8f98bfad4232f409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de60f000000000000002191849c029a1ffa8e923716a66cbb9e46a6887ef864a213340d5a79bea1852fe0698800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0cd870000000000202b6e000000000001f07e0e00301cf3245da6dde9dd8cd0469f2afb5fd8616aebb0ef8433ca1b7478fa50615427143c6d75c6b369abc7612df09d82b75063ad95b88d2db7941bdaeabece27023338a1388672d7696281e067726e19275dcd2f1137ec040ac47030a66440550d75c6913c455f0a28af790a8476f8c1acbd2c032e2d5b6cd54c41c0d68a478109", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6100000000000000005fdc4fbcd4dc1cead8ba9a761b2593b6783282f5c518958af2b0caa827d2535000b9000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c06e8f0000000000105775000000000001f07e0e00eab65c2a67920cf6a9e6cdba7bb22d0e19e95d3293e651997d7e7a12044b1f2f8cb6d493fbc9b9a60c8e74edef0baa378a5bebabb001e17787cd8ebc4b01e90fb18e1ce4f3b24c8217177cf4b98c05643166d1e0ac5bcef78a81d182ba5c3a8552bf35183a7de27e20eab3e23fe2fc2752e88f490a54ddc9a24719d9065da301", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6110000000000000027431b93897eb33dda0cc3c84e7114cf5c77e182631b9170051e4e84fb604a4220ac9700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e00f97000000000050467d000000000001f07e0e00dd102739b52f31b96d6680b5bada2a524463c78d64a580f2e587d29a2418e688f8977e0ad55d34df0e3415428e677d49b0f7398197c898bc450d4d7ba01f7b0cfe53c505076f3eae56bd97500b78d2410775b3f7f1f02c62e9338e4872af523e9d89fbeff4e6223fbe9d8e8cd022e601376080c3519af89c9feb984a2293c80e" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + null + ], + "outcome": "accept", + "room": "9b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e", + "gaps": [], + "policy_digests": [ + "9a7242e1b726de4aeef26e784201c318d38333a2d8f3dade8001d860b4d62474" + ], + "starts": [ + { + "at": 0, + "policy": 0 + } + ], + "controls": [ + { + "digest": "a40fd7f458e2532b77064d061e309cb4afbd7d787cb1378a12b9249967f06cb4", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 1600000, + "action": "play", + "at": 2100000, + "arg": 0, + "applied": true + } + ], + "timeline": [ + { + "at": 0, + "playing": false, + "rate": 1000000, + "position": 0 + }, + { + "at": 2100000, + "playing": true, + "rate": 1000000, + "position": 0 + } + ], + "presentations": [ + { + "digest": "f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1100000, + "position": 12000, + "state": "paused", + "controlled": 0, + "error": 12000, + "settling": true + }, + { + "digest": "81b23345ca58e5c0d905feb9e0dde8b4602fdb2e59056ad36ed40b06fc0c8786", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 1200000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "7b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1300000, + "position": 30000, + "state": "paused", + "controlled": 0, + "error": 30000, + "settling": true + }, + { + "digest": "eaa12316d80bff8bd7e06e483717a3bb9913bef08d1de0e955f1728fc388e388", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 1400000, + "position": 400000, + "state": "paused", + "controlled": 0, + "error": 400000, + "settling": true + }, + { + "digest": "5c3b114447c29d64461841d9a1bb8b3eed5b45077da50f6a8749ae323b3795ea", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1600000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "a913a57b7322fbb9d3d0f50580dd4f2954ea537e7f06a2b9fb8ae01ad22a0d24", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 1700000, + "position": 15000, + "state": "paused", + "controlled": 0, + "error": 15000, + "settling": true + }, + { + "digest": "58b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1800000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "0fce9a0727f446f3c3cd0a220750877c466d8f3ac11a387d42c01381aae9e91c", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 1900000, + "position": 420000, + "state": "paused", + "controlled": 0, + "error": 420000, + "settling": true + }, + { + "digest": "e1df6c350fd3ea7660387d540af2b35c68293e73914930e0399dc0c639e687c9", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2100000, + "position": 20000, + "state": "playing", + "controlled": 0, + "error": 20000, + "settling": true + }, + { + "digest": "81c1059f6be7eb960201158ba3fc391f8b4006fb3e3ee94c656e3707ff51d856", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 2200000, + "position": 95000, + "state": "playing", + "controlled": 100000, + "error": -5000, + "settling": true + }, + { + "digest": "f9ae312386bb46e3da738118867f7163bdfed72c9e1f0a4ebac36f60c8bf19b1", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2300000, + "position": 245000, + "state": "playing", + "controlled": 200000, + "error": 45000, + "settling": true + }, + { + "digest": "1b86490bd13377229ef0566f237e4066578b9f6d8656e6a6d302df5717d707af", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 2400000, + "position": 690000, + "state": "playing", + "controlled": 300000, + "error": 390000, + "settling": true + }, + { + "digest": "c6de11f96604200a074dff31b1148d50fcd93042b7dee9ea5eb33d3e2e78ad9d", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2600000, + "position": 485000, + "state": "playing", + "controlled": 500000, + "error": -15000, + "settling": true + }, + { + "digest": "541dc68470c5303ed40cbcbf8abb1432002cb481d7ebfe5bed7ef6efefc03052", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 2700000, + "position": 628000, + "state": "playing", + "controlled": 600000, + "error": 28000, + "settling": true + }, + { + "digest": "761a72f513e6d9413da2e82efe450fb0d2f7ee4457bce9a3ea1570be20367c69", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2800000, + "position": 690000, + "state": "playing", + "controlled": 700000, + "error": -10000, + "settling": true + }, + { + "digest": "eb7d4538d21bcbd98d9ee1c0fc496802a9ecb639074543a7b3c2e5acc3f1ae73", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 2900000, + "position": 1210000, + "state": "playing", + "controlled": 800000, + "error": 410000, + "settling": true + }, + { + "digest": "38fa823123e5804d96d4bbbadb08b3b73893321b408d39c385906a3689e1adcc", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3100000, + "position": 1005000, + "state": "playing", + "controlled": 1000000, + "error": 5000, + "settling": true + }, + { + "digest": "0c9004a7820a1e8e80917df81e203aeb170ce16a2df4723739c7b3d39ebaf008", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 3200000, + "position": 1088000, + "state": "playing", + "controlled": 1100000, + "error": -12000, + "settling": true + }, + { + "digest": "e33634e0b7f0ec0909e915e339b0545c7e4dd57df4f5dd4a0e068309979f83e9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3300000, + "position": 1218000, + "state": "playing", + "controlled": 1200000, + "error": 18000, + "settling": true + }, + { + "digest": "6dc975ad44892455950f1995117f98c400bb664695f8f4e5274b6e28c6b09c76", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 3400000, + "position": 1705000, + "state": "playing", + "controlled": 1300000, + "error": 405000, + "settling": true + }, + { + "digest": "5a0323c9e5cd1b8e2ba0c2848cce2c38d5fce8a2cc91fa5ed82101ba3517cf36", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3600000, + "position": 1500000, + "state": "playing", + "controlled": 1500000, + "error": 0, + "settling": false + }, + { + "digest": "ba170f4cdbd5d29c711ea6cb0adf76e39a597688d282f2a080bc86f25b2b85a9", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 3700000, + "position": 1606000, + "state": "playing", + "controlled": 1600000, + "error": 6000, + "settling": false + }, + { + "digest": "cf7812253c49feb12df91ec2488044e0b543764b979d843aeea9f46703f33f8d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3800000, + "position": 1665000, + "state": "playing", + "controlled": 1700000, + "error": -35000, + "settling": false + }, + { + "digest": "de943c2777938037af0946a7f3737f75615f03b41099ae9b62fddaeeff028619", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 3900000, + "position": 2195000, + "state": "playing", + "controlled": 1800000, + "error": 395000, + "settling": false + }, + { + "digest": "fa72e3977ac7d778278081a7f4b8d704491fdede63e9f614dd264f3656866eb1", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4100000, + "position": 1978000, + "state": "playing", + "controlled": 2000000, + "error": -22000, + "settling": false + }, + { + "digest": "89428a174186b946dbbfb07a5d48661ad689d53ff2c003f463210d81b479ba0a", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 4200000, + "position": 2133000, + "state": "playing", + "controlled": 2100000, + "error": 33000, + "settling": false + }, + { + "digest": "845d059f46c1b2a8a23e7fd0f2eebb858361b88503139417d45faef7083a8234", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4300000, + "position": 2208000, + "state": "playing", + "controlled": 2200000, + "error": 8000, + "settling": false + }, + { + "digest": "e8258db021511b6752385b27c7edf00a5bf76fc3d765aa6ec1c0a0cdd27f89a7", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 4400000, + "position": 2715000, + "state": "playing", + "controlled": 2300000, + "error": 415000, + "settling": false + }, + { + "digest": "0242b1b91b3af6c54761e455470e5df84627d53895122738c6e2434351fa5d1d", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4600000, + "position": 2512000, + "state": "playing", + "controlled": 2500000, + "error": 12000, + "settling": false + }, + { + "digest": "8b229ecf7a03cb7c3d2f0a99bc4113f0c3be2cbd6e9fba4218821c11794c4432", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 4700000, + "position": 2580000, + "state": "playing", + "controlled": 2600000, + "error": -20000, + "settling": false + }, + { + "digest": "daae973af57aa652f85fb4fb1441c848c211d36e9b43cdae3866475fa61cd940", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4800000, + "position": 2730000, + "state": "playing", + "controlled": 2700000, + "error": 30000, + "settling": false + }, + { + "digest": "8a3f6fff9e71823ac1cadbe4c2f47b1abecf88747f13ea0993ff0b0447c9615f", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 4900000, + "position": 3200000, + "state": "playing", + "controlled": 2800000, + "error": 400000, + "settling": false + }, + { + "digest": "2da744e60971803977d83712b753aa05c121871ecc7c4e19ac75e6583cf62b60", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5100000, + "position": 2992000, + "state": "playing", + "controlled": 3000000, + "error": -8000, + "settling": false + }, + { + "digest": "01bbe1d55f8274bafc4748ae44b6509fc144c246d18af71837ba1d2b9ceb3db9", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 5200000, + "position": 3115000, + "state": "playing", + "controlled": 3100000, + "error": 15000, + "settling": false + }, + { + "digest": "839e7e7809b7dc4cc919f1ffff594a13d2941aa07cc597fb186bd93b94f4e876", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5300000, + "position": 3175000, + "state": "playing", + "controlled": 3200000, + "error": -25000, + "settling": false + }, + { + "digest": "6800e214567b5f3a73846805f691946a07a41fbdc92789bbbaba184a8c6a87a4", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 5400000, + "position": 3720000, + "state": "playing", + "controlled": 3300000, + "error": 420000, + "settling": false + }, + { + "digest": "c568180cc40b02dd3f1b45f13273ec83f763807c29bfc1196c2236a80984b75e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5600000, + "position": 3520000, + "state": "playing", + "controlled": 3500000, + "error": 20000, + "settling": false + }, + { + "digest": "1b3f07d4c1c207df887ca251a04c694bca6460c1baa761cd3f7a6e3a2bacdc18", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 5700000, + "position": 3595000, + "state": "playing", + "controlled": 3600000, + "error": -5000, + "settling": false + }, + { + "digest": "c709aff28f77cd01485459d085cd99af3261bb762b50bfed9ee9cf63d8267e98", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5800000, + "position": 3745000, + "state": "playing", + "controlled": 3700000, + "error": 45000, + "settling": false + }, + { + "digest": "4a2d1fd9d7184cb8398ad9e381a12d81af4144ca6895f929fbf6a5a95ccaaeeb", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 5900000, + "position": 4190000, + "state": "playing", + "controlled": 3800000, + "error": 390000, + "settling": false + }, + { + "digest": "a1472d5facb1bef5b01abf0fc00726cf1a26f56450768139eafe65af9542996b", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6100000, + "position": 3985000, + "state": "playing", + "controlled": 4000000, + "error": -15000, + "settling": false + }, + { + "digest": "95adb309d80ca78f422b74f6434542064bde2e6493fed078a822f6a981820489", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6300000, + "position": 4190000, + "state": "playing", + "controlled": 4200000, + "error": -10000, + "settling": false + }, + { + "digest": "16bcffbc9ac3dffa852b0068cad6ed080926182ab3b3293d9bcc4f395f33a2f2", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 6400000, + "position": 4710000, + "state": "playing", + "controlled": 4300000, + "error": 410000, + "settling": false + }, + { + "digest": "2ec02deff374f9fddcd5d7509c9ea123312f02c1e2d95bc8e56f0e9a17d5d2b7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6600000, + "position": 4505000, + "state": "playing", + "controlled": 4500000, + "error": 5000, + "settling": false + }, + { + "digest": "b65ae320e11cecca64fd5c67a52211fb7f5ad37a57eda36d21007b4bd743b292", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6800000, + "position": 4718000, + "state": "playing", + "controlled": 4700000, + "error": 18000, + "settling": false + }, + { + "digest": "2d67bf1e3fc313d765230a4af01e4cbf26cca1c8dc87592c35124e75d1aba6f5", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 6900000, + "position": 5205000, + "state": "playing", + "controlled": 4800000, + "error": 405000, + "settling": false + }, + { + "digest": "3852af5e7060498dcc8adaf6ef64b4e25a4d54b0af175dba1b8e8ca09daa69d7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7100000, + "position": 5000000, + "state": "playing", + "controlled": 5000000, + "error": 0, + "settling": false + }, + { + "digest": "4b6022595325209d37f12b6d23307fab0e5e0996e28e903471c03e266d4aefd1", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 7200000, + "position": 5106000, + "state": "playing", + "controlled": 5100000, + "error": 6000, + "settling": false + }, + { + "digest": "d9fbcc83c784e781065082ecdd9840e384641d9c2565c3fd238fee5193858aaa", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 7400000, + "position": 5695000, + "state": "playing", + "controlled": 5300000, + "error": 395000, + "settling": false + }, + { + "digest": "056e45369534db6de3d9437d828bd056f8aec4c50442c7ec879be126677cf278", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7600000, + "position": 5478000, + "state": "playing", + "controlled": 5500000, + "error": -22000, + "settling": false + }, + { + "digest": "66e0b73c30138abc9ccba8c8a1d4ff94f6d9aad986256bd8bc805b058ae4a110", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 7700000, + "position": 5633000, + "state": "playing", + "controlled": 5600000, + "error": 33000, + "settling": false + }, + { + "digest": "7d72fffb37e7ab0023dcb69ec55d31a8559d3d339b429da1c3fd2308626333e7", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 7900000, + "position": 6215000, + "state": "playing", + "controlled": 5800000, + "error": 415000, + "settling": false + }, + { + "digest": "860c11c25e6612b6fa95655cadb56353625077aa04404e1a2f806e9297808a73", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8100000, + "position": 6012000, + "state": "playing", + "controlled": 6000000, + "error": 12000, + "settling": false + }, + { + "digest": "145c829c4543297dc083dae60f206cfff9e4d206075e6b94b9699481ebbc28e4", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 8200000, + "position": 6080000, + "state": "playing", + "controlled": 6100000, + "error": -20000, + "settling": false + }, + { + "digest": "2191849c029a1ffa8e923716a66cbb9e46a6887ef864a213340d5a79bea1852f", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 8400000, + "position": 6700000, + "state": "playing", + "controlled": 6300000, + "error": 400000, + "settling": false + }, + { + "digest": "0b8b3670531f5197b6a9d283091611128c9685aa096c34f95c32cf0f972d3311", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8600000, + "position": 6492000, + "state": "playing", + "controlled": 6500000, + "error": -8000, + "settling": false + }, + { + "digest": "34753f1b1ff5341f9d46c1e96fca1b3e2e394ab2c8d945c5960adf689ec297bf", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 8700000, + "position": 6615000, + "state": "playing", + "controlled": 6600000, + "error": 15000, + "settling": false + }, + { + "digest": "05fdc4fbcd4dc1cead8ba9a761b2593b6783282f5c518958af2b0caa827d2535", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 8900000, + "position": 7220000, + "state": "playing", + "controlled": 6800000, + "error": 420000, + "settling": false + }, + { + "digest": "231e137c5c921faffbf800c8490e535ffb5c0c1509a8f4c1d6ab7839557dd70c", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9100000, + "position": 7020000, + "state": "playing", + "controlled": 7000000, + "error": 20000, + "settling": false + }, + { + "digest": "70a7abbc1025a4d2fd949e04cade814a22bfed2d1685503dc404803aecd615a8", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 9200000, + "position": 7095000, + "state": "playing", + "controlled": 7100000, + "error": -5000, + "settling": false + }, + { + "digest": "27431b93897eb33dda0cc3c84e7114cf5c77e182631b9170051e4e84fb604a42", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 9400000, + "position": 7690000, + "state": "playing", + "controlled": 7300000, + "error": 390000, + "settling": false + }, + { + "digest": "3dfba2b006a61be6b344d1fdb7592b59aece2eafd1e0271b93d4bdbc86b2bd5b", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9600000, + "position": 7485000, + "state": "playing", + "controlled": 7500000, + "error": -15000, + "settling": false + }, + { + "digest": "27fa38855e3cb806e5151fc322c616c1688ad6a678f23cf75121812ac1ff6ce9", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 9700000, + "position": 7628000, + "state": "playing", + "controlled": 7600000, + "error": 28000, + "settling": false + }, + { + "digest": "09cc87aff1bdf79bdfdb4cc6087de75615bafe93736b4f120b91a239983c2ccf", + "player": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "at": 9900000, + "position": 8210000, + "state": "playing", + "controlled": 7800000, + "error": 410000, + "settling": false + } + ], + "skews": [ + { + "digest": "89d97d961c6458425bfe8655a75d5fe75ef971842975583924ff9e6946d726e8", + "from": 0, + "to": 5000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 9, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 8000, + "pq": 8000, + "max": 8000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 10, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 22000, + "pq": 22000, + "max": 22000, + "verdict": "in_sync" + }, + { + "principal": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "held": 9, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 415000, + "pq": 415000, + "max": 415000, + "verdict": "out_of_sync" + }, + { + "principal": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "held": 9, + "due": 4, + "samples": 4, + "counted": 1, + "p50": 33000, + "pq": 33000, + "max": 33000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 1, + "p50": 30000, + "pq": 30000, + "max": 30000, + "verdict": "in_sync" + }, + { + "a": 0, + "b": 2, + "n": 1, + "p50": 407000, + "pq": 407000, + "max": 407000, + "verdict": "out_of_sync" + }, + { + "a": 0, + "b": 3, + "n": 1, + "p50": 25000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "a": 1, + "b": 2, + "n": 1, + "p50": 437000, + "pq": 437000, + "max": 437000, + "verdict": "out_of_sync" + }, + { + "a": 1, + "b": 3, + "n": 1, + "p50": 55000, + "pq": 55000, + "max": 55000, + "verdict": "in_sync" + }, + { + "a": 2, + "b": 3, + "n": 1, + "p50": 382000, + "pq": 382000, + "max": 382000, + "verdict": "out_of_sync" + } + ] + }, + { + "digest": "09f55fe28385f3b41c3e68da7916101e8ea0abf86e02d4a1577f659b5b5201f9", + "from": 5000000, + "to": 10000000, + "viewers": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "held": 12, + "due": 2, + "samples": 2, + "counted": 2, + "p50": 10000, + "pq": 25000, + "max": 25000, + "verdict": "in_sync" + }, + { + "principal": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "held": 19, + "due": 5, + "samples": 5, + "counted": 5, + "p50": 12000, + "pq": 20000, + "max": 20000, + "verdict": "in_sync" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 2, + "p50": 5000, + "pq": 17000, + "max": 17000, + "verdict": "in_sync" + } + ] + }, + { + "digest": "e59f1d5aeceed896ca652b2d617c2a91554125d2bf12bff1e9a9ce57c311ba5f", + "from": 5000000, + "to": 10000000, + "viewers": [ + { + "principal": "689f7526ee892539666889bdfdf7c2bc7ee2f644406648fe62d969e106189de6", + "held": 18, + "due": 5, + "samples": 5, + "counted": 5, + "p50": 400000, + "pq": 420000, + "max": 420000, + "verdict": "out_of_sync" + }, + { + "principal": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "held": 16, + "due": 5, + "samples": 4, + "counted": 4, + "p50": 6000, + "pq": 20000, + "max": 20000, + "verdict": "unknown" + } + ], + "pairs": [ + { + "a": 0, + "b": 1, + "n": 4, + "p50": 395000, + "pq": 420000, + "max": 420000, + "verdict": "unknown" + } + ] + } + ] + }, + { + "name": "gap", + "about": "the watch party with one of the guest's statements not delivered: a gap, and every skew statement unchecked", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000016f5cb148515f3930ddd8a2f9b46dbc8cdabd7add6add7bfdf65e6c35f4900325d0b429d998da19e403fa820698b88b01b930886ffb0f018c217efa27601ed503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197603000000000000009019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee9140bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000050005000100a8610000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000050005000100401f0000401f0000401f00000101000101006842000068420000684200000118935505f8cbd060c6b268625bae6c32609efc2add6e31160d31d75a6aa2ffd48d39ccdd13abc0cdd907c9be7b41d5e2bb4cb2daec5d1b70fe434b00fb8cc105", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976040000000000000087ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904c0d8a700000000000010400076cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bdca9ac16f9034e41a46cbc4630d84eac6c5b8ca2d18ade7379580b0358149d1e5312a9d99529751527b23ff0cb122eed0059a62e701f0d3fa3d9c061b87a7a1066f5c026cfa99ffa91ce6a4fd55073be16a23e324361ffad8c52364e9aef0905", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760500000000000000d8a2f159e989c1dace319777073ba230ef76ddc98bb779205cfc705674e961838009ee00000000000001000157584b31018096980000000000c0e1e40000000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1f0000000000000005000500020010270000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742000000000000000050005000200401f0000983a0000983a00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0900000000000000040004000100e02e0000e02e0000e02e00000103000102008813000068420000684200000100020100d0070000d0070000d00700000101020100b80b0000b80b0000b80b00000140f5d839346a221ce5491bbc9335b0295b472763d47808dc1b4ec38daba3d47a8e21ebe8b54740d3a08f1a8d967526cd1c4cbbe815aea74d1d1565cb78853204", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760600000000000000e2753608d741db550a20580b3eb913020496b223e2624b23dfde3b2cfd5781d9c0543a01000000000001000157584b3101c0e1e40000000000002d310100000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2a0000000000000005000500020050460000c8af0000c8af0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742d0000000000000005000500020088130000204e0000204e00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b130000000000000005000500020070170000606d0000606d0000010300010200c8320000a8610000a86100000100020200e02e000068420000684200000101020200e8030000401f0000401f000001ad83aafa8219386fb5947d38c39329b482157a5fa348bf10ed9c309308dcbe49bfa6b0862b3de960e033ec6d1b69377349ac0b7e4c0cba4b7a182f865906630b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760700000000000000f1ee0a55bffce0700b1c53ecf86406dcc65b75da0526a3dce55d917cc728645500a08601000000000001000157584b3101002d31010000000040787d0100000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a330000000000000005000500030030750000c8af0000c8af0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743600000000000000050005000300e02e0000204e0000204e00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1c00000000000000050005000300983a0000606d0000606d000001030001030050460000a8610000a86100000100020300983a000068420000684200000101020300b80b0000401f0000401f000001ff643fd7d0f28a983b0ab6428f004028e6f307227260e20702776f56fa116a66ea2e0b18e7caeaecfe2a6c868a1bcb37791bb44d7c1d7baf1c60846eee3a2a09" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000009f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290073550000000000e0142e00000000000140420f0065840a5af706dcbbcf74a13e54d94e49ce748fe81249e442235a91734a4f487cbbf5fca2d4d6cd5ee7d02876642aa1c3f0e172c67f5376fe3688f98b263a780ecc956f634aab4fc13dbdd131b6351efee63216ec8609331f2afd03d86c33444d7a9fd8f4ad494ae512b570aecdf4fe6df2256a17d9bf46c92cbcf8e3a71bee0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b00000000000000d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab60b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920145d0000000000a0cb3400000000000240420f00f4b6fcfcacd2be483d30bd8f08edec092f4e189e106bc2157780a9791128edf13b47fa619ff7282bfefc49adf6bb93ced1808a2bb9803ad43f3fdf643d9c350fec71bfafbfa91eb693e126f7a9508227179772d4c24e9e99e02b1a9978699011073776ecf239a35efb7037b24edcd6e2d60852c8d537b3d2fbffaea7b0ea9705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d780516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940b5640000000000c8f43300000000000240420f00b12f36c09beda6c8541a0d4f495d6bd002341b812144458a4c504e06208a9c7643a0aba2fad19c814e56b9c1746bfedd63a217f839ed9540980d6ad14e937609c2d01edb9b8af1dcd6325e3c5dae4fc79d96d0d2c2449c39ca941eb9ec0c66b22081acf13c2519239df4620e5e444df7e20e14177d1b13916968dc5e05cc1d0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d00000000000000e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96a0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960566c000000000040e13300000000000240420f00bf4dd56a942bbf8f0034ae912c653815719e37d32efb6d133f94a08daff4e7c70f129401b1fa9131ba0d17058e9ba2840d3d975a953dd23f40629e303f3f2d013e5e778d56ba8629e6e40c41a4494e2eea6ff7e51d4300bc2ec1739028de379fe7d4ce32aefdfd525761b6061e13c0aec75f63b1a6e5f0778e6dd11a96784208", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e00000000000000219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6c0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980f7730000000000508b3300000000000240420f0046f09bfd4477030c5df8e8a1e1b1c279f67f33643052af749943e8d9f51e2d5b47b86d2fe1d33a7350a0faeabee46830e41f968351e0d9c145bdcffa46e9c5085ce83272c7d95e4dda94414d7387786f74841e62ec9d993a13445028b6e02e6f8cbc0eb8c8d2a3bad09b10d002117aa2a50519f1caab3b2fa270fadeeb460602", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f0000000000000032293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ade0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0987b0000000000405236000000000001f07e0e00a0ae094f04dacd8dbc424830ecc3eb8c715c959b462df34dd8348f1704ff9b516f1e66c04c1e470c478c7c60ac48695d378cef50787a655d9c3e7129b19a2907d9d703ad0507ba60314166290095b54520e5bfca8de81d52a6059a3ccfe81bbd8b8c7acb1940ca799930181d20dd662dc02a974dacb20d8f2d8e14796cfed50a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d308800d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c039830000000000c0e93c00000000000140420f00142d3de1e316c4a3300ea65f7122bdaacf13b879a440837fdf3ba6e51eca02bfd9aaf21c606ac9149c92b0c318123b551fa1bc0f398bdd125cda960e5b73220d8070cc8f713ff8ae2f6f4bee3aabbd5a1b38b7d2e518814b92393eb76e73448b1f387b7a74052fc06416888b3f6f0e01a7d28ae537ab37dd29e32ac1a72ea60b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74110000000000000008ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc4054890000000000000116005758433101038096980000000000000e270700000000ae5701a262b0cf24ce4fb872db4551f3a956eadcd2e7d1b616606e35344e103cddbbd66e0b6c2aaa860f0d9cb4d17a2e0587c30a0a6eb1fc03886040efa79a05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7412000000000000005b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d20778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0da8a000000000040f84400000000000140420f00442df02d81d38deabd35d6c857e4dec007ff8f8ee09e384028244365cd25c861abdad0506bb9502fa7e03b79b43004fb5ead2509f37c734ac91ff2091f4184050c9c7ef822fec62e15e2e9c621c858dc893dac1fd4ac43757a92297b8a8b7133cd6fba3e3fdbb4a4ec2c598a45675cb1081a041b01e62b9b74c5045532972f06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7413000000000000007c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a6240189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007c920000000000a8104c00000000000140420f001376c093841a1cb4776ef8a0c98bb620e5a26462d159ac2fbd653095fff5855b0dd063d322521c81aca137e1255a4cb5f08ef2de9f563f79539ab011b871f90ba7898203b8b68520c59d11a92cf846d3532a8d8c73a92de7485bcf3faaadb5beb9d3b86aafa627494e2233c654e986c65c95279676e084d27a02bb18119ae200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741400000000000000f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e9960b99a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429201d9a0000000000007f29070000000001f07e0e0028bab8c023c8e42e71b09a2343743db6a0a3936bd247d43eabf20aaaf51facd27baeb552028ea3ff37e4f9dfe6e38d4427867dadd24fe3cb82a7b6f7771ee705fcc145a29b196ab70a0af94194fefa0236a91ee1e57e9392eaa93a104f290d80bcca30d4abd8f241d4d7c4c642f5945b08cf1c3b4f1abe9038082157b5e19601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621805aa200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940bea10000000000c0353007000000000140420f00072c0d7fe03cedd52ead106afab83453d065775f2544463d60666fa010a05f5a65e1be2dce7b1ef8dc9e80f808f1e6147bd433efe2fd46ecd4924d07bf27650b5861742c07262f099f3c3642723d594f64017cd4a2b71d374b35d6e24a0526f75835171ce197d9a5327c71a69fc81ae76083f850649eef71017450be0982f909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741600000000000000cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708a0fba900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429605fa90000000000f0803707000000000140420f00af51d8538ac954f058baeb49077d2f43242345618bedcaf2198f6fae4096d7272f12221deb7f1da5176e9ad40f4f2905b1bfa2550be5e4bd129df9017ef1750d587f4c4373636257d810446655b62876ca93258393b411853175679db0c6501198e41203443c61209352d6fc119e8f0d881a8d47b3eac5716ae491d3faf6fb0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741700000000000000ea85c0e2cbf4cb7930de026478b7d93e56173af9bb74ce951beb29ee5c52be18c09cb100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298000b10000000000e0a63f07000000000140420f00f135add94ce2496c8365eac7763c930a69e0a74ead0bd1f997d26aaf923aafff9cc7d722b2c72449ff7942e3fa8d50e8ff6ebbdd3981e6400a21a862b11ce70947213235b34e48abe866dd311516c4801ac750c42dab6e355a5067874619b1d40761764d0d3f572cc6203aef5be5a0acd6cef2331533f3c8a166ff02b26d2d09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74180000000000000076850dae85e1c5e4c0b6d20263022eb185e547b02b3165856849e479da35d050e03db900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0a1b80000000000e0f94607000000000140420f00b406b10b4816470edb8b1958f3a86e419b60fc93833e8c704d59355cc4a7de0d263593f97827839b547eb5e7dd8bdebf7326a8e9677969489bda301a5a25a50dbafbe9760a9fafe3b33e93b5d80ecd01aeb4047b6c38b68e8e105d9777f1ef1135d45562d07da4724194e25392faea13c9a5d3b2fcde0de2468dfb74890abf05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741900000000000000757b328d36764c3fc1c058008a4b190604571257efdf71a3a46f4e5428b9cc8600dfc000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c042c0000000000060084f07000000000140420f0096cf1f68ca2c91870b3a009d6eec6a6a17ff0d9c8cfaa4876f3296e98bc1af0e27a9364d66793d08fe3bb57ce34ce1eed7078a012d2bfaceab98244298facc03210a5af374193d57a4f4f9b3151fad3fa96b0eff66f66263361994574a3435d4ba3abd7e91e825848b7a6036570dcc1b95ec8a6d7d2f2b39b9c34b48b5788b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741a00000000000000cc21249ac1b1185e8b33bb331beb0291a351db3a54296ddc131c2425816ec0aa2080c800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0e3c70000000000c8205607000000000140420f0063fd3b45b173e8dec0257bf1050a174c34115b32a0da9a0a5073e17b01f30a9c73b392d39fa02c3b5e13b2c7de71905781bbe8ed67a8ca7096948054409e5f01068b60c03d2952b8353a6c263a6ef8443815ff1240dddaa9783ba782bee4afb7639ade52e526ecd275a3d99ccadb5462a8ea52c2f4236ea2ac421f5e2462d20b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741b000000000000003a673a5fdbcd34041871f33cf495de531205612ae94d8c7f53f0722f3bf4db59806ac9000000000000011600575843310104809fd50000000000d012130000000000c10d9ceca0b7d6f740af9f013334c62e7a3d390be28e06228c5f85ac31a76178986776cb721b39bf0dc0bf59f616d8331925a013d17cbbe6fe6ece991e87970a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741c00000000000000bdaa571261a6f48559d52a969007817077f8b50918c21e4f6814fbcd77d9813e4021d000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290085cf000000000008105e07000000000140420f002925de82e266a8d9a493b923e25d8248ab119c35abb68d71cb70b2e4490c440abf0ab0aa7bd0ede85a17a4b9ce3e4d3b779e03a1513dcbbdea0f826afc76f70100e173fead822e3eec7655378f33fe8ab188cf551e85ed3f97e7c7cefa1fda67461ecae7489c5bc667d5ed89ecf2aae87864ec8c2d0f783fd6dec38116940b0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741d0000000000000028305620bfb13a8a728df154cb17f981da3f61a39a04affa6d953fa74b4db00760c2d700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292026d70000000000a8e966070000000001804f120096d31fa2b7540662bce52546fb2df4e1970f69e288109aa14f266800d5dd7f4c431c082c46e3aec0e2bc24dcfbd3f260723976359ccacd28fced53ec8f3877051eac103082648df971f0320cc931c1e08354515ed82891a226a82602df5d22c4362cf59db768e72b6d74de8165b5f35d926b36a741c67d48e20e7892e6d77800", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741e0000000000000060cb3bb2b3b7e5e8215a213290474adfb102deefc15611fa358760eb95e128798063df00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940c7de0000000000c0326f070000000001d0121300523eea343a54389d056c48a264eb3df603222877952c2bd626b989172c3f12083b0ff659232d25aed8f97f89bff9ff1ea72ab008a93455a436533758adb0ae004b97ffaf32eeb820a1340dc8086dd333259d6fa191a93a84b29ee1ab6b0603d6ac0a4b89b16edd04cbf76ce3afb51d9c4cfdccb7eb02166fdf7db8ed2bf9ad0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741f000000000000002d1444f5cce4d548ea21e7ae663331722b61fcff66bcdac28145dc8ebc121c39a004e700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296068e60000000000f84079070000000001d0121300a68a0e579d0cb7102e2736cd12f1ae441754a345a683c8397389831b7d3825d678fdab25c4e1b33a4327afafc516d3b41d7e3fe7cd249972db45df9d0bdd04043c52165a7a6358da355d144670e01e62112ac39079cd23969518ab95e95e8454a85e0759a54da2a036ed835487c9e47fb516954eca5c2f4daba8b170733fb009", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7420000000000000006a0109dceb62a09135b8b1564244ed17267066f38f4bdf868d6174167bc5404fc0a5ee00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298009ee0000000000407c82070000000001d0121300c28ebe88838288c6ff5efc47bdd8439fae07aa67e38c22e9871b682d222f63aef34451ca6c420cfd506dc94152ba6ee9f5034dc25eb684466d76980a19d3070735d89167c65eb13413268d3d048b63e4c1d97b38b1e5d849fd2d8699ddd80864fb83e14b814300d38c6969891ef50eb3151d96e8c134bec7f170b57a7d319d06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742100000000000000a8f78c2ee80e800fb895fb7ed3473c73e18a90ba304c384155b5a01b117be80ce046f600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0aaf5000000000008738c070000000001d0121300b90a7c7e9f924d073f56f7e5ebed45b4ad105697181709804004a9b3112f57fdd3616f6f928bec971b39a79c586a917c6aa02a42ea6a7bf7c52d6a1c333dce02d308a9952600a3ed69e8b48696adff947995ac2a914cceddff468171b9cf219151db6c8a20effc0c49587f6d5dcb0c7d93c3cecaeec75645428eb960812db200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742200000000000000502fd5b185ac8590dacdde29b01370638c4ad036967fbb5a2c67fb1ddceeb51900e8fd00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c04bfd0000000000b87395070000000001d0121300232aa2bdc5df1e822165abe41615c4039e18406edacc16e8f822fab04ad8e426ab4ff90d27aefb052750fe7c067f830667e9fe5e0f23df14389ae6c7bd57050ec93ad214650dd3afeb0757148eec94223e8fb4a6e557116a4a77e3866e7181e99b292c4d00122c6dd3989260e14f4d755f0d3f5584f16bcb29b0364dda668909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742300000000000000659c4046314e37ed6fb6ee47af5c980904361725be4a7ea681db34a5891d859720890501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0ec040100000000404b9f070000000001d0121300221b96343263fb2bef639dee511d0e3624bbcc2f7d3151d2a3b965525aefe07031a23a938ef702338d040cee7e94090b2ebc9baf0b21c7d13248dbb33a4df108e7df5927aca23499f35a2d63409a82c7f6c2ce690c85d57ce5cb4e37c9c175302135dc624dfc034d43fc02d9a5a0483f58c7e106e357a571209c7f0c28983700", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7424000000000000009eeb6b8aee6eb366639c6bde5d686394b3c9ae741bde663cf6ee5a18fd0eea9e60070b01000000000001160057584331010480a812010000000040420f00000000006f7d314b6f7af37e5c40d591c75e364e525ca5dccec52f5bd9f326629288dda2aa39de62f122a492d518425406f55f527e345937a26373ab848178dae9c8e302", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74250000000000000046a604854dbebd6c9b4d4600041ecf29b391535b92232f5a916b12789dfdb2ca402a0d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429008e0c010000000020c1a8070000000001d0121300f38ce54959a4133e61d1e3357e5e97834daa1a86fb7c63105ee655a1e1084390304caa37788987b38e460af08cbfa35860ca207d168f9c64ee1725378b14cc03524fc9071fcec25882c0714ae5e21931f2b4eb8e2c0628de2613ac1241991cd569a94fc4d7aa03442aabba10dd44a4e5721056107fd77becaeee97418ecf8c09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742600000000000000d138dcc76df538cfc2d5fa7df3025266b83f57e3942e36e417daa917056dbe4a60cb1401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429202f14010000000040d3b2070000000001f07e0e003caa56703a2b8dc47197bff6bb5fda9f61f16f092e409c27aff728d893a79655f41f848da17d4c0f43c58fb63e6b1ebb6675f6914ee156bf2184700afef0a608270cad2a300f46a44ff7826dd8d1de46a6c59457827c0acf74d723357562b7268e1594ff327ab19d7253affa7be59eeff693cc9ce167df80b4e4d8d3f7921f04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7427000000000000005030c59dba08db7a9d638e05f2a3b2011fa12dc806705031e7741852341b48ef806c1c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940d01b0100000000e0b8b907000000000140420f00f5347faa2ece87ca2c0437b9d63ec26f413706b364d7440a8ca21fda81442ad78c5ff527f208fe0a7600546240d119379c6d1447a850afd904fae249cc360407eaa02321c69af02392b076cb96a3931ecae8bf13cc104ffc44dd685432822940b10d93a69e2a88ded13f9ea3f9baaaab15629891cd59905f976d0b65aabb8a00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7428000000000000007a5342de44fad548cffc0eb5209db440fba8bf6d4f35888ec9bc47d2b086e0c4a00d2401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296071230100000000e00bc107000000000140420f00295427825db05f33434c6fd09cc009a0b82e3f517ce3a10b824755860bc32da2118b27dbf78e3e97d25f19659f64c7ff8e83da80bc60040669586b0c6033420d76f0bfc957109c63887a3d2801df00a47e03059634a2d01b1b435bf60a6044916f3c3c807ce52079da972afb57f9acb98770a689f383d892d3af1ce73c455d08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742900000000000000185bd06d21988ed8a21a8e34bd9109fadddb3ef904d92b7e7d317546275b67ba400528010000000000011600575843310101002d31010000000000000000000000008e5c634e984cdd12c004c33b9ba6c542061c653d4c8c9e1d13330ef54468fc78a1f68ecc80efe1a512ad12afb1ef67750c916574ab4c9fcc2926121896b5750a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742a000000000000007048890f8171bdf1c60a4a7e04847ae4eeeffd35762ba5d63d0c9c904886dd0e400528010000000000011600575843310103002d31010000000000c2eb0b00000000e579bd0ee8c9a3e7bb9139991f39bb50a5498501492d822283979e1130e6e30f32af38b1ff7071b2be4e6dea2cb661ca360b8d0f931aeef6a63201c8bdae910b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742b000000000000002be013aa7130272b7e7a96c3770576b267ce60cdb0ce53de4245bb41c86a17c3c0ae2b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980122b0100000000601ac907000000000140420f0016da833d64b44ff78f1bf52c0da21b1538296aade9c1b9bcfd57d0b70703234f38af605560ce69abb4b851c92b621893817ab71cbd836722a76ca4636d67e600cc85a3efa35ab862ed1320ca2f23314bc8fcdf472e14ddec8107efae4ac2078901ba932629d77fc8297b0c7aab8b8ec4f272ffef2f1387a87cd699ad90e04c0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742c0000000000000007221edfb69b5e4f94dde2a42d98c64b79bb341798dd52915bc894c3bfe57674e04f3301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0b33201000000000033ee0b0000000001f07e0e0077393bce980c1a2216f0ce88377bc317f5aa6232e661879f77dc8db9a68af5dd94c7c88376772b69a8e6dcf5e29d2a302fd7c4d9d6fb7e3791a252a0fc5baf0ed57ea10cb39a65ac35fa38f9551a15bee571c4c825ad3efaa7aa8370670426967b30b770e3db8992a1ae1b74bf593fa22911c9be4a1d42b63f9a4cf032252d02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742d00000000000000828cf2bea059d8f04e81ed584f63bd4720c5915e74a2f2e66b03d473252920cf00f13a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0543a010000000048fdf40b000000000140420f0027731d9c1718667dcf29b30d15499b719659ca31532be9b9d6dbf6671989d8f4d6b3b28c7490c4fad7d55381b6cea5cd2a9d68bc86e02ddefb2555ae0e19ec00af2f566a94f9f1b3e4347566f8b0c619640e3ed903cddd86de6bdd585733b7a271fefa74d106f10dace3be32c21c0de2da1b50d0d332ae5b589f0962277b220a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742e000000000000006a66809c152ae8099308a66651ee44ecf4011d111a34590dc437593d1d1011fc20924201000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0f5410100000000e08afc0b000000000140420f00804334c83d787331f3f961c78919471612f741ce2ed47f922ed94558c332c9cb1091adcf557dced993151d564605a6df96e71a67ea41731e84597126a333d306f595a7d70badce5226085a4b814dd4bc7928172f2c765210b247a6ccccfc5e48303942a56bf66f291fbe6c239a5798f2569742dbf7d4fa39ad3e482f10111d0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742f00000000000000b87b47b3ea8ab646335567c10aa14652e4ecbc5c4e417c2d5fb23cb994b69d0240334a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429009749010000000010d6030c000000000140420f00665b2247c266ec3e6792934515354141ae7e9b83eb21b96d461d05ddf5eacf14de62626ea7bae0899c57b622be7f9023d045f60756812311e6a0b650975ad2097b79f5680e6a9dd1d0d00ad3b3915d827d74e93a3cf05894fdea6ed36f5821fe133f6921729f68b2e43984e8a1abc6fa7d3edae5dec0a5b271cb5e8317db6c00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7430000000000000007de553f590cf69ea3998ccfeb46207ec1b5742489eb8f4e77072eee3976241a060d45101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429203851010000000000fc0b0c000000000140420f00450afa0d037b864cbaf7c783ecbd822ba4a66f41e217948fe8906c36e002af796d7355d92f7d925f163efbffd7e069e66422fcad479381ce5ca2bf3a0d85fd06f3b91e2cabe75e84af800beb3784bc29f0b721971b3b0c188b541587bd09de6d410d9dd98a249625b88dad43a62fe5a8702422c292cc0ce904c4f2cbade56909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743100000000000000fd865b3e3fc06e88a1244c755b877f1298b0d10876101f36b5bc1e9c0f775b0080755901000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940d9580100000000004f130c000000000140420f00551324312fb29a701d36e2028df42b729a64740d520275b799027605027f8dd2bdbd153970fcd25c2fbd6b77e4783dc6bc29bf6dfe65f43816e5edf8da882f0eede11fe949d0c943412107083d362d63288ceb1b1b138a6d55207e540cfcf159abec753329b7e9a25ee46d9d4d8a69b53a6fb779bb028218e248a155feeebc07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74320000000000000095412409ae1085d8c2c439fbedbc85d1ce6487e1a057644845ea0544168eefc7a0166101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429607a600100000000805d1b0c000000000140420f00317588c46d179e33f350bd1b61656064856f11ae00e29eb3b002aca2e8dd17d3a3f35e08d305cbda152a3b09ba9934b5e06daa1597ad7cfac67554a9cf5cb90ca027006d887245dca39ac6c1314b861208308c51ddccc409b38f34bf1667f6920788b060bc485d3d40d57ed07c2ca28120bfed5be3196f6295f9feea12304407", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7433000000000000002281da4bc841f292b3261b46c44d7c8c1dd697f63de239c8e2c2d6fafd9ab0f3c0b76801000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429801b680100000000e875220c000000000140420f003ffb959fad8e63bc7938cbc3834ecb57e6e7d563e47f9bc3f6903aa274be3b6fcfddb24d4e9bd8872c7a58f2732965b894174a1a1fb60ec152b9bf35c05d3b0c720a48f852d73c203f3e8fa32364ffcd634083a5d823001cad133aab1a49dae2245d7741780ed18cce9c84a95dafb083515b716e717007fcbfd3aa8a3b54cd06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7434000000000000008ebdd846b60740177f921f9106a689523128f11cc88e81ad3e2f152f74cbb3f4e0587001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0bc6f010000000028652a0c000000000140420f003aa46971a8ee998c386857ac9105ffa191b38fa93d4ceab5ec393b2e9862710a9d00b5b223675fad41a4004bcd79d2e48bd4c6d5f69d1c8b97768ae93955b702cbbdd7c84af5cce079912901458acf370356eeb69638d77af3ad49ac87f7426cdc6de6cb75b7a9c590de26e57658b4da944456453f077801a464cdc65f38ab03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd743500000000000000bb133c2e1e6bd4cd1d7c3d739755c9c17d708bff659bf7bef4b611ea7139839800fa7701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c05d770100000000c0f2310c000000000140420f00ef56b6365db9eba27c758a779fdff8b1cc460740a1ba0b7a4409f128b1654d4ece2c7dcc3dc212884db3e2f61b1d34a14b6c70ed1c5a0e7759b9ded45474cc063c8d013d462e1dfe95ba870e70e57e318e286eea1d7a281d07ddf71258b644e16f2e13d17bde11b897be7fdf6625d99119c0ff5d343fcf141369b330f09f100a" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a000000000000003f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294080580000000000c88331000000000001f07e0e006909704cfc274af012c4a108ac7c28edbda13b9b91c003e8514c36acd143d46b14ae8c18cc0d53deb3f5fcad0d70cb0a4129076597dc6ac6bd97b74cf381990835bded47645025d36a3148f2f10389088482feefa8d174945ce04c5a276aa2dfee675addcd0039ef503c66a9b8c139d5063362c92a50a85175ca438f70eb1206", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b00000000000000b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602160000000000030ba3300000000000240420f001f3ec1117c1753fc4dc73ccf079789551ae7e26cb2a0f8d015897b60e947993252204d48a39839b784c778e31321a362531233e729d6410ae5c4152896e07405e00b873aeeaa24e8035052240f94b43324639afd785b07f40b298b7c5099f3b9b755c188fdcf248fe36e88a338b62e844b5bacf8662f56fd24498f00eafdcd0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c00000000000000d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ecc05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980c267000000000090273400000000000240420f00c464eac72dbaca39074f87b03b8d3056428ed16fdd763264d039e56e9ae52a5cc36eeff66e53752c6e6d85845066531a283e9ea4dcc1119c6fe08f8da16dc50279f7165360d69b26b07ab11557817b0bc78908479677fb107a74b2e7535a5b91696f506a08b8a9c610494571694fdadb3ef83f0886ef4d5f0214b9f1366b6707", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0d000000000000003947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246a0636f00000000000001160057584331010100127a00000000000000000000000000b7e970e6f92a4d995ae02de5082af3f4463021f611fd83403a9efd12b312170c13fd4facf7e531d22070f1635e23184e6e3f8018c0bd603036d0b9fb97e52409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0e000000000000007d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03e0ff6f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0636f000000000088583300000000000240420f006ee84a30bc8d07647fc9c0687d0ebbdca65cae76740c3e300f7f02a3cb488847dd96ea0adf55ef5fec7d97d60e2cb6eb3ebe2642dd20d5b25cff52b895ff3701818a1e586152d1f92eeca964c7f1c5f1375d4390ca267b7deefd72edfaa1099edc82e46fa9d9f2768ffc6e62d0673c6b97036ee2835e0b26fc02e476e3b22702", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0f00000000000000a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f500a17700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00477000000000080003400000000000240420f00c704c4a7d0db41af6f9a93aaa0e092d5e1376974d95759b4e29a0b417180da3877fc77d8067e4bc175d56ccbdc977588f76183761533fec29fc3d1154b464605de8fc826b0ad8690503a77632292a79b469aa7404b840ee4595201d97847e5cbeff1adc22e6a7d4caa5c6bee3aa2bb5b52bd9bf989de0ab9abc6f05666dedd04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a10000000000000006cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b20427f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0a57e000000000050ea3800000000000140420f005e4eeca8bc2379da8fa6ba264cab932a70d3e6092e3f42f957ddbfbebdcd0a231c91d4b45b4647277d7f01294df1e5b8c68375fd7672cd095ec8fd925b3af20b49e4feff3b1bea5927e41d0f0e29f9f11f60b6718a78da8f752dc295d6e0dfd4949de227a5064a04883afa70b37ad913df259af0acf2015d2edc94620ff24901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1100000000000000900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb742940e38600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429004786000000000098b43f00000000000140420f007b022b7b5973aafb4b0f614d7975986215ef7383c695089daa2054353a9fd1202196d22ea987692710d3ec178d1e82d05d6a17c9f429698a1cbc77500a4dc20ac43c01e8269f325daddb4605c83e9284247e710d3750eefce6ffe6a53ace2b1caa97120926e02f4e740659e0d0b461b33f05bfee61ce9521f482101c7e0dff0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1200000000000000ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e021160848e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920e88d0000000000286748000000000001f07e0e00989ec0a78952b2f08e0e2c397ec23ea9faac43007769132dc671afa82459d4700115c0d955e71f88f5af3608ccd3a0455a5e9c0f8cd533aae906bc8d1042c106d358c34d5c409d5747427975dbbee1c4fe239cae05d754d66db883c86fcc2645916d9395c02627933e7536e98d5e2ee351731c4bf0b7396ba6d02d73ea861d0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a130000000000000042e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da80259600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429408995000000000070314f00000000000140420f00e5d4eae0507399eff4ad8cbf499db206392e27e01d325a0ac953aeeff3ca3ca52ee6f4ca22689cfaaac6c68956f36b84fde1df9a39b08f51698aa6de831b5c0bc80bcf2877bd1cc821c2b36a7aee3ce36788816d874d01cda2392595caa275ccb33863c7acde77feccc43048c932806431e34ecb723dd4594f3aac194fea7b0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000bd7db5754d988ce9d8a727bcda41e64478fcbca520057a19e7392b7e70792841c067a500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980cba4000000000048ba3207000000000140420f005c48a1317028b58d49bddca85d040ceadf846b6741170125ac70ada35168ba9d8330ca638bd36ad968d64eaa92609778d73bddfb0e16abdf3bbd9e2a6ada970f4605bc367f8dc15340435c6b9eac2485ee42ce3f44fc670221f8042d3d3e5cf92b1cb559beba778dec4983e527823ce294439cb704d4040469d4a2b805617a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a16000000000000003e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754e008ad00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a06cac000000000060033b07000000000140420f00ab243f955e937b280a8e2cf536a2fb5afb3466c83e9d130ef3955c8baf6493ff1644ccf91ceff646811a7697cd2e575f95bc3ab3c71ee21b4a999f3e6639d20fca6ebba073588611d8e81fe4af368ef0d8f23699b744037fef25ad2ed6f8891a7e29883ea103389c4ae6abda9b4ba96f9c2fabcc74ee5b598b5fe2ce9bd5750d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a17000000000000008f2fe0bed855ad874e9c92da6e712ecf32ab30b86cc0a9afd20c6929a48b1ca600aab400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00db4000000000070fa4207000000000140420f001230b6f946e6f04ddd14792d5dddad71e332125d765637d5e98f05bae8d679adce3792cade21f5782a23616409de8a355d044331c6e56ec0a16ef1ac43d61701781ca5db74b84f0957e5a0588809c6f4519cab868c926b5f05040bb127dae7f3643020d561f6817c649298b759399da4096cd193b05b82de6f16f4961f383000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a180000000000000083abd576fcec5c8e6527a5da60d62b26379ac39bc95ae3858cf49cbbb9ef931f204bbc00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0aebb0000000000b8c44907000000000140420f000b256a4755cbc65b79e7a3219e86b46ae2b438890c8594ff04433cd6bb8d785e0d2a43c11e9793c3c982f8442dd8f74a35f0ddfd3504279bcc6cd5bedbe4110a60c04553bde697a94707b992bfc9f31093b7c96acac91b361afba7f7a87815ab6b9dc09f1cdf2b1cceae1b0302cd6b1544c9f09b6ed7517d57789a8f7e031907", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1900000000000000682f3f064c01bd056db984e8b0fdd51da069515e6d189ff939c579b3038f3cd440ecc300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290050c30000000000487752070000000001f07e0e00358a801117d6c85c762c78be8b9e21f73056943e34dfc0be805964f0a7b1ec76e56c48f69cc43dbf55ccb3d5b41155f6569ba946281a5054577c0f64474d190981677b36b2e5f4814302c9b2a3eac10304b6decda2d9b93ff1b5feb09d8b584598d57d31ef48ddcb859ccd92cb5a8227aa3ffb4ea9af7076520fac58d7e44a08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1a00000000000000437e3b0d102d43ed5230dc5d0b2b30d9d1f2b6c808a53b3808fe0d95f3e65f34608dcb00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920f1ca000000000090415907000000000140420f00dcbc09de990080912b1318f19b73d5c7c092f35bb5e7e04c99ef5e43a0bca8277b470d009de17b52b0f30cae4c42a464f3c4a048c0ec61bcb961778a46ca230ce0c9db71e64b940ccf6ae3c9b18da8bbba900e62621d1f4b9b36c795a9b89658dc31f083b3f62b1d8973565a0739a9456775cf024d998c138452af6c85e11409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1b00000000000000e9153f5152ead640e6a0be69ea00b5fc38614e42904b3212e0f22efe78c13cf5802ed300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294092d2000000000010506107000000000140420f0047058afcce4a61c303cacb3692112088b094ff0e91c655e088fe66de4ec42c7650a8e0ddaba413512390ddb2c853424dc58f072f67c95f79be67d1d6138df0062368083d87246dabc82d25f9dd1f3c7bd8e8c4c26b1614e29134ebf230c4ee8c14054f0e7458103c521d8b56579a437185e932b20ab0712ec3382fcda188df08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1c000000000000006a6a671a5fc6abf44a70e224bfa5974d2464050c70edb9186943bf6ddf474a11a0cfda00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296033da0000000000204769070000000001d0121300b2af7a9673f65edfbd797b6d635cd3b800866f16c38e01f24189f7c9efce8412db59e83f32288b69eb32eae1511534a0e720a600a043d654c3de9f657ac5f40228be38f44484457d6f602f2f15b502f8616931675bc32c1ad7cc8b9821884f58226889b8c2bcd604da643faa6fe30d71a2cb3e44d7ab12fdd034b02c7026810b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1d00000000000000eaa4ebb92967277fc5a6d2588a4d0a1ea0d0c7426e94d3d6f99119587dd2e6b9c070e200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980d4e10000000000807873070000000001d01213000f5a9cb1998ebd027cd90b55aa1e3e2a86553b2df7d4701d23e209a95136e6d6558600e34733c2d73f2e53fdc9e38d969caa16528e2ef2bcffb9621870933801207f771eed51473daa339acba7a425d201e71cd2d010faa3f861279b9ab57a68f7c51455752205c60af76a20540e68591775bda26af12dbe0c66a105bb69b009", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1e000000000000006a1ee9e122b08a3d5fad0bd31bdf86d0e3a341043bab8ac0726563d17dcce476e011ea00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a075e90000000000d8577d070000000001d012130085a553befd354e07307c2c38ec419ca509b670e3d7621184ea41eccef4e3e17a7c2b2a475ac9e00754c53a871119c2dd0ed951bd7be6ac034d4990e6b451730739f3236a90086015635d991ba2cd2c8b496a4c7ba943effcd9df04a5b5ee9a7dcd8f5a85f3ce67ae6b0f60ad46eca09c7b9e78ad28ef594e716ba421b867c308", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1f0000000000000031c8e8ebe3292fe1d88d770fba0e43444e6431f624324dd52bcad5373bd5c87900b3f100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c016f10000000000680a86070000000001d0121300f5fff71771ce1f8da1e01e700ab74f057acf9fefb5203751fc9d5df10b8f454ffca99ac32dad73d2b3d4cd91857575950f1f6fbcabf04b31a534d01030f0d20361bdc040c2adb36c7fd979b2ec199cfb2008074620491be94f6bd15ddd738760026cf9ff5af58e683e239a68f409eb2d4e34b5b6cf3e0b9af43d25c083fd1e02", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a20000000000000001aef38924412df78118148ff7ef123f177e43f75a28fa662c295dde08fbc279d2054f900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0b7f8000000000040a590070000000001804f1200df2e266cb67cf30ce1e227e6fad5f9a691c24b715712e05f35f1f8c9fc4c97e1b00d8593be6eb2e449a920cfd837ae7003963486a62c0be5932a541bfa8a410c0e6da42681b537382b2187cef6d810ffc19af64cafce7c30867b1e7e053ee001cb8baa4c8adfdefb6e9e481cf02b86d5a6dfa5166cab1b37d69476d434dfa30e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2100000000000000afd2fe122702fa27aad9a4f6081d4cfbb47d4535662f0b3c924958cb39f3258940f50001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290059000100000000d05799070000000001d012130051712dc17f2d7e1a1f5a81f54acab1bc0ae7f81549e91ac0477a238ddfcc4d1104282689d9131727e79f7e9e7d6bbddae756f50ec3c4183a14e1fd4c611e5d0115838ffaf7af7cfc9b130df574060850f86081b2af9f78300d32e58ded167cfe7cdaf5f7e830e009289bc6850c574312baae21a511a25c0aa0aa5e3958a38d03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2200000000000000b231e31592f8d535912eda687414ed9679fe55c30cbb842846e5be11e377a43360960801000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920fa070100000000984ea3070000000001d0121300b5f8bfdb75c8c813fd1334827fd057288cb75f80e2727a0a97aa583af02b6d5d260010b40317a9279a5a669dd77e533afd8f62c3361d9296cb02169e2cb0510dfb09392b7e9909453ddb1565191df6da3713f9111c9fbee0afcd3e6a1a6e88b82146d131d5322e53f1177d6f7bdf048f0c79531470437e479d4550f91869cb03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2300000000000000faffa8c10d826cb5f01c66573a6007853d99bafd314dd285f103f1a31b81e14280371001000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429409b0f0100000000f808ac070000000001d0121300ed607da0af7e52fd95125f0ec8fc85811fc333a8412db68a9970795bb7386b5cfe6179fb3835f8bac7166c27f8993e24a126a95bee291d86eb3af80a154a0a08778307f28e9b57c65964348aec69cab41deced17430190dc78d90c06545c4baa6d4e3e71bdffd75f71fda3bbe198bb0ba7b50e6523f9a13b5eab900a5b52850f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a240000000000000038ee526c4637f1b08d3364d99d746cd48695c2f5cda4a4e69f245ab33a92baf9a0d81701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429603c1701000000006015b507000000000140420f00446c83080b5243c7213adaeba9a4b6281478db4cc09e93c3bfecaceeaf7f01b7c40be0a780f3a7ed875a0897bc4f5602db4a26e77e958ea7f2608f57ee78980f0d76e9e2b4cd55257a9f39e8bb1ab47b99b724e065e50bf3d9a74363e6a370ce72585745d34d03b732c0e1475306b71a2b60a4717bfcd93c391dddff76338b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2500000000000000d21d547642b741a81729f6b7b8e952c6cd0d6ed0ddd3fb0fd6fc14eacbc0748dc0791f01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980dd1e0100000000700cbd07000000000140420f00c5cda9b69cc3d5dc81dd356554455fd52c2657d0f760562c335615f0e8cce6041bc96309730e71d05a56bb1ecc7db1b8ea4ba993cae7b57bdd85d55c18cb1603f9e5877c5df9e8deb8fdabf7fd82b22acd12f970da6e8a7e938f9e9317a6a2ae442a354895096557fae6cef44a7796451f1d4f7b2a1af75cb9eb3d475cacc90e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a26000000000000003dd5526a844cdbf462b05fd305ec0e11d4686c4564f4b68931fa17df9372d73c00f824010000000000011600575843310102002d3101000000000000000000000000bb19fe3401dc16cbc9ab8b5b8a176d7e02a96bc86c1c44934fa3e4847dbc079fde20f7f0500e8caebd8c919a824b993df863d84d7741b6da0f940cabaf41b80a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a27000000000000002dfb3dd8f87ff6312b4d6a12fba0772e3666c42e97ddbc2262c885eb3f26a561e01a2701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a07e260100000000b8d6c307000000000140420f00d0272883aed469a7b6bfc6a8a37810632c1ac9973a95cb957e67d6779f7fc1fd8dcf0bde3b0a9bf64ed79362eece78bfefb592f904726950254a3787b05ac009afdfc0b7f893266e596de2e4c420a8f2eab63e5e11c095159dd9f869915233f9af0c64d9189d0808cfaab46911422b26a13a0770c35730efbb1f58e6cf444502", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2800000000000000bbf2355952fbe74d548f77f5d40752be6019241228cc53b03f089e1832e57f5300bc2e01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c01f2e01000000004889cc070000000001f07e0e00dd0db05319adf4231049020f09076023d2b87609653f1b63a5dcc3a5878c9291715bc335b2497ed4f9a4a232b29d992a728ae54367cb91a98bea8b8bf98e5d0eb4819c1f5b5855440eef376b7b7c7493c1ded467f31249477dc9548c186b3437377dd6d269869c209386efaef761ffb2de77c79a52e0ec7e15cf701313f1790e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2900000000000000cfb3029e1a4a5d6bccf7da281492bfd46e663239febaca779e9096676af707e2205d3601000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c0350100000000d02ef00b000000000140420f00913adc18899c97d8d0c8c02ca47628e8351d9180a08e18cfce6013cb09d8d76659f1d15b49afc05f4dde6e29b1e657c1fd634c92cdea590347c00dc00aa9210df38635319d5ccf0fd5dfba925e9973d69b146089038f4506526b2812aafeeb338e410d5e9189bdb1a61ab677c9950315e39a57d70bc7d509090903216b77a606", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2a0000000000000033cec905c73b2d83f38565eb4e0095bda2607e4bf9ec416a2e1f9dc2086b283440fe3d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900623d0100000000503df80b000000000140420f00d1ec72258ce9c335d03eb2fcffe814ecd656012fefe0aa0a7e106bedb8cbba8bcad62e676fcd692ff410320ce88d42ddaed6b9dd2a67ffa2062c0916c47fea08b11b2abe49ab90fa9d2ba2d587b7002dbb14e8b9197b95a3529d7962c3393285600dfaeb91a30567801cf27fb47e4d1e479a0a9f9a92f132af8eb631fccf440e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2b0000000000000013268b27b13ff9d2e2c5be9b3f82113df29a71966e2e4951f2424dece1611cf8609f4501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292003450100000000680fff0b000000000140420f00ae32a7dc302203e6fd3adf3bc883885cfbbddec46401777c790796b144f792a49354f8f51eeb151a13e88edce34fa71a930a83eaf5727cbd42aa433d5ddfc807fd7afc7e5f768d9561bd31a4af2cfba653b3019c9223d1b9f3c734bae803d99fa8122f92e1bb62900fb8d32c0d108d63579943896e98c036c2101c72d74e1a0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2c00000000000000c9c0bff7e56dcc3f187be1f25a923835b9d9c711e8ecd8ad48d7483b2786fedc80404d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940a44c01000000008058070c000000000140420f00038210773214bc06212eb9bcbb6c1b0dccd5fc97766d5ab733caf5719cdb5109583574db66b108da511661c272fc196198a73cba2ed0e8dead2ca743de74d004390844c82633f7bf0b67ccbac3640732a30c4bc4a3f36f3cbbe52d842493bb2eedfef1dad1d99e12d4bd16d3b70bad42dbaa4f1affd918da3fd5c202a1b3c102", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2d000000000000002c41c6e65b823c97a3d5c3d9dc1cb91a6f5417d8ad4ac46d6d5a248de0f19a3ba0e15401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296045540100000000904f0f0c000000000140420f00b7797e06ddac5a85749955715a989e0e1a09341a8563930302e176c5cca481a4b6d027640095a144c004b4ba2fa638b80cb19f6f8d2fab8db035b3f1acb30201e9f9366029c6767e8782e96935a71e7eba70bb6c877d47ba8d3ba2ac36cb0620a113061bd06c4daf39e8e1ef4541fe9a6202f06158ba9163ce2d2cbf524fbc03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2e000000000000001de2ea3077f7e90273c32256decbbbdaff4b73980208647812d0a0a414702ec7c0825c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980e65b0100000000d819160c000000000140420f007a22fccbba7e39c20ff7e56ab4d00523ea643aad87671819817149f523064aeebb2b293358678f69619aa6a9ec6187b4e68b8f0e442463db2003620345e17601e714c9f53b86fd650f9c5672a43bec3a8707e2945dad52bbb17912773eae315f035b8da547634833c53d1be0cd5231aa98dba2f0ae2b529e3626c2f30ba6300b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2f00000000000000979cbebd0fa4f943d4ee9ebd6dab12c17f9d3d3b2dac3236083024f00d06ceb4e0236401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08763010000000068cc1e0c0000000001f07e0e001107fcdb509513c2be194e852b5d45f9df595feae693e061e9774492f581c6ea0c648add9682bef2f6fb2afa0f8ce14ccd88565cfb1d488d8843937a91d0c50d14b08896bb06979451feb13abcf1da0d0f1708b73c46c5b43c2bed2d0728764e641c8a9185eaaa971ecb07cea2b03cb55536caef89681d708eb143982802c800", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a3000000000000000a1620a12b27caf6e4895c58f6e9ad83f5c2e42bbe17c338aa6b7e120f32db48b00c56b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0286b0100000000b096250c000000000140420f0048806bede8fd7446b668659f7e7bf5882c4cb69500e49e9139d541b604a5954360499d87f41205b74c31ef7a967e30c8170a2aea18b601e0802185c717fe300749f5465634020cc0fa6804f147d7f6136b58058b7856e489c1ef691eead8c25853f8d5ae33812da41db090cec287ff57b1ad6062a01f011dbd09189a17c7940d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a31000000000000009c55b57f043ccfe860fec2d1b3269b8acd720084d70dd55c1a840774594f5af720667301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c972010000000030a52d0c000000000140420f000261683301d66cac1154a6e5e8cf025096962619fee0b00489b2d8d4ac54e1b289ded2b29f92fe427056fd22366de2647a2398ee95acb1d5b30636841aa44201589cfe416fc13d453e733001374558c805cb13c161e65f1bdbc972248e8bcec112d9f8ecfa6af0a7994cc53570caa4e376039da1b3b145238b277cf5ca19cf08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a320000000000000054159ee800aa6d542899377d01edb0de2c1592937f74b64ee18dbf70f98d914b40077b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006b7a01000000004877340c000000000140420f0040fd7517fa1077938a7cafb7b71089a5c97e037e95f46d43d4ce2f49999179c10b804af81ab2acc6b7478d4c57edaf5993c990c1b61a825d92127e037434db00742d7c812a02b60dfe1a432333b0bebc91a596a9fa073c93b9b8cc26a808905426f051d2d81fbb19795691941c661f100c78614a3f67c9855e20b309414aef0a" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b000000000000000000000000000000000000000000000000000000000000000000000000000000004082ab00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900e6aa0000000000e00b44070000000001f07e0e00a318339d7ba3848356d409d4a93be22850d7d4f44f2b35fff3276809d9ba1c25a4afe39499b842a47c397326107491c8053415839416fb3bd7307605311b4e0a29fc56c3ab8b624fb87b9dfcaba6dc15eb9abde679dc8eae3fae4bb7225b5b687f10aaef7d5c0b9c6d18f978ccc8618f6e3ba9047a18fbc5d1aacf13cfd86708", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0100000000000000b00a70b835347ab9ab8df49339ee93c8872a76a47f11caa3a9c1c51b2ea533176023b300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292087b2000000000000ad4b070000000001f07e0e0032c6feac53fbe1c98b036de4423b9d4d27f44655d9c994647f97c63b91e80b40d2b3d7639c39cb4c1b1eb3df8e9177560dc6209bfecb830728a03772ece60f076bc36afc438f7da2117a41b0933d53f0389165adf023f464a95c5950ff34b49ffdd1c1f553d62faf45a2f700b3e9de7cf0b18b569015a768b3079139d01e2f07", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b02000000000000007bd4a82d0c281a0f53a1904e2d1b6ec374bf0f82b91fd3f44d7948af7ee49a1780c4ba00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294028ba0000000000388c4807000000000140420f00a5ed53713ae693e893789cc20732820687160803a750a304366097c0b22eb62677bbc3a61e3ee5c3a6b97ead0ffd2f88c7f0cfaeef4b633e8e490b378ed275094251a8d3afaf8396d3c260fd6a480ca81fe65b694e598fc084c4b2e8fe91f7e780fad65d49405250455c55cbd37c07c3dbae4f9e6316587a10b6ad69412f7601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0300000000000000e0d01f22a5e195c0c548506953dcdd1f067b1ba24256587a4299a8a65f54ce79a065c200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960c9c1000000000040ae5007000000000140420f00e63a18086121b0a7dcf83eccf60dd0b373ed6750508c43cf18463a9831c5a1dc2411f1173aa3a47fa3598eff23747ed6f54f464ab3feac0c36f7ddd0ab9a2a0f25a1622ddb8a33236d9f05ca288a73be1ffb97d80d4c05df18d70f752b86b6d21e5dd7f106c390afc0307dedd6f763658c3a9168f999eed388a0c6ee67958d03", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0400000000000000d99975777821cbe9bc3c4cf9e6925dec7f7d579dc6d978f57f82196af9c67f19c006ca00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429806ac9000000000020b35707000000000140420f009dd9684299924097fb41333efa75aa1c0bfe4202585b35afcfd64b377c947b90472ae558195777c721a3dd6a9a7091ff29a45de9594a7657836b9b7cdf290b00287c08dd003ca63214155a626be06fe19183ba8922a1c3af39b0b8cc112d4e7ef02c61ae39eb31a11ac5510e561ab87fd3f172aced0b608cef4758de685c2307", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0500000000000000329b40f95f11841f1b4d642304b5d4c064fc9c05fc44859c54755e2603627d97e0a7d100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a00bd10000000000909a5f07000000000140420f0011ce40e2c308399fdc40548cb23e1c3aff1f057b48a7242a4c5192b78a3df68badc7c26231cbf4a16944b6f33ac864c9533d88cadaec56453b3aa68e54fe8701094a382f4db96f933898c1e2c9930bc55bf02b8fccbe508902bbc651d41539459e003d27d3bb64e6f734076c7772784f68d09812c7012555f51d7537265f4e00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0600000000000000411fa02230a3ab75d0abdf160c41b1df9338e451f210336535112553e360ee370049d900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0acd80000000000f0d168070000000001804f1200f7cdbb48bbd0d1dcdf2b6047cc57d1fc6220a0cbb6a4661c1717f5abe6012ab5330ee352421351d641dc436f87f6c07e6a5a173f96308438a64ffb97fa03a7049077cc5a01ccb7afdf20c1270eea4a7fe653aa4ffba792601e3227887a4dde77e73f43361ccda335aaf2dea78ebc35928b05ef05fc0dc34b95709653e465e605", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0700000000000000142e4c7fe0ea48229ec45ca4e429ea3b7e2a7edf7e6705f34a214532e90ebcd220eae000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e04de00000000000d82271070000000001d0121300ef84a8f5dee3c77006bf9f8dbb71e0bcc28358fb372023037dd87087a4cb31f75798d51fd743a6d5fbe596340d8a675e20eb18c660c998d433b9ee20cd5997005d6421df27e0af61c02238baa14dfdc71b40afef155e6a18dff1ba2fd012044d43ed1c0d490aae5bca4c1f54b701f39a702704f4453034a4b74fd532fd288a04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0800000000000000e192833f4aa3b36b8d696cc18a119fde084a4b2b4435e78b432e5d469d127101408be800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900efe70000000000f8347b070000000001d0121300f89d560edad95b3d4c1cda57df2f201a8a26988330888828ab58bfe94e65b57bf2eeb2a88480cf4ef8e7ff777cfc3a6a6f35386eff1739a1f0879b1cceb9dc0e3ecef8fe4b135216238eba963750ff510647e0d3b438665c10660745403929586d80ea5d9ee9b15d017e706a68e28ec72f4cc7f563ffa914e71e5f93faaa6a00", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b090000000000000040063e5ad8634b21bf4ac5d42daa98aec4286d3d2d296e7f369292242772de2f602cf000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292090ef0000000000407084070000000001d0121300b4bee526a3a042c38769caeab02e4e53dd1ad1117ef8f68d0db521eeed92e2e9319388bd6b9451f1138cce565402b0033275d7f77fa670d3d1a1fb8b9c4c310b2ddce23666b483adb80af3bed3c1aa58446a9a50d8c4cc8b96ced97dc0ed94bef8f9c5550cc14d26f03ca12dd3ae0f0a90474d8cb49dea42098362c7b62b8e0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0a00000000000000653e03f327027a2325d4a8f03f623dc0b64b34bb3a37bc19408eadabd984542f80cdf700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294031f70000000000907a8e070000000001d01213007fe2b3741454d7cb15b2d59badd6e04ea660335a25698b257c9f283cbd7f0dd9e9f11ebbd53e336810ea71f72262d0d4f4a1f82c7ee09add3737b8cd9b93180331b6593ac9df5a9878744072b946600250a5f43ce0959a3640029de593db4f44b4afc10bd0c37779012181f539f13fe97561eb4be9adaaba4fab16c64d590a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0b0000000000000014d372d970e2f93c298c57a090f8c23b6b639eebadc18cead1ad5f2d540febc8a06eff00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960d2fe0000000000b86797070000000001d01213009bda0c64927f8ef41a6eb87f0572592103411e7e0ea067270ccad26148af60cf2ca9b39a9ce02cc310a8fe943481900b0774426471b9bd7b02762263f718cc0468804a9215ef2f3322ca4945580a079089609fa32292da258489094c402264ad601d1a40f95a01790c27715bde37c34f57e2a73d7216a0a57135ec62278eb40b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0c0000000000000056bd4def121ec5890a290a3e5b8bcabf552d48d2ea6103d0181dabbf3eff7196c00f0701000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980730601000000007037a1070000000001d01213004161d997a7d23b477908bd9285b614c504bb0e96c35b9cd88ced206c0dac4fd78a19eeaf55393ebbc0478a2a2a8c6ebc5697e650ac376e69ea1ed4fb78aab009003705def6846814da63240aec707017f88e2c2259cc7e608876840a72df1ac4672721db98745c8e7edf0fc6e8d2b67f69a3400661a79f318b3573dd56da3006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0d00000000000000f26566592f3353a803e641eda1d5313bd10d067946397b0106989653c27c876ae0b00e01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0140e0100000000502aab070000000001d01213004b5fe3d24a00f5f641ba7bbb5d56c6de296b4bf69dca2557ddfead3e277780d6de6c9263ff93e7adc6d3c62885f3d1a4b47c8c012618eb7efa314ce3515bbf0ef89c41a56c57ab2450d8efba87b583bbc500eca1a3b96f7e9da9a7cb19e54240d6d9f6bad39892982ccbdbd9f921ed398df21f7f96d4619e315e8e4c5295da06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0e000000000000002f994c01c77645be4cf04a3c921bd12bcbe15a47d249d52328c9351a8194de0400521601000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0b5150100000000e059b4070000000001f07e0e001d72dfaf69a8553f2fb5bc9964c06083e1c4aefea0593b2af5b7f3acaf6bdf4d5b386bc9b2b0b94005298f5f39a25cdf7b6e3875d8e3e7b91632ba303a94d909e477b8fafc8b0ccea823d6fe750b72708638ba0f688feeae3c7ab53fc31aff5ba0e51463e76046e1f6944056e4e32923162c50724567ee7148abc70d9ca24b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0f000000000000000ff49d4e69dc6c79a2628c7818ecabf5c904bafb6dd888c8a54d2f4cfe51c25b20f31d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0561d0100000000384bbb07000000000140420f00e75b203758fe54a06f9261486503ed1d8aecf80debbcc47dbadcbd4457a0276e31b0601c54a1ae6481572462c10bb8a4f64086d78f829b9d72e007d767883f0b1b85ce0c757a1a0dacfc6224392f58802cca6b1f2d06081d84a9a4eb264a9be736812a4719f3ecd1b14e3e3168bcdbc7db70342663d915ae855aced1fa9ea000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1000000000000000b3c83a0a3f1fd99f1287ec3f7a771e94579db99f2dd19d2780f3ebf046e7e43640942501000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900f8240100000000389ec207000000000140420f0070737dda8240b8c8fdfdff3a37f38d85dfad4f6ace8fa53fd773901517498a65168f2499245a255255f702b01615fee6c88a42c8ce6ec68f08126b83a9e4700b5b12c1317cd032702f856494a0d0a75db090f9327dedde24a4848d5c1d8bc85f26e46f47733b264687ed264e12eb06c3c0f7aea0631cdce645004f555c465d0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1100000000000000e2ff4f034500e22e580745c2823173d44b131011f651f56f319f50b22332a64f60352d01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920992c010000000040c0ca07000000000140420f0055d77b9ae0b5fc919a7eaecf7dc9d72cc3b664e8ee0f44437c11737c88258ea59a797a4cdca6733aadd61dd3cf556431600756b22433aaf8ddbaf78dc8f09007727d77577d818c44cf64509d292365473fdb4d351dc307424401b3811a77427b5cf0527e9100abc7808eba1b1d83cbc40e94e2e57e11b6095957e45c2bd7c40b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1200000000000000a3bec274594593f21f8ec9e77d4ab1f6899722fa2261633b7d967208643aba8580d63401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429403a340100000000a0b9ef0b0000000001f07e0e003530c9b000944166b2a52a3646cf2d569fb4577480e208054af031e34b81bc1d4ccc52909f3300e35cd8432419e3d4b1e48ae38529d50d7c598fcb8e67dfac099d91ad6021f4d0f2d1c20e6a3df8885aedf7ab5280d8334e06a6b9f498627236d374979ab53ebbbfd2e774d241d480e3cb7bc5433c884b37f813070f4b217705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b130000000000000057cdfbd20eeca6fd1a5f45ff6899ddae359aeacb02d750d2802523ba335b2e30a0773c01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960db3b0100000000d087f60b000000000140420f004672368e9ff253b07c966a3ed9334db71497b2803a7398c734c199eee7b1b543ca5e1229ec374adddde475b92438e73eb0b0e4f8b0b7ea6a70760bf1d6cae80e12c2cc9056414d949e8f63816c021f23ab6ac06133fd891013455eee772eb0d8883751a2254addb3d0d16cf8c2512ca67c47f8ab419bece48c5b285faa923a04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b14000000000000006eb76511a1fa57ac9ce02e00233fe4d2c1a076400e899907db17f524ded15bb7c0184401000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429807c4301000000006892fe0b000000000140420f00aba6720caf090c44462596be044f203cf3ddd03a49ce4bac90ec836facdd0c3859e107d16abfacc1441a8b5f5e560fcca037bba6e90f63caa74e05183b97470da8b2c8c6833504371e2e663732648d3c99124a4df12e962311bacc2d3656a0de5b5eb343ada5af418854991a8e8422463c7d999ec72b380290dcf677d2b14000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1500000000000000967edf9ba5c81812ba8523e56cdca7f2bf7bf56b17c991d6ccdb1a2f34d96e89e0b94b01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a01d4b01000000008064050c000000000140420f0076c7ce454c01ed549b5fc7e8ec22230f1c8c61b3f3555f8e58283f675cd4f5337b0599c1b790e9b5e924d42592ad04e4e1437a6b0a9fb0739ef0b12486578702cd11d2a845bdc69eb1ec96cf600ff0242eda0156c0e6b9ac0fcac0802a9af558481c27dcf152a41a7b278ec668b7012346c98e6a5bf37f22d58eb55ce558cb09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b160000000000000030e6e7a2ec1933ffac74471c89d7cb7f52305a181a089a555278ee2092a44d4c005b5301000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0be520100000000588e0d0c000000000140420f00ee6e1397e4e5a9248b4b1cf49c68b41d0080105b454a097b5708ce099294ef1fcd723022042fe292164adb2634af4894f28bd4a6024a4289f629bdd9e7115c0da7ecd498cac84413fca7259b898fd049a6302390f3266320b5b4cde6566781840b4ca7e137614b59a6151623622c876ef22dcd0f2a5ced77f5e19bece9123e04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1700000000000000385f4cb1941ba16c98116ea2f6a8cc6a8d36cc5ca53cac80bf79b85d8c19829120fc5a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e05f5a010000000058e1140c000000000140420f004a55c3ccf34d28517e79c7d4f1240cb58af6d3ad85b8435436328b352e1c646c8d527b530d699384165dcbdd453670b1b569a9dc7a97459c6b1a367f712f43033bcd6177df1353765ea7596100a897c563f4b10e0021fd8aa7b6c23747f500a2b581d3cabb8378e41cf92e79bfdd0b10b406172e0b3defbafe312dc18ba08904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1800000000000000960bfaf1000eb6e6ff94ba636a55eeca5c354376dee15a0b90e43e2a87e6ceb8409d6201000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429000162010000000060031d0c000000000140420f0067ab9c4f75c0cdfbf44dc8af001db78550d06f498e88a45366c9504c391853761a60574c0ba5811744b9140a97e33cd83376acca23eb979f830f24211d10ce01ccb5ee14f21e1cfdda6e96e940e309d281a2a0aa0daf47e6836faf7b580fd6f56a28c0103306749f8daabb9b92cafff756383a2230436e4d4f91ffc43d8eea0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b19000000000000009c1f21d94cda739b62dfd8dd232c7c0f0f7c56c3c3fd11d25eb604c1d4dd5022603e6a01000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920a26901000000004008240c000000000140420f0089ec5d4a7675bf9ee99bf10531beb56499540c27e58c5d6f00f3167ebab2d41925521e3aba7138e6dfd8b896ccb96dde07ca184a402be6173c4abb14c2f9670fa12c0687221e9bed72f05a1f7901d0282e66daedc9e7d5c6067402884c3656c2a9ab4917d249892810cda0a7ec6af549302b14f4355ae29342fe8d93c6b01c06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1a00000000000000370516b367c5bdf7dcc3a245db09b95140a57e746e785d12838751465cdacf4980df7101000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294043710100000000b0ef2b0c000000000140420f00c3ecdcad8c931f896fdc5d4c7492ac47cd196fae34f00bf8235922ef5ed33886a10c54535271d0862ac4e2fb7c6b58cdd2215a3d3b0a7fd39bb50a5e9271fb0c7aa60d949c1e5ffd6141a3ffb6bbef34e0e1d3f744d28ea952887a8d7717bb666a89ec26ab4f31c4b69a78dbfabc02519211f3e6d1e179ecea76ebd8ca429e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b1b0000000000000051c2cc3c62155182bc271905c293840041eeceb11943c8e4b3b4a5b685fae5dda0807901000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960e478010000000048fa330c000000000140420f004897031f6d5b70511c262bfec2be173e2dd9bab404b66bfc8c8005afe672bbdc2cbc232bd67eb724f7e0e1343797d32af998e627eb090b466708efd61cde16003ec41b7847abb82048c58fefb7d20c16ec25dba9d57f3890470285d226cd18e06c8c46fabc2db86d47c55c8b4e7db1e5620de924032a50b7ff5339d588ceab0f" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + null + ], + "outcome": "gap", + "room": "9b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e", + "gaps": [ + { + "principal": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "first": 20, + "last": 20 + } + ], + "policy_digests": [ + "9a7242e1b726de4aeef26e784201c318d38333a2d8f3dade8001d860b4d62474" + ], + "starts": [ + { + "at": 0, + "policy": 0 + } + ], + "controls": [ + { + "digest": "008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 2000000, + "action": "play", + "at": 2600000, + "arg": 0, + "applied": true + }, + { + "digest": "3f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 5400000, + "action": "pause", + "at": 6000000, + "arg": 0, + "applied": true + }, + { + "digest": "7d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 7300000, + "action": "play", + "at": 8000000, + "arg": 0, + "applied": true + }, + { + "digest": "5b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 9000000, + "action": "seek", + "at": 10000000, + "arg": 120000000, + "applied": true + }, + { + "digest": "bdaa571261a6f48559d52a969007817077f8b50918c21e4f6814fbcd77d9813e", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 13200000, + "action": "rate", + "at": 14000000, + "arg": 1250000, + "applied": true + }, + { + "digest": "46a604854dbebd6c9b4d4600041ecf29b391535b92232f5a916b12789dfdb2ca", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 17500000, + "action": "rate", + "at": 18000000, + "arg": 1000000, + "applied": true + }, + { + "digest": "2dfb3dd8f87ff6312b4d6a12fba0772e3666c42e97ddbc2262c885eb3f26a561", + "author": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "t": 19200000, + "action": "pause", + "at": 20000000, + "arg": 0, + "applied": false + }, + { + "digest": "7048890f8171bdf1c60a4a7e04847ae4eeeffd35762ba5d63d0c9c904886dd0e", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 19400000, + "action": "play", + "at": 20000000, + "arg": 0, + "applied": true + }, + { + "digest": "2be013aa7130272b7e7a96c3770576b267ce60cdb0ce53de4245bb41c86a17c3", + "author": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "t": 19400000, + "action": "seek", + "at": 20000000, + "arg": 200000000, + "applied": true + } + ], + "timeline": [ + { + "at": 0, + "playing": false, + "rate": 1000000, + "position": 0 + }, + { + "at": 2600000, + "playing": true, + "rate": 1000000, + "position": 0 + }, + { + "at": 6000000, + "playing": false, + "rate": 1000000, + "position": 3400000 + }, + { + "at": 8000000, + "playing": true, + "rate": 1000000, + "position": 3400000 + }, + { + "at": 10000000, + "playing": true, + "rate": 1000000, + "position": 120000000 + }, + { + "at": 14000000, + "playing": true, + "rate": 1250000, + "position": 124000000 + }, + { + "at": 18000000, + "playing": true, + "rate": 1000000, + "position": 129000000 + }, + { + "at": 20000000, + "playing": false, + "rate": 1000000, + "position": 131000000 + }, + { + "at": 20000000, + "playing": false, + "rate": 1000000, + "position": 200000000 + }, + { + "at": 20000000, + "playing": true, + "rate": 1000000, + "position": 200000000 + } + ], + "presentations": [ + { + "digest": "f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1100000, + "position": 12000, + "state": "paused", + "controlled": 0, + "error": 12000, + "settling": true + }, + { + "digest": "7b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1300000, + "position": 30000, + "state": "paused", + "controlled": 0, + "error": 30000, + "settling": true + }, + { + "digest": "0add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 1600000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "58b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 1800000, + "position": 0, + "state": "paused", + "controlled": 0, + "error": 0, + "settling": true + }, + { + "digest": "0ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a666563", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2100000, + "position": 20000, + "state": "paused", + "controlled": 0, + "error": 20000, + "settling": true + }, + { + "digest": "ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2300000, + "position": 45000, + "state": "paused", + "controlled": 0, + "error": 45000, + "settling": true + }, + { + "digest": "045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1ac", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 2600000, + "position": 60000, + "state": "playing", + "controlled": 0, + "error": 60000, + "settling": true + }, + { + "digest": "9bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884f", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 2800000, + "position": 260000, + "state": "playing", + "controlled": 200000, + "error": 60000, + "settling": true + }, + { + "digest": "54236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3100000, + "position": 505000, + "state": "playing", + "controlled": 500000, + "error": 5000, + "settling": true + }, + { + "digest": "36120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3300000, + "position": 718000, + "state": "playing", + "controlled": 700000, + "error": 18000, + "settling": true + }, + { + "digest": "241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 3600000, + "position": 1000000, + "state": "playing", + "controlled": 1000000, + "error": 0, + "settling": true + }, + { + "digest": "fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 3800000, + "position": 1165000, + "state": "playing", + "controlled": 1200000, + "error": -35000, + "settling": true + }, + { + "digest": "8cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4100000, + "position": 1478000, + "state": "playing", + "controlled": 1500000, + "error": -22000, + "settling": false + }, + { + "digest": "11e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4300000, + "position": 1708000, + "state": "playing", + "controlled": 1700000, + "error": 8000, + "settling": false + }, + { + "digest": "e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 4600000, + "position": 2012000, + "state": "playing", + "controlled": 2000000, + "error": 12000, + "settling": false + }, + { + "digest": "557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 4800000, + "position": 2230000, + "state": "playing", + "controlled": 2200000, + "error": 30000, + "settling": false + }, + { + "digest": "9f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5100000, + "position": 2492000, + "state": "playing", + "controlled": 2500000, + "error": -8000, + "settling": false + }, + { + "digest": "a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78e", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5300000, + "position": 2675000, + "state": "playing", + "controlled": 2700000, + "error": -25000, + "settling": false + }, + { + "digest": "d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 5600000, + "position": 3020000, + "state": "playing", + "controlled": 3000000, + "error": 20000, + "settling": false + }, + { + "digest": "b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 5800000, + "position": 3245000, + "state": "playing", + "controlled": 3200000, + "error": 45000, + "settling": false + }, + { + "digest": "f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6100000, + "position": 3460000, + "state": "paused", + "controlled": 3400000, + "error": 60000, + "settling": true + }, + { + "digest": "d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ec", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6300000, + "position": 3390000, + "state": "paused", + "controlled": 3400000, + "error": -10000, + "settling": true + }, + { + "digest": "e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 6600000, + "position": 3405000, + "state": "paused", + "controlled": 3400000, + "error": 5000, + "settling": true + }, + { + "digest": "3947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 6800000, + "position": 3418000, + "state": "paused", + "controlled": 3400000, + "error": 18000, + "settling": true + }, + { + "digest": "219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7100000, + "position": 3400000, + "state": "paused", + "controlled": 3400000, + "error": 0, + "settling": true + }, + { + "digest": "a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f5", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7300000, + "position": 3365000, + "state": "paused", + "controlled": 3400000, + "error": -35000, + "settling": true + }, + { + "digest": "32293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ad", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 7600000, + "position": 3378000, + "state": "paused", + "controlled": 3400000, + "error": -22000, + "settling": false + }, + { + "digest": "6cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 7800000, + "position": 3408000, + "state": "paused", + "controlled": 3400000, + "error": 8000, + "settling": false + }, + { + "digest": "f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d3088", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8100000, + "position": 3560000, + "state": "playing", + "controlled": 3500000, + "error": 60000, + "settling": true + }, + { + "digest": "900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb7429", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8300000, + "position": 3730000, + "state": "playing", + "controlled": 3700000, + "error": 30000, + "settling": true + }, + { + "digest": "08ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 8600000, + "position": 3992000, + "state": "playing", + "controlled": 4000000, + "error": -8000, + "settling": true + }, + { + "digest": "ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e0211", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 8800000, + "position": 4175000, + "state": "playing", + "controlled": 4200000, + "error": -25000, + "settling": true + }, + { + "digest": "7c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a62", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9100000, + "position": 4520000, + "state": "playing", + "controlled": 4500000, + "error": 20000, + "settling": true + }, + { + "digest": "42e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9300000, + "position": 4745000, + "state": "playing", + "controlled": 4700000, + "error": 45000, + "settling": true + }, + { + "digest": "f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e99", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 9600000, + "position": 4985000, + "state": "playing", + "controlled": 5000000, + "error": -15000, + "settling": false + }, + { + "digest": "7e364c445a1a6a1846c9640251e96bb3c8eb397bd1e7961b55c4ecc1240e1308", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 9800000, + "position": 5190000, + "state": "playing", + "controlled": 5200000, + "error": -10000, + "settling": false + }, + { + "digest": "f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10100000, + "position": 120160000, + "state": "playing", + "controlled": 120100000, + "error": 60000, + "settling": true + }, + { + "digest": "cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 10600000, + "position": 120600000, + "state": "playing", + "controlled": 120600000, + "error": 0, + "settling": true + }, + { + "digest": "3e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 10800000, + "position": 120765000, + "state": "playing", + "controlled": 120800000, + "error": -35000, + "settling": true + }, + { + "digest": "ea85c0e2cbf4cb7930de026478b7d93e56173af9bb74ce951beb29ee5c52be18", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11100000, + "position": 121078000, + "state": "playing", + "controlled": 121100000, + "error": -22000, + "settling": true + }, + { + "digest": "b00a70b835347ab9ab8df49339ee93c8872a76a47f11caa3a9c1c51b2ea53317", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 11200000, + "position": 121900000, + "state": "playing", + "controlled": 121200000, + "error": 700000, + "settling": true + }, + { + "digest": "8f2fe0bed855ad874e9c92da6e712ecf32ab30b86cc0a9afd20c6929a48b1ca6", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11300000, + "position": 121308000, + "state": "playing", + "controlled": 121300000, + "error": 8000, + "settling": true + }, + { + "digest": "76850dae85e1c5e4c0b6d20263022eb185e547b02b3165856849e479da35d050", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 11600000, + "position": 121612000, + "state": "playing", + "controlled": 121600000, + "error": 12000, + "settling": false + }, + { + "digest": "7bd4a82d0c281a0f53a1904e2d1b6ec374bf0f82b91fd3f44d7948af7ee49a17", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 11700000, + "position": 122400000, + "state": "playing", + "controlled": 121700000, + "error": 700000, + "settling": true + }, + { + "digest": "83abd576fcec5c8e6527a5da60d62b26379ac39bc95ae3858cf49cbbb9ef931f", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 11800000, + "position": 121830000, + "state": "playing", + "controlled": 121800000, + "error": 30000, + "settling": false + }, + { + "digest": "757b328d36764c3fc1c058008a4b190604571257efdf71a3a46f4e5428b9cc86", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12100000, + "position": 122092000, + "state": "playing", + "controlled": 122100000, + "error": -8000, + "settling": false + }, + { + "digest": "e0d01f22a5e195c0c548506953dcdd1f067b1ba24256587a4299a8a65f54ce79", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 12200000, + "position": 122195000, + "state": "playing", + "controlled": 122200000, + "error": -5000, + "settling": true + }, + { + "digest": "682f3f064c01bd056db984e8b0fdd51da069515e6d189ff939c579b3038f3cd4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12300000, + "position": 122275000, + "state": "playing", + "controlled": 122300000, + "error": -25000, + "settling": false + }, + { + "digest": "cc21249ac1b1185e8b33bb331beb0291a351db3a54296ddc131c2425816ec0aa", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 12600000, + "position": 122620000, + "state": "playing", + "controlled": 122600000, + "error": 20000, + "settling": false + }, + { + "digest": "d99975777821cbe9bc3c4cf9e6925dec7f7d579dc6d978f57f82196af9c67f19", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 12700000, + "position": 122728000, + "state": "playing", + "controlled": 122700000, + "error": 28000, + "settling": false + }, + { + "digest": "437e3b0d102d43ed5230dc5d0b2b30d9d1f2b6c808a53b3808fe0d95f3e65f34", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 12800000, + "position": 122845000, + "state": "playing", + "controlled": 122800000, + "error": 45000, + "settling": false + }, + { + "digest": "3a673a5fdbcd34041871f33cf495de531205612ae94d8c7f53f0722f3bf4db59", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13100000, + "position": 123085000, + "state": "playing", + "controlled": 123100000, + "error": -15000, + "settling": false + }, + { + "digest": "329b40f95f11841f1b4d642304b5d4c064fc9c05fc44859c54755e2603627d97", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 13200000, + "position": 123188000, + "state": "playing", + "controlled": 123200000, + "error": -12000, + "settling": false + }, + { + "digest": "e9153f5152ead640e6a0be69ea00b5fc38614e42904b3212e0f22efe78c13cf5", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13300000, + "position": 123290000, + "state": "playing", + "controlled": 123300000, + "error": -10000, + "settling": false + }, + { + "digest": "28305620bfb13a8a728df154cb17f981da3f61a39a04affa6d953fa74b4db007", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 13600000, + "position": 123605000, + "state": "playing", + "controlled": 123600000, + "error": 5000, + "settling": false + }, + { + "digest": "411fa02230a3ab75d0abdf160c41b1df9338e451f210336535112553e360ee37", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 13700000, + "position": 123706000, + "state": "playing", + "controlled": 123700000, + "error": 6000, + "settling": false + }, + { + "digest": "6a6a671a5fc6abf44a70e224bfa5974d2464050c70edb9186943bf6ddf474a11", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 13800000, + "position": 123818000, + "state": "playing", + "controlled": 123800000, + "error": 18000, + "settling": false + }, + { + "digest": "60cb3bb2b3b7e5e8215a213290474adfb102deefc15611fa358760eb95e12879", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14100000, + "position": 124185000, + "state": "playing", + "controlled": 124125000, + "error": 60000, + "settling": true + }, + { + "digest": "142e4c7fe0ea48229ec45ca4e429ea3b7e2a7edf7e6705f34a214532e90ebcd2", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 14200000, + "position": 124310000, + "state": "playing", + "controlled": 124250000, + "error": 60000, + "settling": true + }, + { + "digest": "eaa4ebb92967277fc5a6d2588a4d0a1ea0d0c7426e94d3d6f99119587dd2e6b9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14300000, + "position": 124340000, + "state": "playing", + "controlled": 124375000, + "error": -35000, + "settling": true + }, + { + "digest": "2d1444f5cce4d548ea21e7ae663331722b61fcff66bcdac28145dc8ebc121c39", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 14600000, + "position": 124728000, + "state": "playing", + "controlled": 124750000, + "error": -22000, + "settling": true + }, + { + "digest": "e192833f4aa3b36b8d696cc18a119fde084a4b2b4435e78b432e5d469d127101", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 14700000, + "position": 124855000, + "state": "playing", + "controlled": 124875000, + "error": -20000, + "settling": true + }, + { + "digest": "6a1ee9e122b08a3d5fad0bd31bdf86d0e3a341043bab8ac0726563d17dcce476", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 14800000, + "position": 125008000, + "state": "playing", + "controlled": 125000000, + "error": 8000, + "settling": true + }, + { + "digest": "6a0109dceb62a09135b8b1564244ed17267066f38f4bdf868d6174167bc5404f", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 15100000, + "position": 125387000, + "state": "playing", + "controlled": 125375000, + "error": 12000, + "settling": true + }, + { + "digest": "40063e5ad8634b21bf4ac5d42daa98aec4286d3d2d296e7f369292242772de2f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 15200000, + "position": 125515000, + "state": "playing", + "controlled": 125500000, + "error": 15000, + "settling": true + }, + { + "digest": "31c8e8ebe3292fe1d88d770fba0e43444e6431f624324dd52bcad5373bd5c879", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 15300000, + "position": 125655000, + "state": "playing", + "controlled": 125625000, + "error": 30000, + "settling": true + }, + { + "digest": "a8f78c2ee80e800fb895fb7ed3473c73e18a90ba304c384155b5a01b117be80c", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 15600000, + "position": 125992000, + "state": "playing", + "controlled": 126000000, + "error": -8000, + "settling": false + }, + { + "digest": "653e03f327027a2325d4a8f03f623dc0b64b34bb3a37bc19408eadabd984542f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 15700000, + "position": 126120000, + "state": "playing", + "controlled": 126125000, + "error": -5000, + "settling": false + }, + { + "digest": "1aef38924412df78118148ff7ef123f177e43f75a28fa662c295dde08fbc279d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 15800000, + "position": 126225000, + "state": "playing", + "controlled": 126250000, + "error": -25000, + "settling": false + }, + { + "digest": "502fd5b185ac8590dacdde29b01370638c4ad036967fbb5a2c67fb1ddceeb519", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 16100000, + "position": 126645000, + "state": "playing", + "controlled": 126625000, + "error": 20000, + "settling": false + }, + { + "digest": "14d372d970e2f93c298c57a090f8c23b6b639eebadc18cead1ad5f2d540febc8", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 16200000, + "position": 126778000, + "state": "playing", + "controlled": 126750000, + "error": 28000, + "settling": false + }, + { + "digest": "afd2fe122702fa27aad9a4f6081d4cfbb47d4535662f0b3c924958cb39f32589", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 16300000, + "position": 126920000, + "state": "playing", + "controlled": 126875000, + "error": 45000, + "settling": false + }, + { + "digest": "659c4046314e37ed6fb6ee47af5c980904361725be4a7ea681db34a5891d8597", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 16600000, + "position": 127235000, + "state": "playing", + "controlled": 127250000, + "error": -15000, + "settling": false + }, + { + "digest": "56bd4def121ec5890a290a3e5b8bcabf552d48d2ea6103d0181dabbf3eff7196", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 16700000, + "position": 127363000, + "state": "playing", + "controlled": 127375000, + "error": -12000, + "settling": false + }, + { + "digest": "b231e31592f8d535912eda687414ed9679fe55c30cbb842846e5be11e377a433", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 16800000, + "position": 127490000, + "state": "playing", + "controlled": 127500000, + "error": -10000, + "settling": false + }, + { + "digest": "9eeb6b8aee6eb366639c6bde5d686394b3c9ae741bde663cf6ee5a18fd0eea9e", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 17100000, + "position": 127880000, + "state": "playing", + "controlled": 127875000, + "error": 5000, + "settling": false + }, + { + "digest": "f26566592f3353a803e641eda1d5313bd10d067946397b0106989653c27c876a", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 17200000, + "position": 128006000, + "state": "playing", + "controlled": 128000000, + "error": 6000, + "settling": false + }, + { + "digest": "faffa8c10d826cb5f01c66573a6007853d99bafd314dd285f103f1a31b81e142", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 17300000, + "position": 128143000, + "state": "playing", + "controlled": 128125000, + "error": 18000, + "settling": false + }, + { + "digest": "d138dcc76df538cfc2d5fa7df3025266b83f57e3942e36e417daa917056dbe4a", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 17600000, + "position": 128500000, + "state": "playing", + "controlled": 128500000, + "error": 0, + "settling": false + }, + { + "digest": "2f994c01c77645be4cf04a3c921bd12bcbe15a47d249d52328c9351a8194de04", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 17700000, + "position": 128658000, + "state": "playing", + "controlled": 128625000, + "error": 33000, + "settling": false + }, + { + "digest": "38ee526c4637f1b08d3364d99d746cd48695c2f5cda4a4e69f245ab33a92baf9", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 17800000, + "position": 128715000, + "state": "playing", + "controlled": 128750000, + "error": -35000, + "settling": false + }, + { + "digest": "5030c59dba08db7a9d638e05f2a3b2011fa12dc806705031e7741852341b48ef", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 18100000, + "position": 129160000, + "state": "playing", + "controlled": 129100000, + "error": 60000, + "settling": true + }, + { + "digest": "0ff49d4e69dc6c79a2628c7818ecabf5c904bafb6dd888c8a54d2f4cfe51c25b", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 18200000, + "position": 129260000, + "state": "playing", + "controlled": 129200000, + "error": 60000, + "settling": true + }, + { + "digest": "d21d547642b741a81729f6b7b8e952c6cd0d6ed0ddd3fb0fd6fc14eacbc0748d", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 18300000, + "position": 129308000, + "state": "playing", + "controlled": 129300000, + "error": 8000, + "settling": true + }, + { + "digest": "7a5342de44fad548cffc0eb5209db440fba8bf6d4f35888ec9bc47d2b086e0c4", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 18600000, + "position": 129612000, + "state": "playing", + "controlled": 129600000, + "error": 12000, + "settling": true + }, + { + "digest": "b3c83a0a3f1fd99f1287ec3f7a771e94579db99f2dd19d2780f3ebf046e7e436", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 18700000, + "position": 129715000, + "state": "playing", + "controlled": 129700000, + "error": 15000, + "settling": true + }, + { + "digest": "3dd5526a844cdbf462b05fd305ec0e11d4686c4564f4b68931fa17df9372d73c", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 18800000, + "position": 129830000, + "state": "playing", + "controlled": 129800000, + "error": 30000, + "settling": true + }, + { + "digest": "185bd06d21988ed8a21a8e34bd9109fadddb3ef904d92b7e7d317546275b67ba", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 19100000, + "position": 130092000, + "state": "playing", + "controlled": 130100000, + "error": -8000, + "settling": true + }, + { + "digest": "e2ff4f034500e22e580745c2823173d44b131011f651f56f319f50b22332a64f", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 19200000, + "position": 130195000, + "state": "playing", + "controlled": 130200000, + "error": -5000, + "settling": true + }, + { + "digest": "bbf2355952fbe74d548f77f5d40752be6019241228cc53b03f089e1832e57f53", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 19300000, + "position": 130275000, + "state": "playing", + "controlled": 130300000, + "error": -25000, + "settling": true + }, + { + "digest": "07221edfb69b5e4f94dde2a42d98c64b79bb341798dd52915bc894c3bfe57674", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 19600000, + "position": 130620000, + "state": "playing", + "controlled": 130600000, + "error": 20000, + "settling": false + }, + { + "digest": "a3bec274594593f21f8ec9e77d4ab1f6899722fa2261633b7d967208643aba85", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 19700000, + "position": 130728000, + "state": "playing", + "controlled": 130700000, + "error": 28000, + "settling": false + }, + { + "digest": "cfb3029e1a4a5d6bccf7da281492bfd46e663239febaca779e9096676af707e2", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 19800000, + "position": 130845000, + "state": "playing", + "controlled": 130800000, + "error": 45000, + "settling": false + }, + { + "digest": "828cf2bea059d8f04e81ed584f63bd4720c5915e74a2f2e66b03d473252920cf", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 20100000, + "position": 200160000, + "state": "playing", + "controlled": 200100000, + "error": 60000, + "settling": true + }, + { + "digest": "57cdfbd20eeca6fd1a5f45ff6899ddae359aeacb02d750d2802523ba335b2e30", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 20200000, + "position": 200260000, + "state": "playing", + "controlled": 200200000, + "error": 60000, + "settling": true + }, + { + "digest": "33cec905c73b2d83f38565eb4e0095bda2607e4bf9ec416a2e1f9dc2086b2834", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 20300000, + "position": 200290000, + "state": "playing", + "controlled": 200300000, + "error": -10000, + "settling": true + }, + { + "digest": "6a66809c152ae8099308a66651ee44ecf4011d111a34590dc437593d1d1011fc", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 20600000, + "position": 200605000, + "state": "playing", + "controlled": 200600000, + "error": 5000, + "settling": true + }, + { + "digest": "6eb76511a1fa57ac9ce02e00233fe4d2c1a076400e899907db17f524ded15bb7", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 20700000, + "position": 200706000, + "state": "playing", + "controlled": 200700000, + "error": 6000, + "settling": true + }, + { + "digest": "13268b27b13ff9d2e2c5be9b3f82113df29a71966e2e4951f2424dece1611cf8", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 20800000, + "position": 200818000, + "state": "playing", + "controlled": 200800000, + "error": 18000, + "settling": true + }, + { + "digest": "b87b47b3ea8ab646335567c10aa14652e4ecbc5c4e417c2d5fb23cb994b69d02", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 21100000, + "position": 201100000, + "state": "playing", + "controlled": 201100000, + "error": 0, + "settling": true + }, + { + "digest": "967edf9ba5c81812ba8523e56cdca7f2bf7bf56b17c991d6ccdb1a2f34d96e89", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 21200000, + "position": 201233000, + "state": "playing", + "controlled": 201200000, + "error": 33000, + "settling": true + }, + { + "digest": "c9c0bff7e56dcc3f187be1f25a923835b9d9c711e8ecd8ad48d7483b2786fedc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 21300000, + "position": 201265000, + "state": "playing", + "controlled": 201300000, + "error": -35000, + "settling": true + }, + { + "digest": "7de553f590cf69ea3998ccfeb46207ec1b5742489eb8f4e77072eee3976241a0", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 21600000, + "position": 201578000, + "state": "playing", + "controlled": 201600000, + "error": -22000, + "settling": false + }, + { + "digest": "30e6e7a2ec1933ffac74471c89d7cb7f52305a181a089a555278ee2092a44d4c", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 21700000, + "position": 201680000, + "state": "playing", + "controlled": 201700000, + "error": -20000, + "settling": false + }, + { + "digest": "2c41c6e65b823c97a3d5c3d9dc1cb91a6f5417d8ad4ac46d6d5a248de0f19a3b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 21800000, + "position": 201808000, + "state": "playing", + "controlled": 201800000, + "error": 8000, + "settling": false + }, + { + "digest": "fd865b3e3fc06e88a1244c755b877f1298b0d10876101f36b5bc1e9c0f775b00", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 22100000, + "position": 202112000, + "state": "playing", + "controlled": 202100000, + "error": 12000, + "settling": false + }, + { + "digest": "385f4cb1941ba16c98116ea2f6a8cc6a8d36cc5ca53cac80bf79b85d8c198291", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 22200000, + "position": 202215000, + "state": "playing", + "controlled": 202200000, + "error": 15000, + "settling": false + }, + { + "digest": "1de2ea3077f7e90273c32256decbbbdaff4b73980208647812d0a0a414702ec7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 22300000, + "position": 202330000, + "state": "playing", + "controlled": 202300000, + "error": 30000, + "settling": false + }, + { + "digest": "95412409ae1085d8c2c439fbedbc85d1ce6487e1a057644845ea0544168eefc7", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 22600000, + "position": 202592000, + "state": "playing", + "controlled": 202600000, + "error": -8000, + "settling": false + }, + { + "digest": "960bfaf1000eb6e6ff94ba636a55eeca5c354376dee15a0b90e43e2a87e6ceb8", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 22700000, + "position": 202695000, + "state": "playing", + "controlled": 202700000, + "error": -5000, + "settling": false + }, + { + "digest": "979cbebd0fa4f943d4ee9ebd6dab12c17f9d3d3b2dac3236083024f00d06ceb4", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 22800000, + "position": 202775000, + "state": "playing", + "controlled": 202800000, + "error": -25000, + "settling": false + }, + { + "digest": "2281da4bc841f292b3261b46c44d7c8c1dd697f63de239c8e2c2d6fafd9ab0f3", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 23100000, + "position": 203120000, + "state": "playing", + "controlled": 203100000, + "error": 20000, + "settling": false + }, + { + "digest": "9c1f21d94cda739b62dfd8dd232c7c0f0f7c56c3c3fd11d25eb604c1d4dd5022", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 23200000, + "position": 203228000, + "state": "playing", + "controlled": 203200000, + "error": 28000, + "settling": false + }, + { + "digest": "a1620a12b27caf6e4895c58f6e9ad83f5c2e42bbe17c338aa6b7e120f32db48b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 23300000, + "position": 203345000, + "state": "playing", + "controlled": 203300000, + "error": 45000, + "settling": false + }, + { + "digest": "8ebdd846b60740177f921f9106a689523128f11cc88e81ad3e2f152f74cbb3f4", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 23600000, + "position": 203585000, + "state": "playing", + "controlled": 203600000, + "error": -15000, + "settling": false + }, + { + "digest": "370516b367c5bdf7dcc3a245db09b95140a57e746e785d12838751465cdacf49", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 23700000, + "position": 203688000, + "state": "playing", + "controlled": 203700000, + "error": -12000, + "settling": false + }, + { + "digest": "9c55b57f043ccfe860fec2d1b3269b8acd720084d70dd55c1a840774594f5af7", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 23800000, + "position": 203790000, + "state": "playing", + "controlled": 203800000, + "error": -10000, + "settling": false + }, + { + "digest": "bb133c2e1e6bd4cd1d7c3d739755c9c17d708bff659bf7bef4b611ea71398398", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 24100000, + "position": 204105000, + "state": "playing", + "controlled": 204100000, + "error": 5000, + "settling": false + }, + { + "digest": "51c2cc3c62155182bc271905c293840041eeceb11943c8e4b3b4a5b685fae5dd", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 24200000, + "position": 204206000, + "state": "playing", + "controlled": 204200000, + "error": 6000, + "settling": false + }, + { + "digest": "54159ee800aa6d542899377d01edb0de2c1592937f74b64ee18dbf70f98d914b", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 24300000, + "position": 204318000, + "state": "playing", + "controlled": 204300000, + "error": 18000, + "settling": false + }, + { + "digest": "6aaa3808fc1eddf32f957c23972fa1eb07d48707fedbc989358e7d48d57f9504", + "player": "3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74", + "at": 24600000, + "position": 204600000, + "state": "playing", + "controlled": 204600000, + "error": 0, + "settling": false + }, + { + "digest": "99d5be25bddd35c73c9fcf4cc4b0f780b11b4b361b6d1329aebe3852678267ae", + "player": "76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b", + "at": 24700000, + "position": 204733000, + "state": "playing", + "controlled": 204700000, + "error": 33000, + "settling": false + }, + { + "digest": "b78282fa2346cabecc262cb34fc9bc8eb06e74dc4b3fca837077f44cb0886ffc", + "player": "2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a", + "at": 24800000, + "position": 204765000, + "state": "playing", + "controlled": 204800000, + "error": -35000, + "settling": false + } + ], + "skews": [ + { + "digest": "9019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee91", + "from": 0, + "to": 5000000, + "viewers": "unchecked", + "pairs": "unchecked" + }, + { + "digest": "87ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904", + "from": 5000000, + "to": 10000000, + "viewers": "unchecked", + "pairs": "unchecked" + }, + { + "digest": "e2753608d741db550a20580b3eb913020496b223e2624b23dfde3b2cfd5781d9", + "from": 10000000, + "to": 15000000, + "viewers": "unchecked", + "pairs": "unchecked" + }, + { + "digest": "f1ee0a55bffce0700b1c53ecf86406dcc65b75da0526a3dce55d917cc7286455", + "from": 15000000, + "to": 20000000, + "viewers": "unchecked", + "pairs": "unchecked" + }, + { + "digest": "88e56ba77305b1cfbe7c679b576c66a4b6e2fc649d31f569ff5c77fd85ee29f3", + "from": 20000000, + "to": 25000000, + "viewers": "unchecked", + "pairs": "unchecked" + } + ] + }, + { + "name": "control_without_power", + "about": "the late joiner, whose grant carries no watch_control and no direct power, pauses", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000016f5cb148515f3930ddd8a2f9b46dbc8cdabd7add6add7bfdf65e6c35f4900325d0b429d998da19e403fa820698b88b01b930886ffb0f018c217efa27601ed503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197603000000000000009019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee9140bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000050005000100a8610000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000050005000100401f0000401f0000401f00000101000101006842000068420000684200000118935505f8cbd060c6b268625bae6c32609efc2add6e31160d31d75a6aa2ffd48d39ccdd13abc0cdd907c9be7b41d5e2bb4cb2daec5d1b70fe434b00fb8cc105", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976040000000000000087ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904c0d8a700000000000010400076cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bdca9ac16f9034e41a46cbc4630d84eac6c5b8ca2d18ade7379580b0358149d1e5312a9d99529751527b23ff0cb122eed0059a62e701f0d3fa3d9c061b87a7a1066f5c026cfa99ffa91ce6a4fd55073be16a23e324361ffad8c52364e9aef0905" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000009f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290073550000000000e0142e00000000000140420f0065840a5af706dcbbcf74a13e54d94e49ce748fe81249e442235a91734a4f487cbbf5fca2d4d6cd5ee7d02876642aa1c3f0e172c67f5376fe3688f98b263a780ecc956f634aab4fc13dbdd131b6351efee63216ec8609331f2afd03d86c33444d7a9fd8f4ad494ae512b570aecdf4fe6df2256a17d9bf46c92cbcf8e3a71bee0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b00000000000000d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab60b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920145d0000000000a0cb3400000000000240420f00f4b6fcfcacd2be483d30bd8f08edec092f4e189e106bc2157780a9791128edf13b47fa619ff7282bfefc49adf6bb93ced1808a2bb9803ad43f3fdf643d9c350fec71bfafbfa91eb693e126f7a9508227179772d4c24e9e99e02b1a9978699011073776ecf239a35efb7037b24edcd6e2d60852c8d537b3d2fbffaea7b0ea9705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d780516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940b5640000000000c8f43300000000000240420f00b12f36c09beda6c8541a0d4f495d6bd002341b812144458a4c504e06208a9c7643a0aba2fad19c814e56b9c1746bfedd63a217f839ed9540980d6ad14e937609c2d01edb9b8af1dcd6325e3c5dae4fc79d96d0d2c2449c39ca941eb9ec0c66b22081acf13c2519239df4620e5e444df7e20e14177d1b13916968dc5e05cc1d0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d00000000000000e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96a0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960566c000000000040e13300000000000240420f00bf4dd56a942bbf8f0034ae912c653815719e37d32efb6d133f94a08daff4e7c70f129401b1fa9131ba0d17058e9ba2840d3d975a953dd23f40629e303f3f2d013e5e778d56ba8629e6e40c41a4494e2eea6ff7e51d4300bc2ec1739028de379fe7d4ce32aefdfd525761b6061e13c0aec75f63b1a6e5f0778e6dd11a96784208", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e00000000000000219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6c0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980f7730000000000508b3300000000000240420f0046f09bfd4477030c5df8e8a1e1b1c279f67f33643052af749943e8d9f51e2d5b47b86d2fe1d33a7350a0faeabee46830e41f968351e0d9c145bdcffa46e9c5085ce83272c7d95e4dda94414d7387786f74841e62ec9d993a13445028b6e02e6f8cbc0eb8c8d2a3bad09b10d002117aa2a50519f1caab3b2fa270fadeeb460602", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f0000000000000032293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ade0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0987b0000000000405236000000000001f07e0e00a0ae094f04dacd8dbc424830ecc3eb8c715c959b462df34dd8348f1704ff9b516f1e66c04c1e470c478c7c60ac48695d378cef50787a655d9c3e7129b19a2907d9d703ad0507ba60314166290095b54520e5bfca8de81d52a6059a3ccfe81bbd8b8c7acb1940ca799930181d20dd662dc02a974dacb20d8f2d8e14796cfed50a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d308800d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c039830000000000c0e93c00000000000140420f00142d3de1e316c4a3300ea65f7122bdaacf13b879a440837fdf3ba6e51eca02bfd9aaf21c606ac9149c92b0c318123b551fa1bc0f398bdd125cda960e5b73220d8070cc8f713ff8ae2f6f4bee3aabbd5a1b38b7d2e518814b92393eb76e73448b1f387b7a74052fc06416888b3f6f0e01a7d28ae537ab37dd29e32ac1a72ea60b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74110000000000000008ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc4054890000000000000116005758433101038096980000000000000e270700000000ae5701a262b0cf24ce4fb872db4551f3a956eadcd2e7d1b616606e35344e103cddbbd66e0b6c2aaa860f0d9cb4d17a2e0587c30a0a6eb1fc03886040efa79a05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7412000000000000005b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d20778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0da8a000000000040f84400000000000140420f00442df02d81d38deabd35d6c857e4dec007ff8f8ee09e384028244365cd25c861abdad0506bb9502fa7e03b79b43004fb5ead2509f37c734ac91ff2091f4184050c9c7ef822fec62e15e2e9c621c858dc893dac1fd4ac43757a92297b8a8b7133cd6fba3e3fdbb4a4ec2c598a45675cb1081a041b01e62b9b74c5045532972f06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7413000000000000007c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a6240189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007c920000000000a8104c00000000000140420f001376c093841a1cb4776ef8a0c98bb620e5a26462d159ac2fbd653095fff5855b0dd063d322521c81aca137e1255a4cb5f08ef2de9f563f79539ab011b871f90ba7898203b8b68520c59d11a92cf846d3532a8d8c73a92de7485bcf3faaadb5beb9d3b86aafa627494e2233c654e986c65c95279676e084d27a02bb18119ae200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741400000000000000f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e9960b99a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429201d9a0000000000007f29070000000001f07e0e0028bab8c023c8e42e71b09a2343743db6a0a3936bd247d43eabf20aaaf51facd27baeb552028ea3ff37e4f9dfe6e38d4427867dadd24fe3cb82a7b6f7771ee705fcc145a29b196ab70a0af94194fefa0236a91ee1e57e9392eaa93a104f290d80bcca30d4abd8f241d4d7c4c642f5945b08cf1c3b4f1abe9038082157b5e19601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621805aa200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940bea10000000000c0353007000000000140420f00072c0d7fe03cedd52ead106afab83453d065775f2544463d60666fa010a05f5a65e1be2dce7b1ef8dc9e80f808f1e6147bd433efe2fd46ecd4924d07bf27650b5861742c07262f099f3c3642723d594f64017cd4a2b71d374b35d6e24a0526f75835171ce197d9a5327c71a69fc81ae76083f850649eef71017450be0982f909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741600000000000000cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708a0fba900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429605fa90000000000f0803707000000000140420f00af51d8538ac954f058baeb49077d2f43242345618bedcaf2198f6fae4096d7272f12221deb7f1da5176e9ad40f4f2905b1bfa2550be5e4bd129df9017ef1750d587f4c4373636257d810446655b62876ca93258393b411853175679db0c6501198e41203443c61209352d6fc119e8f0d881a8d47b3eac5716ae491d3faf6fb0f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a000000000000003f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294080580000000000c88331000000000001f07e0e006909704cfc274af012c4a108ac7c28edbda13b9b91c003e8514c36acd143d46b14ae8c18cc0d53deb3f5fcad0d70cb0a4129076597dc6ac6bd97b74cf381990835bded47645025d36a3148f2f10389088482feefa8d174945ce04c5a276aa2dfee675addcd0039ef503c66a9b8c139d5063362c92a50a85175ca438f70eb1206", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b00000000000000b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602160000000000030ba3300000000000240420f001f3ec1117c1753fc4dc73ccf079789551ae7e26cb2a0f8d015897b60e947993252204d48a39839b784c778e31321a362531233e729d6410ae5c4152896e07405e00b873aeeaa24e8035052240f94b43324639afd785b07f40b298b7c5099f3b9b755c188fdcf248fe36e88a338b62e844b5bacf8662f56fd24498f00eafdcd0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c00000000000000d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ecc05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980c267000000000090273400000000000240420f00c464eac72dbaca39074f87b03b8d3056428ed16fdd763264d039e56e9ae52a5cc36eeff66e53752c6e6d85845066531a283e9ea4dcc1119c6fe08f8da16dc50279f7165360d69b26b07ab11557817b0bc78908479677fb107a74b2e7535a5b91696f506a08b8a9c610494571694fdadb3ef83f0886ef4d5f0214b9f1366b6707", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0d000000000000003947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246a0636f00000000000001160057584331010100127a00000000000000000000000000b7e970e6f92a4d995ae02de5082af3f4463021f611fd83403a9efd12b312170c13fd4facf7e531d22070f1635e23184e6e3f8018c0bd603036d0b9fb97e52409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0e000000000000007d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03e0ff6f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0636f000000000088583300000000000240420f006ee84a30bc8d07647fc9c0687d0ebbdca65cae76740c3e300f7f02a3cb488847dd96ea0adf55ef5fec7d97d60e2cb6eb3ebe2642dd20d5b25cff52b895ff3701818a1e586152d1f92eeca964c7f1c5f1375d4390ca267b7deefd72edfaa1099edc82e46fa9d9f2768ffc6e62d0673c6b97036ee2835e0b26fc02e476e3b22702", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0f00000000000000a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f500a17700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00477000000000080003400000000000240420f00c704c4a7d0db41af6f9a93aaa0e092d5e1376974d95759b4e29a0b417180da3877fc77d8067e4bc175d56ccbdc977588f76183761533fec29fc3d1154b464605de8fc826b0ad8690503a77632292a79b469aa7404b840ee4595201d97847e5cbeff1adc22e6a7d4caa5c6bee3aa2bb5b52bd9bf989de0ab9abc6f05666dedd04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a10000000000000006cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b20427f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0a57e000000000050ea3800000000000140420f005e4eeca8bc2379da8fa6ba264cab932a70d3e6092e3f42f957ddbfbebdcd0a231c91d4b45b4647277d7f01294df1e5b8c68375fd7672cd095ec8fd925b3af20b49e4feff3b1bea5927e41d0f0e29f9f11f60b6718a78da8f752dc295d6e0dfd4949de227a5064a04883afa70b37ad913df259af0acf2015d2edc94620ff24901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1100000000000000900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb742940e38600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429004786000000000098b43f00000000000140420f007b022b7b5973aafb4b0f614d7975986215ef7383c695089daa2054353a9fd1202196d22ea987692710d3ec178d1e82d05d6a17c9f429698a1cbc77500a4dc20ac43c01e8269f325daddb4605c83e9284247e710d3750eefce6ffe6a53ace2b1caa97120926e02f4e740659e0d0b461b33f05bfee61ce9521f482101c7e0dff0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1200000000000000ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e021160848e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920e88d0000000000286748000000000001f07e0e00989ec0a78952b2f08e0e2c397ec23ea9faac43007769132dc671afa82459d4700115c0d955e71f88f5af3608ccd3a0455a5e9c0f8cd533aae906bc8d1042c106d358c34d5c409d5747427975dbbee1c4fe239cae05d754d66db883c86fcc2645916d9395c02627933e7536e98d5e2ee351731c4bf0b7396ba6d02d73ea861d0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a130000000000000042e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da80259600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429408995000000000070314f00000000000140420f00e5d4eae0507399eff4ad8cbf499db206392e27e01d325a0ac953aeeff3ca3ca52ee6f4ca22689cfaaac6c68956f36b84fde1df9a39b08f51698aa6de831b5c0bc80bcf2877bd1cc821c2b36a7aee3ce36788816d874d01cda2392595caa275ccb33863c7acde77feccc43048c932806431e34ecb723dd4594f3aac194fea7b0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a14000000000000007e364c445a1a6a1846c9640251e96bb3c8eb397bd1e7961b55c4ecc1240e1308a0c69d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602a9d000000000030e82b07000000000140420f00cd80df3aea98e0a067eb6781459c42ec2f912a95af97211c0b851318a170dd3e71553e9c14270c801334c994af813f173b3e3983ba2dc1cb6d877470ce5e1d0fd40a10909d363edf9552e0535b5bfc06d313976a5e72242a3d37326cda8ac6824cf73592fbcb58fe8211f31c4b83e34c8d1d38f4a4458f8b61cd9e67a99c8e06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000bd7db5754d988ce9d8a727bcda41e64478fcbca520057a19e7392b7e70792841c067a500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980cba4000000000048ba3207000000000140420f005c48a1317028b58d49bddca85d040ceadf846b6741170125ac70ada35168ba9d8330ca638bd36ad968d64eaa92609778d73bddfb0e16abdf3bbd9e2a6ada970f4605bc367f8dc15340435c6b9eac2485ee42ce3f44fc670221f8042d3d3e5cf92b1cb559beba778dec4983e527823ce294439cb704d4040469d4a2b805617a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a16000000000000003e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754e008ad00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a06cac000000000060033b07000000000140420f00ab243f955e937b280a8e2cf536a2fb5afb3466c83e9d130ef3955c8baf6493ff1644ccf91ceff646811a7697cd2e575f95bc3ab3c71ee21b4a999f3e6639d20fca6ebba073588611d8e81fe4af368ef0d8f23699b744037fef25ad2ed6f8891a7e29883ea103389c4ae6abda9b4ba96f9c2fabcc74ee5b598b5fe2ce9bd5750d" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b000000000000000000000000000000000000000000000000000000000000000000000000000000004082ab00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bf7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900e6aa0000000000e00b44070000000001f07e0e00a318339d7ba3848356d409d4a93be22850d7d4f44f2b35fff3276809d9ba1c25a4afe39499b842a47c397326107491c8053415839416fb3bd7307605311b4e0a29fc56c3ab8b624fb87b9dfcaba6dc15eb9abde679dc8eae3fae4bb7225b5b687f10aaef7d5c0b9c6d18f978ccc8618f6e3ba9047a18fbc5d1aacf13cfd86708", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0100000000000000b00a70b835347ab9ab8df49339ee93c8872a76a47f11caa3a9c1c51b2ea53317e079af00000000000001160057584331010220bcbe0000000000000000000000000091429dbe50e31f2c90e971cc55f8626128361030a18bfdc8068c88ed81b838dfa9bcfb9d8f157805aaacf2eef50eb6b0d6e74d01a71fcae5925c06e4a2ecc10a" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_not_permitted", + "at": [ + "record", + 3, + 1 + ] + }, + { + "name": "control_beyond_attribute", + "about": "the guest, whose watch_control allows play and pause, seeks", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a700093d000000000000011600575843310103404b4c000000000080c3c9010000000077f806fe7c52ceac2ecf89da34c6577d35129894dffa8ae0a38ab4375bc6fd3dabcad1b7d7b77ca7bf8165c5b51dd82281096011abe71a16f2c0301f82d1ae0d" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_not_permitted", + "at": [ + "record", + 2, + 6 + ] + }, + { + "name": "control_in_the_past", + "about": "the host pauses at an instant a second before it sends the control", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310102c0c62d000000000000000000000000002429c35bf79dcb6138f46061a309c13109a6a06f4c87136769f3a6aebd87e9878a34628bbe40debe31a706940c700c380cdfc9a174249860ee700f1ebb984106" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_not_ahead", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "control_short_lead", + "about": "the host pauses 100 ms ahead, under the policy's 500 ms lead", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310102a08f3e0000000000000000000000000040d23e36c6fce7206855030a9c47351c31adc3b22576d59db73e3b9d0fc0761434e75b2e6b5365233716872aac83070cc5dcde714b8021939c1e9d02b6ec9201" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_not_ahead", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "control_beyond_horizon", + "about": "the host pauses eleven seconds ahead, past the policy's ten", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310102c0e1e400000000000000000000000000c2da0429dfc19f644e3aacd95550979a08640e4f24c625f67d9145dbde90553881ddb27f2b8de6624db2cdcab91ca69629a3cbf183f387e32a49573db84f1301" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_beyond_horizon", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "seek_past_the_end", + "about": "the host seeks past the source's duration", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310103404b4c000000000001a493d600000000cd688bc8094eceabc29b89d785c52318071ffdbe9be9600363c0e00eef3ed179b17929f606d5df03644e3afc2d424e9f2bdaad8a0dbacf70cd79ec98a2112203" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_out_of_range", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "rate_above_the_limit", + "about": "the host sets three times normal speed, past the policy's twice", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310104404b4c0000000000c0c62d0000000000748141a1929f7320eb70c78559d867773e2edc093e0adb99363a84693369383a4ec8efab3600b503dd8749f5e37394d8e68909371319ca8124f9b130a9888d08" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "control_out_of_range", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "control_unknown_action", + "about": "a control of action 5", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310105404b4c00000000000000000000000000fc3e0e48b47615d906e144507ceb917c128f3058f06c5a64173cfa36e18096295e43254d4006883e59fd3e1f48fc3e076e051589ef5468cca5a5310edbea8500" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_statement_malformed", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "play_with_an_argument", + "about": "a play whose arg is not 0", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caa00093d000000000000011600575843310101404b4c0000000000010000000000000039ccebea724f8afa76eb2ab3fe971b40ed08ded1fd382dae17a414a6dbc04f9be767a7e97c7c262cff01137db2cf4a2b44564cbba08fc87d017866d23387b504" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_statement_malformed", + "at": [ + "record", + 1, + 7 + ] + }, + { + "name": "control_before_joining", + "about": "the late joiner sends a control before its join: the room refuses it", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000404b4c000000000000011600575843310102808d5b00000000000000000000000000ae062f55a675acaceba67b5200284aa0b50647c58f664fbcd1a8bcbae1bb7149438c4da70eb682a5f0c5cc4309321a063a15dda6c8f3c6a1ff9c0f551b5a8d01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "not_present", + "at": [ + "room", + "record", + 3, + 0 + ] + }, + { + "name": "statement_of_another_player", + "about": "the guest's chain carries a statement the host's player made and signed", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f001f42178bef05ebfdf820d77b582641fb150d81f244ce268f9fd79f0ad38d44c40b9f89186941eb0307f2c0c7bfa28691593dd07bf2b8531f73ebd8b0b9e0c70da4cb597878edac1b85da32206ce2b295dedb978d2eb880a441a0b56603b55c19a6eddde9c516267083883f307d842d6e38da9847ba46491f1dac7c9c3177c406" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "presentation_wrong_key", + "at": [ + "record", + 2, + 4 + ] + }, + { + "name": "statement_signed_by_another_key", + "about": "a statement naming the guest's player, signed by the host's key", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f0064036f779807ef53e7ed4e93f9c3ff3861cf6473085ca5511fb605c2188e6d65a04f31279ca4e3cdc9cd69fafe4968961fdfeec3535f97832dbcb95bf5bd300eec2ffac0e3f1d94c4a69145ba3d079789a447387d8ff308e903ca12d91fd5a47e5291f6aecb683a22d856eae8f8c8820a2f23e445b406c81a8b607f839e6f70b" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "bad_signature", + "at": [ + "record", + 2, + 4 + ] + }, + { + "name": "statement_ahead", + "about": "a statement whose instant is a second after its event's", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292039420000000000b0f40a00000000000140420f00370a286afa854493c69715bba141ba4391c30de83fb26bb14a611a52f1e2473d577022b836ca8e908770bff0003cc466b667a88826d010e1eed6f3189a34600546000469058c7464f007ac2245cd3f04aa50b4a549c232ed52f2f004d0b8bf567cf2573e54e7adee2cd66b613554deb293d2170ef5b0a38694620da470daf109" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "presentation_ahead", + "at": [ + "record", + 2, + 4 + ] + }, + { + "name": "statement_of_another_source", + "about": "a statement naming another source than the policy's", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1d7afe1cfd6b41cc35a27630d7988d016991f9ba0b876a6b5671052cf83ee00fa05a320000000000b0f40a00000000000140420f00feac6bcadebd56852cb5a1703d99977f0826119874958e4d26d3c41512858b2933a8f0e763b74c0ef13552943fa392954eedfc2a626dca5b7b57da612b21b10cf640c716d54bacc3e98beed0bfb3e817c21bf267f1556369c81534324bb073459a73269b8b02caa828e45d57f6d4057355f920e0a69e45964729d7a378e1f803" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "presentation_wrong_source", + "at": [ + "record", + 2, + 4 + ] + }, + { + "name": "statement_bad_state", + "about": "a statement of state 9", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000940420f0026ea46f216136b02e18dfae5735b43b2536d907a82e29352f404698dfaadda518b88d700e2a97b6b8e15e0fb26ce9d2afb23a065fe3e614a216334676caaae0ec63884f28f7b9f0a58868fbc97165aca5359d097d6f246bb3e6796024db21255a091d65cc02e33fbf19a9a509a21f3ff4cf5551b4d403b17b8b960c9ce15ec01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_statement_malformed", + "at": [ + "record", + 2, + 4 + ] + }, + { + "name": "statement_by_the_clock", + "about": "a presentation statement in the clock's chain", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a1c0c62d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429b09f2d000000000000000000000000000240420f0065deeec292344fc421eb053feebc99ab39534a63c2ee6c8e0bdee1bf5e61bfd4e93381961b402124a713cf1da1111e7a03049d509b70aebcb345cb563b31f706506f3abf7eaa40876b2b39e0709182873a4984ad616af87843afb8c20c57e8d5c45e4cb43b78d05544712ad0c6b8024385059648169d231d120502d338bc9205" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_not_permitted", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "skew_does_not_recompute", + "about": "the clock's statement of the first window states the first viewer's 95th percentile a microsecond more", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000411f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f055000001010001010030750000307500003075000001abd256bc4d5263001d2487fa899538bde72ea6c4df8fd37359570fbafe2bc3e353c4a8252c64feae5cc8310ddaedce99a01ccf93b0023b488691107bf69c390b" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "skew_mismatch", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "missing_viewer_in_sync", + "about": "the late joiner states nothing, and the clock's statement of the window from 10 s states every viewer in sync: the late joiner is unknown", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000016f5cb148515f3930ddd8a2f9b46dbc8cdabd7add6add7bfdf65e6c35f4900325d0b429d998da19e403fa820698b88b01b930886ffb0f018c217efa27601ed503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197603000000000000009019ab1555b7d7a7e678c87ad0ce47e1fbef9cb1c14a9744c519cbbd1ba9ee9140bea100000000000001a30057584b3101404b4c00000000008096980000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000050005000100a8610000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000050005000100401f0000401f0000401f00000101000101006842000068420000684200000118935505f8cbd060c6b268625bae6c32609efc2add6e31160d31d75a6aa2ffd48d39ccdd13abc0cdd907c9be7b41d5e2bb4cb2daec5d1b70fe434b00fb8cc105", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976040000000000000087ec65eed609304f355d0c9a99b69a909c0f6acb79030603938dfbfbf177b904c0d8a700000000000010400076cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9bdca9ac16f9034e41a46cbc4630d84eac6c5b8ca2d18ade7379580b0358149d1e5312a9d99529751527b23ff0cb122eed0059a62e701f0d3fa3d9c061b87a7a1066f5c026cfa99ffa91ce6a4fd55073be16a23e324361ffad8c52364e9aef0905", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760500000000000000d8a2f159e989c1dace319777073ba230ef76ddc98bb779205cfc705674e961838009ee00000000000001000157584b31018096980000000000c0e1e40000000000400d03005f032c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1f0000000000000005000500020010270000a8610000a8610000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd742000000000000000050005000200401f0000983a0000983a00000176cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b0000000000000000040000000000000000000000000000000000010300010200881300006842000068420000010002000000000000000000000000000003010200000000000000000000000000000352c3f45711242dd59590df3e5ad8ac7108b1c0625fbb5451dc796da5f5f6111e93b4f765fbf3893369efd08a66c696fd76f76405dc7de054d549d0237826c606" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000009f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a400f5600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290073550000000000e0142e00000000000140420f0065840a5af706dcbbcf74a13e54d94e49ce748fe81249e442235a91734a4f487cbbf5fca2d4d6cd5ee7d02876642aa1c3f0e172c67f5376fe3688f98b263a780ecc956f634aab4fc13dbdd131b6351efee63216ec8609331f2afd03d86c33444d7a9fd8f4ad494ae512b570aecdf4fe6df2256a17d9bf46c92cbcf8e3a71bee0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740b00000000000000d881ee2661f0f2da9b92c039ad709ec13041fcf85dd755fe79d1cc9c645e42ab60b05d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920145d0000000000a0cb3400000000000240420f00f4b6fcfcacd2be483d30bd8f08edec092f4e189e106bc2157780a9791128edf13b47fa619ff7282bfefc49adf6bb93ced1808a2bb9803ad43f3fdf643d9c350fec71bfafbfa91eb693e126f7a9508227179772d4c24e9e99e02b1a9978699011073776ecf239a35efb7037b24edcd6e2d60852c8d537b3d2fbffaea7b0ea9705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740c00000000000000f1d7bbb739fc70aa5e96d8cc89de61cf2b9f701815e0a1755220146b2f61c6d780516500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940b5640000000000c8f43300000000000240420f00b12f36c09beda6c8541a0d4f495d6bd002341b812144458a4c504e06208a9c7643a0aba2fad19c814e56b9c1746bfedd63a217f839ed9540980d6ad14e937609c2d01edb9b8af1dcd6325e3c5dae4fc79d96d0d2c2449c39ca941eb9ec0c66b22081acf13c2519239df4620e5e444df7e20e14177d1b13916968dc5e05cc1d0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740d00000000000000e9953a3c42700cc52c681370f3cbff8cdb253be2ac9d3f3acf08e925a283ff96a0f26c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42960566c000000000040e13300000000000240420f00bf4dd56a942bbf8f0034ae912c653815719e37d32efb6d133f94a08daff4e7c70f129401b1fa9131ba0d17058e9ba2840d3d975a953dd23f40629e303f3f2d013e5e778d56ba8629e6e40c41a4494e2eea6ff7e51d4300bc2ec1739028de379fe7d4ce32aefdfd525761b6061e13c0aec75f63b1a6e5f0778e6dd11a96784208", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740e00000000000000219e626c031afdbb16fa6cb2d5f1bbc591007aa357e04e9c26ed5736d07544c6c0937400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980f7730000000000508b3300000000000240420f0046f09bfd4477030c5df8e8a1e1b1c279f67f33643052af749943e8d9f51e2d5b47b86d2fe1d33a7350a0faeabee46830e41f968351e0d9c145bdcffa46e9c5085ce83272c7d95e4dda94414d7387786f74841e62ec9d993a13445028b6e02e6f8cbc0eb8c8d2a3bad09b10d002117aa2a50519f1caab3b2fa270fadeeb460602", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740f0000000000000032293a32404de15eadb4df47967b18ba44790a63667b02b6505e70666ffa35ade0347c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0987b0000000000405236000000000001f07e0e00a0ae094f04dacd8dbc424830ecc3eb8c715c959b462df34dd8348f1704ff9b516f1e66c04c1e470c478c7c60ac48695d378cef50787a655d9c3e7129b19a2907d9d703ad0507ba60314166290095b54520e5bfca8de81d52a6059a3ccfe81bbd8b8c7acb1940ca799930181d20dd662dc02a974dacb20d8f2d8e14796cfed50a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741000000000000000f382bfaefb648e95d3ca47cccf9a59f53e0f40a10aa5252dbb2d9ac99f5d308800d68300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c039830000000000c0e93c00000000000140420f00142d3de1e316c4a3300ea65f7122bdaacf13b879a440837fdf3ba6e51eca02bfd9aaf21c606ac9149c92b0c318123b551fa1bc0f398bdd125cda960e5b73220d8070cc8f713ff8ae2f6f4bee3aabbd5a1b38b7d2e518814b92393eb76e73448b1f387b7a74052fc06416888b3f6f0e01a7d28ae537ab37dd29e32ac1a72ea60b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74110000000000000008ae8e9f2882beccfb8f8de2728e1a7dcc371d8524781c0cad497de7c30c83cc4054890000000000000116005758433101038096980000000000000e270700000000ae5701a262b0cf24ce4fb872db4551f3a956eadcd2e7d1b616606e35344e103cddbbd66e0b6c2aaa860f0d9cb4d17a2e0587c30a0a6eb1fc03886040efa79a05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7412000000000000005b3251d3f3e2ae398375711dc10c4674947fa896ae45722082ff70a3b8162e0d20778b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0da8a000000000040f84400000000000140420f00442df02d81d38deabd35d6c857e4dec007ff8f8ee09e384028244365cd25c861abdad0506bb9502fa7e03b79b43004fb5ead2509f37c734ac91ff2091f4184050c9c7ef822fec62e15e2e9c621c858dc893dac1fd4ac43757a92297b8a8b7133cd6fba3e3fdbb4a4ec2c598a45675cb1081a041b01e62b9b74c5045532972f06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7413000000000000007c37720a7bad18d529e20a5cd6e3fb47feb315f0a06297cc402821ece8b32a6240189300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429007c920000000000a8104c00000000000140420f001376c093841a1cb4776ef8a0c98bb620e5a26462d159ac2fbd653095fff5855b0dd063d322521c81aca137e1255a4cb5f08ef2de9f563f79539ab011b871f90ba7898203b8b68520c59d11a92cf846d3532a8d8c73a92de7485bcf3faaadb5beb9d3b86aafa627494e2233c654e986c65c95279676e084d27a02bb18119ae200", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741400000000000000f5012316257fa5285d2747f4f23042278ac3bd39f65591284c25a205c77c4e9960b99a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429201d9a0000000000007f29070000000001f07e0e0028bab8c023c8e42e71b09a2343743db6a0a3936bd247d43eabf20aaaf51facd27baeb552028ea3ff37e4f9dfe6e38d4427867dadd24fe3cb82a7b6f7771ee705fcc145a29b196ab70a0af94194fefa0236a91ee1e57e9392eaa93a104f290d80bcca30d4abd8f241d4d7c4c642f5945b08cf1c3b4f1abe9038082157b5e19601", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741500000000000000f12fed35208d89482af88f087d6654e680ce1ca8c5c5358278266e923d9d7621805aa200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940bea10000000000c0353007000000000140420f00072c0d7fe03cedd52ead106afab83453d065775f2544463d60666fa010a05f5a65e1be2dce7b1ef8dc9e80f808f1e6147bd433efe2fd46ecd4924d07bf27650b5861742c07262f099f3c3642723d594f64017cd4a2b71d374b35d6e24a0526f75835171ce197d9a5327c71a69fc81ae76083f850649eef71017450be0982f909", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741600000000000000cef9898e4bafba753da6d238bccba334f4a931a1085327a25b259e193e7d3708a0fba900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429605fa90000000000f0803707000000000140420f00af51d8538ac954f058baeb49077d2f43242345618bedcaf2198f6fae4096d7272f12221deb7f1da5176e9ad40f4f2905b1bfa2550be5e4bd129df9017ef1750d587f4c4373636257d810446655b62876ca93258393b411853175679db0c6501198e41203443c61209352d6fc119e8f0d881a8d47b3eac5716ae491d3faf6fb0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741700000000000000ea85c0e2cbf4cb7930de026478b7d93e56173af9bb74ce951beb29ee5c52be18c09cb100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4298000b10000000000e0a63f07000000000140420f00f135add94ce2496c8365eac7763c930a69e0a74ead0bd1f997d26aaf923aafff9cc7d722b2c72449ff7942e3fa8d50e8ff6ebbdd3981e6400a21a862b11ce70947213235b34e48abe866dd311516c4801ac750c42dab6e355a5067874619b1d40761764d0d3f572cc6203aef5be5a0acd6cef2331533f3c8a166ff02b26d2d09", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74180000000000000076850dae85e1c5e4c0b6d20263022eb185e547b02b3165856849e479da35d050e03db900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0a1b80000000000e0f94607000000000140420f00b406b10b4816470edb8b1958f3a86e419b60fc93833e8c704d59355cc4a7de0d263593f97827839b547eb5e7dd8bdebf7326a8e9677969489bda301a5a25a50dbafbe9760a9fafe3b33e93b5d80ecd01aeb4047b6c38b68e8e105d9777f1ef1135d45562d07da4724194e25392faea13c9a5d3b2fcde0de2468dfb74890abf05", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741900000000000000757b328d36764c3fc1c058008a4b190604571257efdf71a3a46f4e5428b9cc8600dfc000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c042c0000000000060084f07000000000140420f0096cf1f68ca2c91870b3a009d6eec6a6a17ff0d9c8cfaa4876f3296e98bc1af0e27a9364d66793d08fe3bb57ce34ce1eed7078a012d2bfaceab98244298facc03210a5af374193d57a4f4f9b3151fad3fa96b0eff66f66263361994574a3435d4ba3abd7e91e825848b7a6036570dcc1b95ec8a6d7d2f2b39b9c34b48b5788b0e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741a00000000000000cc21249ac1b1185e8b33bb331beb0291a351db3a54296ddc131c2425816ec0aa2080c800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0e3c70000000000c8205607000000000140420f0063fd3b45b173e8dec0257bf1050a174c34115b32a0da9a0a5073e17b01f30a9c73b392d39fa02c3b5e13b2c7de71905781bbe8ed67a8ca7096948054409e5f01068b60c03d2952b8353a6c263a6ef8443815ff1240dddaa9783ba782bee4afb7639ade52e526ecd275a3d99ccadb5462a8ea52c2f4236ea2ac421f5e2462d20b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741b000000000000003a673a5fdbcd34041871f33cf495de531205612ae94d8c7f53f0722f3bf4db59806ac9000000000000011600575843310104809fd50000000000d012130000000000c10d9ceca0b7d6f740af9f013334c62e7a3d390be28e06228c5f85ac31a76178986776cb721b39bf0dc0bf59f616d8331925a013d17cbbe6fe6ece991e87970a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741c00000000000000bdaa571261a6f48559d52a969007817077f8b50918c21e4f6814fbcd77d9813e4021d000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290085cf000000000008105e07000000000140420f002925de82e266a8d9a493b923e25d8248ab119c35abb68d71cb70b2e4490c440abf0ab0aa7bd0ede85a17a4b9ce3e4d3b779e03a1513dcbbdea0f826afc76f70100e173fead822e3eec7655378f33fe8ab188cf551e85ed3f97e7c7cefa1fda67461ecae7489c5bc667d5ed89ecf2aae87864ec8c2d0f783fd6dec38116940b0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741d0000000000000028305620bfb13a8a728df154cb17f981da3f61a39a04affa6d953fa74b4db00760c2d700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4292026d70000000000a8e966070000000001804f120096d31fa2b7540662bce52546fb2df4e1970f69e288109aa14f266800d5dd7f4c431c082c46e3aec0e2bc24dcfbd3f260723976359ccacd28fced53ec8f3877051eac103082648df971f0320cc931c1e08354515ed82891a226a82602df5d22c4362cf59db768e72b6d74de8165b5f35d926b36a741c67d48e20e7892e6d77800", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741e0000000000000060cb3bb2b3b7e5e8215a213290474adfb102deefc15611fa358760eb95e128798063df00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940c7de0000000000c0326f070000000001d0121300523eea343a54389d056c48a264eb3df603222877952c2bd626b989172c3f12083b0ff659232d25aed8f97f89bff9ff1ea72ab008a93455a436533758adb0ae004b97ffaf32eeb820a1340dc8086dd333259d6fa191a93a84b29ee1ab6b0603d6ac0a4b89b16edd04cbf76ce3afb51d9c4cfdccb7eb02166fdf7db8ed2bf9ad0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd741f000000000000002d1444f5cce4d548ea21e7ae663331722b61fcff66bcdac28145dc8ebc121c39a004e700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296068e60000000000f84079070000000001d0121300a68a0e579d0cb7102e2736cd12f1ae441754a345a683c8397389831b7d3825d678fdab25c4e1b33a4327afafc516d3b41d7e3fe7cd249972db45df9d0bdd04043c52165a7a6358da355d144670e01e62112ac39079cd23969518ab95e95e8454a85e0759a54da2a036ed835487c9e47fb516954eca5c2f4daba8b170733fb009" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a000000000000003f385fce742f0ca80a96d1612508cf47f883467b0b318c95c4748b72602891ce801c5900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294080580000000000c88331000000000001f07e0e006909704cfc274af012c4a108ac7c28edbda13b9b91c003e8514c36acd143d46b14ae8c18cc0d53deb3f5fcad0d70cb0a4129076597dc6ac6bd97b74cf381990835bded47645025d36a3148f2f10389088482feefa8d174945ce04c5a276aa2dfee675addcd0039ef503c66a9b8c139d5063362c92a50a85175ca438f70eb1206", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0b00000000000000b24f54c00d0e864f0e6c777f6922e5789db9a4e9d87f00bd83daee08e3918843a0bd6000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602160000000000030ba3300000000000240420f001f3ec1117c1753fc4dc73ccf079789551ae7e26cb2a0f8d015897b60e947993252204d48a39839b784c778e31321a362531233e729d6410ae5c4152896e07405e00b873aeeaa24e8035052240f94b43324639afd785b07f40b298b7c5099f3b9b755c188fdcf248fe36e88a338b62e844b5bacf8662f56fd24498f00eafdcd0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0c00000000000000d0285a4847a474a386185ac90b669827601b9a744c79430b766acb499c2f95ecc05e6800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980c267000000000090273400000000000240420f00c464eac72dbaca39074f87b03b8d3056428ed16fdd763264d039e56e9ae52a5cc36eeff66e53752c6e6d85845066531a283e9ea4dcc1119c6fe08f8da16dc50279f7165360d69b26b07ab11557817b0bc78908479677fb107a74b2e7535a5b91696f506a08b8a9c610494571694fdadb3ef83f0886ef4d5f0214b9f1366b6707", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0d000000000000003947b1c11c9137d67b135a0621ba51e74fe5b03f7e8ce39d900d6637a04f9246a0636f00000000000001160057584331010100127a00000000000000000000000000b7e970e6f92a4d995ae02de5082af3f4463021f611fd83403a9efd12b312170c13fd4facf7e531d22070f1635e23184e6e3f8018c0bd603036d0b9fb97e52409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0e000000000000007d141e412f3879eafa4422dc19c96f019c769bb44e03b16a0af12852bcea2a03e0ff6f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a0636f000000000088583300000000000240420f006ee84a30bc8d07647fc9c0687d0ebbdca65cae76740c3e300f7f02a3cb488847dd96ea0adf55ef5fec7d97d60e2cb6eb3ebe2642dd20d5b25cff52b895ff3701818a1e586152d1f92eeca964c7f1c5f1375d4390ca267b7deefd72edfaa1099edc82e46fa9d9f2768ffc6e62d0673c6b97036ee2835e0b26fc02e476e3b22702", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0f00000000000000a78e96fc71698c8040919b33079ecf41fb0e82cc02985c7337eae61d923bd9f500a17700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00477000000000080003400000000000240420f00c704c4a7d0db41af6f9a93aaa0e092d5e1376974d95759b4e29a0b417180da3877fc77d8067e4bc175d56ccbdc977588f76183761533fec29fc3d1154b464605de8fc826b0ad8690503a77632292a79b469aa7404b840ee4595201d97847e5cbeff1adc22e6a7d4caa5c6bee3aa2bb5b52bd9bf989de0ab9abc6f05666dedd04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a10000000000000006cb60fd2d7f9829afbf40de36e9fc1cc773d9bb6119f2640f5094905d65cfd2b20427f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0a57e000000000050ea3800000000000140420f005e4eeca8bc2379da8fa6ba264cab932a70d3e6092e3f42f957ddbfbebdcd0a231c91d4b45b4647277d7f01294df1e5b8c68375fd7672cd095ec8fd925b3af20b49e4feff3b1bea5927e41d0f0e29f9f11f60b6718a78da8f752dc295d6e0dfd4949de227a5064a04883afa70b37ad913df259af0acf2015d2edc94620ff24901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1100000000000000900c2ab6bd862137236550bbb8c4198162d368503a2afd3248493b5759eb742940e38600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429004786000000000098b43f00000000000140420f007b022b7b5973aafb4b0f614d7975986215ef7383c695089daa2054353a9fd1202196d22ea987692710d3ec178d1e82d05d6a17c9f429698a1cbc77500a4dc20ac43c01e8269f325daddb4605c83e9284247e710d3750eefce6ffe6a53ace2b1caa97120926e02f4e740659e0d0b461b33f05bfee61ce9521f482101c7e0dff0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1200000000000000ed9f8bf1b0aa81a9351b80ebd66f84be56389ccdc973fe8b2ad8900a2d6e021160848e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920e88d0000000000286748000000000001f07e0e00989ec0a78952b2f08e0e2c397ec23ea9faac43007769132dc671afa82459d4700115c0d955e71f88f5af3608ccd3a0455a5e9c0f8cd533aae906bc8d1042c106d358c34d5c409d5747427975dbbee1c4fe239cae05d754d66db883c86fcc2645916d9395c02627933e7536e98d5e2ee351731c4bf0b7396ba6d02d73ea861d0c", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a130000000000000042e8f01b7919b067a97f0b5c2adaed71da93fc4974ce077ffb3a4cf7135a54da80259600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429408995000000000070314f00000000000140420f00e5d4eae0507399eff4ad8cbf499db206392e27e01d325a0ac953aeeff3ca3ca52ee6f4ca22689cfaaac6c68956f36b84fde1df9a39b08f51698aa6de831b5c0bc80bcf2877bd1cc821c2b36a7aee3ce36788816d874d01cda2392595caa275ccb33863c7acde77feccc43048c932806431e34ecb723dd4594f3aac194fea7b0a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a14000000000000007e364c445a1a6a1846c9640251e96bb3c8eb397bd1e7961b55c4ecc1240e1308a0c69d00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429602a9d000000000030e82b07000000000140420f00cd80df3aea98e0a067eb6781459c42ec2f912a95af97211c0b851318a170dd3e71553e9c14270c801334c994af813f173b3e3983ba2dc1cb6d877470ce5e1d0fd40a10909d363edf9552e0535b5bfc06d313976a5e72242a3d37326cda8ac6824cf73592fbcb58fe8211f31c4b83e34c8d1d38f4a4458f8b61cd9e67a99c8e06", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1500000000000000bd7db5754d988ce9d8a727bcda41e64478fcbca520057a19e7392b7e70792841c067a500000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980cba4000000000048ba3207000000000140420f005c48a1317028b58d49bddca85d040ceadf846b6741170125ac70ada35168ba9d8330ca638bd36ad968d64eaa92609778d73bddfb0e16abdf3bbd9e2a6ada970f4605bc367f8dc15340435c6b9eac2485ee42ce3f44fc670221f8042d3d3e5cf92b1cb559beba778dec4983e527823ce294439cb704d4040469d4a2b805617a0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a16000000000000003e938f7f9bdfc8daff7dce991e5c602c26a3e2531a576f76bda7e94c076aa754e008ad00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a06cac000000000060033b07000000000140420f00ab243f955e937b280a8e2cf536a2fb5afb3466c83e9d130ef3955c8baf6493ff1644ccf91ceff646811a7697cd2e575f95bc3ab3c71ee21b4a999f3e6639d20fca6ebba073588611d8e81fe4af368ef0d8f23699b744037fef25ad2ed6f8891a7e29883ea103389c4ae6abda9b4ba96f9c2fabcc74ee5b598b5fe2ce9bd5750d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a17000000000000008f2fe0bed855ad874e9c92da6e712ecf32ab30b86cc0a9afd20c6929a48b1ca600aab400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c00db4000000000070fa4207000000000140420f001230b6f946e6f04ddd14792d5dddad71e332125d765637d5e98f05bae8d679adce3792cade21f5782a23616409de8a355d044331c6e56ec0a16ef1ac43d61701781ca5db74b84f0957e5a0588809c6f4519cab868c926b5f05040bb127dae7f3643020d561f6817c649298b759399da4096cd193b05b82de6f16f4961f383000", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a180000000000000083abd576fcec5c8e6527a5da60d62b26379ac39bc95ae3858cf49cbbb9ef931f204bbc00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0aebb0000000000b8c44907000000000140420f000b256a4755cbc65b79e7a3219e86b46ae2b438890c8594ff04433cd6bb8d785e0d2a43c11e9793c3c982f8442dd8f74a35f0ddfd3504279bcc6cd5bedbe4110a60c04553bde697a94707b992bfc9f31093b7c96acac91b361afba7f7a87815ab6b9dc09f1cdf2b1cceae1b0302cd6b1544c9f09b6ed7517d57789a8f7e031907", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1900000000000000682f3f064c01bd056db984e8b0fdd51da069515e6d189ff939c579b3038f3cd440ecc300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4290050c30000000000487752070000000001f07e0e00358a801117d6c85c762c78be8b9e21f73056943e34dfc0be805964f0a7b1ec76e56c48f69cc43dbf55ccb3d5b41155f6569ba946281a5054577c0f64474d190981677b36b2e5f4814302c9b2a3eac10304b6decda2d9b93ff1b5feb09d8b584598d57d31ef48ddcb859ccd92cb5a8227aa3ffb4ea9af7076520fac58d7e44a08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1a00000000000000437e3b0d102d43ed5230dc5d0b2b30d9d1f2b6c808a53b3808fe0d95f3e65f34608dcb00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920f1ca000000000090415907000000000140420f00dcbc09de990080912b1318f19b73d5c7c092f35bb5e7e04c99ef5e43a0bca8277b470d009de17b52b0f30cae4c42a464f3c4a048c0ec61bcb961778a46ca230ce0c9db71e64b940ccf6ae3c9b18da8bbba900e62621d1f4b9b36c795a9b89658dc31f083b3f62b1d8973565a0739a9456775cf024d998c138452af6c85e11409", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1b00000000000000e9153f5152ead640e6a0be69ea00b5fc38614e42904b3212e0f22efe78c13cf5802ed300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4294092d2000000000010506107000000000140420f0047058afcce4a61c303cacb3692112088b094ff0e91c655e088fe66de4ec42c7650a8e0ddaba413512390ddb2c853424dc58f072f67c95f79be67d1d6138df0062368083d87246dabc82d25f9dd1f3c7bd8e8c4c26b1614e29134ebf230c4ee8c14054f0e7458103c521d8b56579a437185e932b20ab0712ec3382fcda188df08", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1c000000000000006a6a671a5fc6abf44a70e224bfa5974d2464050c70edb9186943bf6ddf474a11a0cfda00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296033da0000000000204769070000000001d0121300b2af7a9673f65edfbd797b6d635cd3b800866f16c38e01f24189f7c9efce8412db59e83f32288b69eb32eae1511534a0e720a600a043d654c3de9f657ac5f40228be38f44484457d6f602f2f15b502f8616931675bc32c1ad7cc8b9821884f58226889b8c2bcd604da643faa6fe30d71a2cb3e44d7ab12fdd034b02c7026810b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1d00000000000000eaa4ebb92967277fc5a6d2588a4d0a1ea0d0c7426e94d3d6f99119587dd2e6b9c070e200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980d4e10000000000807873070000000001d01213000f5a9cb1998ebd027cd90b55aa1e3e2a86553b2df7d4701d23e209a95136e6d6558600e34733c2d73f2e53fdc9e38d969caa16528e2ef2bcffb9621870933801207f771eed51473daa339acba7a425d201e71cd2d010faa3f861279b9ab57a68f7c51455752205c60af76a20540e68591775bda26af12dbe0c66a105bb69b009", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a1e000000000000006a1ee9e122b08a3d5fad0bd31bdf86d0e3a341043bab8ac0726563d17dcce476e011ea00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a075e90000000000d8577d070000000001d012130085a553befd354e07307c2c38ec419ca509b670e3d7621184ea41eccef4e3e17a7c2b2a475ac9e00754c53a871119c2dd0ed951bd7be6ac034d4990e6b451730739f3236a90086015635d991ba2cd2c8b496a4c7ba943effcd9df04a5b5ee9a7dcd8f5a85f3ce67ae6b0f60ad46eca09c7b9e78ad28ef594e716ba421b867c308" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "skew_mismatch", + "at": [ + "record", + 0, + 5 + ] + }, + { + "name": "skew_other_bound", + "about": "a statement judging by another bound than the policy's", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000410d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f055000001010001010030750000307500003075000001099c5c2e17aa3077ec35386e0fe831accf739ad89bec119eef0e7ddcd119ee78a3fa72d2852e874f502ed9d59107e19e6974f0b2ba4539070546a1b40621060d" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "skew_mismatch", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "skew_held_too_many", + "about": "a statement claiming to have held more of a viewer's events than the room holds", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af203000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f05500000101000101003075000030750000307500000193bba2daca3a85089a397a125e37ea2ed378f5d2131893533b52f3024e45db6ae5c0dbb047aa8b05626f6749d33edcb18547e5e1a44b4712e442b94ca31ab800" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "skew_mismatch", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "skew_leaves_a_viewer_out", + "about": "the clock states the first window for its first viewer alone", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a100735500000000000001570057584b31010000000000000000404b4c0000000000400d03005f012c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000010024a8014e0d1d0487d6d9e7968cf850f0becc31b11d49f0fe302af911e1fe82c1dacc3368c004dc0c5a4662fd4bc731eb1ee31f6e8087cd05ea06b454dba93806" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "skew_incomplete", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "skew_by_a_viewer", + "about": "a skew statement signed by the host", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a000000000000009f7ccead1314333c53434de1d79754eaebf9fb06cf147bd8a48b686992f6986a00735500000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000010e865f3b11491f5c18000747410a5a20b658a08cb6d096aca87e6af811a5dece3c0ede99ac6b466ad39f0230ea1d3910408c539578799970843a13bb5dbe250f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_not_permitted", + "at": [ + "record", + 1, + 10 + ] + }, + { + "name": "skew_of_the_future", + "about": "a skew statement made before its window ends", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976020000000000000041e7cd6be2fdd677920556e85f4aa2f79ff20699f26797a87c0339e05d98d6a1a0c44a00000000000001a30057584b31010000000000000000404b4c0000000000400d03005f022c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0a00000000000000040004000100401f0000401f0000401f0000013d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740a00000000000000040004000100f0550000f0550000f0550000010100010100307500003075000030750000017ed117f5b7514c4419bceaf2b0ed088db7821c4988597b3f2050eba7376295540573b9f3ecad9b2f4f5b5d7aadcb186dcde916520873c961e217b14c5de6d50d" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740300000000000000008a1fc84201004e146cac9ad687b79b2d413ed98fbfcdbc3bcae4e4ccd21a9d60a72000000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429200b200000000000204e0000000000000240420f001272068da37132eee232749dc3951539994c00f779ac311c77ffff4d9278728e0cbe3521fee6c6795b6aa58c994b69291ddae72846dd4bdf8f3d34786835b0031b238d5bc025a12a90403a4c9bcfbd3cc72c93d7c21c652880c059ea818ec6a079d1ff0278422280b181dc14166c4d00249bdf2a3e8fdd31e4fd2746849b9f0f", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7404000000000000000ed8db77c6d20c4c96fd9a829bfbe57f933b6b3c752a4a6ca582b4747a66656380482800000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940ac27000000000060ea00000000000001f07e0e00fc958c7f85b015e3bf1a3aa2b2b98214be08a26d3a71b4fec60ba387847519c166cd94e1f01689e9ac6012c6a2b01ff7b31120c9306bd45d0e196cb89aa53e0e195d546c0bfbd8ea376dac9b122cd4e881bd5b8ed4cc2fcbd0c1728115f00d096dd4e648c2d2264fdc42142d865c5823fd3dc4c568d747cf80c8404e3bef9906", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740500000000000000045711752b033463750864a4fb49c67ee887c711b1eb8964219938cde18fd1aca0e92f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429604d2f0000000000a8b40700000000000140420f00de9ead09b1a619fb3079d2ba8ba5b66f1747196400a3ce2cc5ae83d6c4da7206a5210189d64cc7e76e4b230c4a66b65cc427b22e13ec38b70b753ccfd0e95a06e2ccfe16d44e9f2de287a4d8e0532429db612d49fd8ef44a5cd1c8652a3916d538c6ab85a5ddda94293c84986993f04fbdf0fc4cb8b570fcd24ffce91ed24006", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74060000000000000054236868f943b906bddd1d37cc171714a5a905be4f6e7a503e53ec2ff2ce5180c08a3700000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980ee36000000000040420f00000000000140420f0010507f925346441e4772262c75715ed81c4a423fbfaf7be129db00557d5039cdf04df3a1a89ea5432342f85c47577862ecdeac0eb928ea12babfe8123aaefd061a6999e8aedd876707b794a9815551d19f73c9e3cb95169d4485ef40bd90ba05a7b57b1936ae460aa29d2c899e491df85c8112682e8998e9ae52a02b3866ba01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740700000000000000241f4f92508238d2608e7649fe4a7fb7e7330aeb275300f222d4cfd6cca08caae02b3f00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a08f3e0000000000708d1600000000000140420f009e459c47c1a42872f6a880a7a2b09503531e58e0567d96cc9ebc259c0d1fb4cc3706464eb2f8ba323057ae43c64a1e4cc85e74c7e5f11d06a256e3214e7c040dbd367e8cfb298d23fa8f8af81f933cf7d79e12c33a3e7f1c886427246ce5881cfd333f86cc7a9e0076334936fe266cc4718e2a27e90ce6aaa83a0c608f25dc01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7408000000000000008cf473fb1a5afeb7ea1905bfdf98acc2ec653fd02ddffeabf4a6e8bad37ab58d00cd4600000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c03046000000000060b31e00000000000140420f00f9b4b96bfce790dfb39a8f7398d1e1880c0f39e7264cb7a6a25c75d6c6754e11cbbe2b75f349e3e7377d753088c87cd4a02523932a3cf9d259c4ac1e8771f4012d92657e2d927445f881594b5ab6f5c3e18d438bb9169ab4bb0b53e30e76532a9ac0e97a2e520f599eefa891ca0e0dcf53ffd595647b4334ff625f34301b8705", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740900000000000000e777995853b355a2086df8a02910f4822362f2ee40b83e175cbbbc2a11ee4363206e4e00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0d14d000000000060062600000000000140420f009e156ab2f4ac606a85e9e17e3645a46499ffb0ebf9014e784d4117a00ce10f16a579dcec8af67fcd08aa6f1a8a17061b20eb3bbd0d2baf4903b7b0ddf4078808c30463b153fc0e241fa12579acddfad50deefaef27a0d365696a1e6261fc3c9ab365d03a3d0efc4a30c6aa1949d08e4ea7baa2a7bc446ae7e03e9b5f71f1d00e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a020000000000000058b39ff16873434d1b722ab5690e0ada32558b0c824f5ef6cd323fab25d889e9a0b42300000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d4296018230000000000c8af0000000000000240420f001399ba06b78f7fde09c2f54466571ffeb87aa6e4df64a317f8cb340b5bc2f6f7982c390bfa05b20229370bfea378e70d4c996347441d9dbed8ddd30a959bbc01317b0be66abfb507214a4313e56c96d42b9cecea3d496d51cfc7f73c1afa2b91bcb5f79dc0bfdf04539b78fc51647b2ff829fbb8250aa3368dbfccd422e7860b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0300000000000000ff0a37fd1cc5e09d25ec7288507b1e4bfc52c6e262736bad8392419678796751c0552b00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42980b92a0000000000a0f703000000000001f07e0e0007d09fee856d146988a63847243c833628e6516c944c83eede51863e7983f084732579b82c7fa36657cad568835d543f929c76c6b2629120cf81c848e44a0b0b1fa8c203119835c69f3a3c421a22816702a281bcb465e26eed7b21e9ee00ab75b1bc9c833e0bf5063525ddc1739c923a0ea35ee035b708e3844bcff0b8c73f0b", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a04000000000000009bb03eb45b6be791e8d9127235dc6fb4b2746c8b35e787cdb03a65ca257a884fe0f63200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429a05a320000000000b0f40a00000000000140420f00531a249ad94639a4ae984c2db5dbcb3a12ce3472f8094093db3c80908eb045dc14f93d117078b87fdd7edd1c0694c2bf6b9f2f9cd6266c97b1916c9c425e510cae905b9d1dbf0f8255c2a126fa10af5f67e0a61aa79561ab924a69a61c8a00b3bc0d0489e11f6bf9b438964355b38e47949ecdf7105d5f47eda0d28624809d04", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a050000000000000036120dc150d3fc29f510722918ecf4072e872b40eb31e1845055250727e68b9b00983a00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429c0fb390000000000c8c61100000000000140420f002436237e65db45fb048541c28ab0b55e676b06ebc0e5ebfbbe31d4f9915c5838bec791678151909720d65048c26d7b34bfb3f5a692254b775bbacffbc6abc40aff6da05aa6843fcb8ec6e134265e66f3a182ceae6d6b1d1d99d0a7bcd2b2cf2eeb0bbf5151b763b67b308caf306d2583f7e69abd4ac66f6dd9c23bfdcf17d608", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0600000000000000fae5168913cb5d01776b4e5b26cf7fba5fbe304fb0ddcd272d135763addf67a720394200000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e09c410000000000e00f1a00000000000140420f007b26903d1ee8a149576b316390349a69043bf29d79f646ff70a1fa3e82f43d8122d2b3162808930eae891a414f4cc6a5dba901baa008afb89fdd6e4c98384109df6ec6af9371cd68b0c8e4e5ba5d32d6f7b634afa0bd630ca23189ceba5288c2be9133b15521b4fa3e6bc32d7c26bfcc52f1f0bb0b549a49c9915803cf1e7604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a070000000000000011e38b22c6f3e4516da05b08bc866160f5b84a72745ed2bcd4775e7178aebcd440da4900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429003e490000000000f0062200000000000140420f00adf1806ab24154fefd7d7ca5f43170ace45342ee4170c56e34e1a9fc6393e219e36ecb66665241af2d105ac27d303c2b2c742da5a5a9062f41690cfc07a382041ee1cb5018599202d813bed06c28647f1f07b0545a6775af3bf7ba26a1ebf87843ac00035b9237a64273752d8256e10622fc4025f37559e3b46a388ee4dbf503", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0800000000000000557bb3cb5131b512c77da8a58e564809b3ed41577d9764f4764be52eec8250bc607b5100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920df50000000000038d12800000000000140420f00799fb82c3a5c739f1eb5a79586cd42aa7dd39d44cc67e06f45090cb8f65b3895b8d958662106222a0f9e0dfe8e1801cb5a9830d2f2e288009d1667f09717f6017acf8b63714d659068258bff158b4d450e9b4fbc90bb10550b50ff5c59831af0f8ab22e505d653e9b72122826ab72b30da5cc4c7f1a46bc1541b5f913fa92e0d", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0900000000000000a8758cedbabb4901ca2157bdf1c869479e3eed109d47df388f4b7583d89ca78ec06552000000000000011600575843310102808d5b000000000000000000000000003f504120b2e36fb8d54247a57f3fdf06838e84fda6482f17883a4dd3bddfe1e2f766ed196d786d7bb9134fd4340e9455f61ecc0d23a9e54ea5bb7c3dd075e107" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3600000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_statement_malformed", + "at": [ + "record", + 0, + 2 + ] + }, + { + "name": "attribute_above_15", + "about": "the guest's grant carries watch_control 16", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000012000d77617463685f636f6e74726f6c02003136de076930dbf82b251480f8f60588ceb2b4b58239df391289d4425fcc6fcb8cb739ba541521f0781c318895c36b43f0d3917fde89d733618ea1df8804478aa401", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74aeb89507827a6107bc2d543cef4cabf20c0fee6a50dc1772c641a84295bc552720d88d37254f9228e3827c99b2f0257be4821195e591d1b3e43ef3c8c6cce53f9825a4835b3073b47c0e45faa30f51ab9068a676be19e34ecff3e0578acf8c106" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + null + ], + "outcome": "refuse", + "reason": "cw_attr_malformed", + "at": [ + "grant", + 1 + ] + }, + { + "name": "attribute_leading_zero", + "about": "the guest's grant carries watch_control 03", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000012000d77617463685f636f6e74726f6c02003033aa3a31e14d2b271c14fa6c88285f965424b5e189eaf796217cb9f082cfee52330038ce97dd20a62decdfb47347267a82400e86fb692e2da3bae2f065c7da5902", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a2464504c2c8aadba971739e97fbb04fb70a118af42f0273d3c7335348f1b85dda7007f61084a7c16160bfd10495972842e1604e4c4c4281532944d2501ff5ad40a6ac4d384fa8e0760bf8930b8bb39fcdc4a0371f449808f5ac0ce84cc5c890e" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + null + ], + "outcome": "refuse", + "reason": "cw_attr_malformed", + "at": [ + "grant", + 1 + ] + }, + { + "name": "no_policy", + "about": "the watch party given no policy: its first statement is under none", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [], + "sources": [], + "outcome": "refuse", + "reason": "cw_no_policy", + "at": [ + "record", + 1, + 0 + ] + }, + { + "name": "policy_tolerance_above_bound", + "about": "a policy whose catch-up tolerance is above its bound", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f90d0030050c3000040420f0089bbeb0329b3636299bbc25f1346b61482c78dcf2e7976600934f96d8418ce0929451e7862be08d52241f20032a0a2fe0329dcd0644617c671ba45274ed4cc02" + ], + "sources": [], + "outcome": "refuse", + "reason": "cw_policy_malformed", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_window_not_whole_slots", + "about": "a policy whose window is not a whole number of slots", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000094110000dc050000400d03005f409c000050c3000040420f0097e5a20d0f12ada7bfa2a2e265e7036b627e07f16122d582b7c5752e46a1662e8710d9930e66a848b95551332ecc82322224c1763ae452e7d3cd87a4cbe17f0a" + ], + "sources": [], + "outcome": "refuse", + "reason": "cw_policy_malformed", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_unlinked", + "about": "a second policy whose prev is not the first's digest", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000", + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e070707070707070707070707070707070707070707070707070707070707070780c3c9010000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f00bc15d5bbd1a11db8c9a0260322c5b57ad188e7a868b9399689f71f65aafcdf6201468168babefb9e34bf015987a58a6f3ccd345f948fe47588efd112c6198300" + ], + "sources": [], + "outcome": "refuse", + "reason": "cw_policy_unlinked", + "at": [ + "policy", + 1 + ] + }, + { + "name": "policy_same_source_other_duration", + "about": "a second policy naming the first's source with another duration", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000", + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e9a7242e1b726de4aeef26e784201c318d38333a2d8f3dade8001d860b4d6247480c3c9010000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42901a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f00786e8a4019c63a188931cc5741e4c69f5cd6987710be430ccf64906e1319423a254db4fa24aef772a130870dcebed0a47f2ff9ba3c4d22fd0469df0a91d3c50e" + ], + "sources": [], + "outcome": "refuse", + "reason": "cw_policy_unlinked", + "at": [ + "policy", + 1 + ] + }, + { + "name": "policy_first_not_from_zero", + "about": "a first policy effective from 1 s", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e000000000000000000000000000000000000000000000000000000000000000040420f000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0030d853227dc5b7ab8d18e94975a9d3849ffe167d534a63efc9243572bc4433ab7fbceb80dcee529bd368d7425e210359c5155f9da7f00caf812da2f1988f5604" + ], + "sources": [], + "outcome": "refuse", + "reason": "cw_policy_unlinked", + "at": [ + "policy", + 0 + ] + }, + { + "name": "source_objects_differ", + "about": "the policy given objects that are not its source", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [ + [ + { + "content_hash": "8d4e8488ca3c154cd0632d84d5e45d9b4651d76e644bf55b49408a6d56b79431", + "duration_ms": 3599000 + } + ] + ], + "outcome": "refuse", + "reason": "cw_source_mismatch", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_truncated", + "about": "a policy cut short", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4" + ], + "sources": [], + "outcome": "refuse", + "reason": "truncated", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_unknown_version", + "about": "a policy of version 2", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031029b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f0017783a6e981cf0f0876d8585b95f02214f133a579a0e52402913893499ae9706e723a34edcd99273023d2dc4db5543dd2a3847549c8abb34fc2b464e03308000" + ], + "sources": [], + "outcome": "refuse", + "reason": "unknown_version", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_of_another_room", + "about": "a policy naming another room", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "575850310107070707070707070707070707070707070707070707070707070707070707070000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f00986a44aed539dcdb7a5c7e3f9cc0c4acf20959bfcff733c103c9e7aea5c88ba0e7992902690bacf64ff45965a837a682f313d2fbd3a518cedd80b8290387540d" + ], + "sources": [], + "outcome": "refuse", + "reason": "wrong_room", + "at": [ + "policy", + 0 + ] + }, + { + "name": "policy_signed_by_the_clock", + "about": "a policy signed by the clock, not the authority", + "descriptor": "575244310136b9b2db8f352b2f8616383d1d173c6f6514198fc4550fe3af3dc06604afae2c2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a197600406cd8e95d060040420f00000000000000100000000400000000005745503101fe1f0000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f00000000000204686f7374000100120a0000000000000000000000000000000000000000000000000000000000000006766965776572000100100a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e969ea214d6a14b93a0241793302fae50243b4254b51917bc373edd012b9b191cd1aee2ecb6d9056123de31824e1dbab01695be4996ec8b93f077e497538c90a", + "grants": [ + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7400000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000000001001200000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000745db844e940ee0ad2ac8f22d765bfe7b40f474d446b1cdfeec0dcacb728f2f1a5dc8304e19b705d86a3408caf25074f9718438d0932d390bfc00bdd13d2cb06", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff000000000011000d77617463685f636f6e74726f6c0100338c64a29b1713461f34fe69197ce8ebee59b2509aa549e598f19fc8d1c07460c3f672e56b998ab3fd4472af070d8ca59c3cdab2eb1f67c8aaf3ec19ff45c25e05", + "57524731019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e76cddeecd1f23bdbd86f06e7bb27626b0da1bfba351b7eafa61129692c355c9b00000000000000000000000000000000000000000000000000000000000000000000000000000000f05ad16a0000000080bad26a00000000010001001000000000000000000000000000000000000000000000000000000000000000000057455031010a000000000000000000000000000000000000000000000000000000000000000004f4013200000040420f00000000000100000040420f0000000000ffffffffffffffffffffffffffffffff00000000000000a57473cad4e4254eb3ac2e57893bb98e8e43c3af3f6ddcc86534e37c88a56ae54a05fd580bca793ca552121456a273ebb362e950bf294feef36be16a624e5306" + ], + "key_log": null, + "chains": [ + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a19760000000000000000000000000000000000000000000000000000000000000000000000000000000040420f0000000000001040003d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd746772e49b934a5a8a3d1247b3a5c386d3789d7fca3dd67ecdf3c36fdc5d66b729658c4576ff0a3446039e37c2fbb53d3c041b0227ee02a060adc7d38c3d5f416e169c46ea9ce018b7b89fffede502b52e8d4d38efe7eab0431025d1caa9a34604", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c389beaea5acc00b98b4bb9023fc349500839d9ef3d63626777dea6152a1976010000000000000051c16625695a6bc5393e1d606ab7636b19121c045c7076c626bc4cedc722b6d540420f0000000000001040002c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a420bf64209bb20bc0434fd35183491537192890d52f8b30217fdb9e918bf1eae462c50375d4f77cd10da6274a3f000a987729e32d546d8585fda0f0ecc74cb0d9def7c49333addab98509bde4dda6abd54198d4ac5008d98f4e88d210c35d80f" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740000000000000000000000000000000000000000000000000000000000000000000000000000000020651100000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429e0c8100000000000e02e0000000000000240420f0006cf1d606c86869f20f5c8a1904e95a9a90291fe13a8f04451a6d1ef74dfcf0bf60ecdaeb55820a470631959ac9b29243767e281c34e7412b0e4c8148d18bd04271305203dcc54c80fda417061c1c62bb2cfb11379cc34052149146faa7643af8ff5e988d2927c99f763bb446b61bf54a51558bca7c65ceae305d16494133904", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd740100000000000000f6da2186490117df6da84138ea31f97db2d287ed361766b2de606033bbf0771a40061900000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd74f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d429006a18000000000000000000000000000240420f005b0e15f4351c7b69e198d3ec980256fed9671fbae07b5d559177893e89dda52fe487e35acd7fac5222258ea855ff7640b315430eee28b2d10f804d8ff19b6a07bb47ab000f1ddd1fc34733ec4be691d4fdb4106126f0bf73d54e979071110e68ffafb87e06869b2200b67ef13541e7c246c9fae03c1dcde44fc9b098031ce10a", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e3d1a3e1cab7a6f7a0ef1761f06c29185fe45acec52f8ba4c6972ab63cbbfcd7402000000000000000add6815623873b8d00cf918891098bff17ad280061169cb73cec0e8ac44ef0a80841e00000000000001160057584331010140ac2700000000000000000000000000c3bfa106f7dcefc609060e1d1bd38fb6551a6bcdb3eb8840d635b8ad853a0082ce90cfed7cfbd3875da24e81fc22a3cc8c98d1a83ab5ce5f38d94cac70121901" + ], + [ + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a0000000000000000000000000000000000000000000000000000000000000000000000000000000060721400000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42920d613000000000030750000000000000240420f003528f4ce3716b6a5458e187e79ac5460df141a2414be2f93471f5daf4e3b9ea7f645fed19ff9d95f3f9f396d794c23b17b2402a70ee123c4ac6c84c80cc5be06c095b1260b951dc9087138e8e15ab0ed9871ebc2889975b90c41574d45eb2255ff64ac6c7c0fe29498118870e27853b12082c4b45277343e4d02c7cb2914b808", + "57455631019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74a01000000000000007b674eea727f42be30dcef8d99600d97d774b323c2f8297e445fd6ac772b2c3c80131c00000000000001ba0057585331019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e2c64a548eccfad2710f648681a633e7082c3992947e15508c66f9f26927af74af7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42940771b000000000000000000000000000240420f004b809ab03d173c6e516e5d6f0e65261a5911182fe3058d234f2c977b274aa5b47837baa333579f33c1a59d1bd780dacd1e86a1e7889dc7bc57a7578e76e9ad01af2ea4c048503fafaa8533749865598d89bc39698a7d890a91f60328d1266fbf40f7d4aa55de2baa66e7bdfa7edb73a82b03ad38e13b79c9f40786fe2507eb01" + ] + ], + "policies": [ + "57585031019b9dc5d22f83c40bd0c2dda5f666125ae7f542d6889c41cf2d6dc1a5c796a05e0000000000000000000000000000000000000000000000000000000000000000000000000000000002f7e5d4911e80e41b649eb438b28d7525ebb34f120ae4457731ccef888746d42900a493d600000000f40100001027000020a1070080841e00e803000088130000dc050000400d03005f409c000050c3000040420f00c0abd1ab1a8859466042ebabb2b337e6132ad417bbe59cfaa752dab48c69436f6433a915ab684ec06bd028f1bdd979e62265ef2866bc15f68d5020482f059606" + ], + "sources": [], + "outcome": "refuse", + "reason": "bad_signature", + "at": [ + "policy", + 0 + ] + } + ], + "catch_up": { + "params": { + "tolerance_us": 40000, + "seek_us": 1000000, + "nudge": 50000, + "min_rate": 500000, + "max_rate": 2000000 + }, + "cases": [ + { + "about": "playing, 30 ms ahead: within the tolerance, the controlled rate", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 10030000, + "correction": { + "action": "rate", + "value": 1000000 + } + }, + { + "about": "playing, exactly the tolerance behind: the controlled rate", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 9960000, + "correction": { + "action": "rate", + "value": 1000000 + } + }, + { + "about": "playing, 41 ms ahead: a nudge slower", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 10041000, + "correction": { + "action": "rate", + "value": 950000 + } + }, + { + "about": "playing, 150 ms behind: a nudge faster", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 9850000, + "correction": { + "action": "rate", + "value": 1050000 + } + }, + { + "about": "playing, exactly the seek threshold ahead: still a nudge", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 11000000, + "correction": { + "action": "rate", + "value": 950000 + } + }, + { + "about": "playing, a microsecond past the seek threshold ahead: a seek", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 11000001, + "correction": { + "action": "seek", + "value": 10000000 + } + }, + { + "about": "playing, two seconds behind: a seek", + "playing": true, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 8000000, + "correction": { + "action": "seek", + "value": 10000000 + } + }, + { + "about": "playing at the most rate, behind: the rate held at the limit", + "playing": true, + "rate": 1980000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 9900000, + "correction": { + "action": "rate", + "value": 2000000 + } + }, + { + "about": "playing at the least rate, ahead: the rate held at the limit", + "playing": true, + "rate": 520000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 10100000, + "correction": { + "action": "rate", + "value": 500000 + } + }, + { + "about": "playing at 1.25, ahead: 1.2", + "playing": true, + "rate": 1250000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 10100000, + "correction": { + "action": "rate", + "value": 1200000 + } + }, + { + "about": "paused, 30 ms ahead: hold", + "playing": false, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 10030000, + "correction": { + "action": "hold" + } + }, + { + "about": "paused, 41 ms behind: a seek", + "playing": false, + "rate": 1000000, + "controlled": 10000000, + "duration": 3600000000, + "presented": 9959000, + "correction": { + "action": "seek", + "value": 10000000 + } + }, + { + "about": "ended, 200 ms behind: a seek to the end", + "playing": true, + "rate": 1000000, + "controlled": 3600000000, + "duration": 3600000000, + "presented": 3599800000, + "correction": { + "action": "seek", + "value": 3600000000 + } + }, + { + "about": "ended, at the end: hold", + "playing": true, + "rate": 1000000, + "controlled": 3600000000, + "duration": 3600000000, + "presented": 3600000000, + "correction": { + "action": "hold" + } + } + ] + } +} diff --git a/wai/wai-rs/Cargo.toml b/wai/wai-rs/Cargo.toml index c7f6ff609..29fa0fb7c 100644 --- a/wai/wai-rs/Cargo.toml +++ b/wai/wai-rs/Cargo.toml @@ -248,6 +248,15 @@ energy_steering = ["live_metering"] # restricting decision as a statement of reasons in the DSA Transparency Database's format, # written by hand. SHA-256, Ed25519 and the key log only; no new dependency. live_moderation = ["live_events", "live_room", "live_record"] +# Co-watch (extensions/co-watch): `wai.live.cowatch` — a room watching one source together: the +# authority's co-watch policy (WXP1) naming the source and its bounds, controls (WXC1: play, pause, +# seek, rate) effective at a stated room-clock instant ahead of their sending and applied in a +# pinned order, the controlled position they define, players' signed presentation statements +# (WXS1), and the room clock's skew statements (WXK1) per window, recomputed from the statements: +# each viewer's error and each pair's skew as percentiles, with verdicts against the bound, a viewer +# with missing statements unknown. And the pinned catch-up rule. SHA-256 and Ed25519 only; no new +# dependency. +co_watch = ["live_events", "live_room"] # Forensic watermark sessions (extensions/forensic-watermark): `wai.live.watermark` — the edge's # signed session record (WWS1: the positions of an ETSI TS 104 002 pattern it embedded, the variant # at each, the token by its digest, the content keys, and a salted commitment to the session's grant @@ -808,6 +817,11 @@ name = "wai_live_moderation_vectors" path = "src/bin/wai_live_moderation_vectors.rs" required-features = ["live_moderation"] +[[bin]] +name = "wai_co_watch_vectors" +path = "src/bin/wai_co_watch_vectors.rs" +required-features = ["co_watch"] + [[bin]] name = "wai_synthesis_vectors" path = "src/bin/wai_synthesis_vectors.rs" @@ -1566,6 +1580,11 @@ name = "live_moderation" path = "tests/live_moderation.rs" required-features = ["live_moderation"] +[[test]] +name = "co_watch" +path = "tests/co_watch.rs" +required-features = ["co_watch"] + [[test]] name = "synthesis" path = "tests/synthesis.rs" diff --git a/wai/wai-rs/src/bin/wai_co_watch_vectors.rs b/wai/wai-rs/src/bin/wai_co_watch_vectors.rs new file mode 100644 index 000000000..c8c9b339d --- /dev/null +++ b/wai/wai-rs/src/bin/wai_co_watch_vectors.rs @@ -0,0 +1,74 @@ +//! Conformance corpus for co-watch (`live-conformance/cowatch/`, extensions/co-watch.md §13). +//! +//! wai_co_watch_vectors gen write vectors.json, from fixed seeds +//! wai_co_watch_vectors verify every file regenerates byte for byte, no other +//! file but README.md is there, and every case gets +//! the outcome it states +//! +//! The generator and this verifier are one implementation. The corpus's second +//! implementation is `live-conformance/co_watch_verify.py`, written from the extension's +//! text and sharing no code with this binary. + +use std::collections::BTreeMap; +use std::path::Path; +use wai::co_watch::corpus; + +fn main() { + let a: Vec = std::env::args().collect(); + match (a.get(1).map(String::as_str), a.get(2)) { + (Some("gen"), Some(d)) => { + if let Err(e) = std::fs::create_dir_all(d) { + eprintln!("create {d}: {e}"); + std::process::exit(1); + } + for (name, body) in corpus::generate() { + let p = Path::new(d).join(&name); + if let Err(e) = std::fs::write(&p, body) { + eprintln!("write {}: {e}", p.display()); + std::process::exit(1); + } + } + println!("wrote {d}"); + } + (Some("verify"), Some(d)) => std::process::exit(verify(Path::new(d))), + _ => { + eprintln!("usage: wai_co_watch_vectors gen|verify "); + std::process::exit(2); + } + } +} + +fn verify(dir: &Path) -> i32 { + let mut files = BTreeMap::new(); + let entries = match std::fs::read_dir(dir) { + Ok(e) => e, + Err(e) => { + eprintln!("read {}: {e}", dir.display()); + return 1; + } + }; + for e in entries.flatten() { + let name = e.file_name().to_string_lossy().into_owned(); + if name == "README.md" { + continue; + } + match std::fs::read_to_string(e.path()) { + Ok(s) => { + files.insert(name, s); + } + Err(err) => { + eprintln!("read {name}: {err}"); + return 1; + } + } + } + let generated: BTreeMap = corpus::generate().into_iter().collect(); + let same = files == generated; + println!("{} every file regenerates byte for byte from its seeds, and no other file is there", if same { "PASS" } else { "FAIL" }); + let fails = corpus::verify(&files); + for f in &fails { + println!("FAIL {f}"); + } + println!("{} every case gets the outcome the corpus states", if fails.is_empty() { "PASS" } else { "FAIL" }); + (!same || !fails.is_empty()) as i32 +} diff --git a/wai/wai-rs/src/co_watch.rs b/wai/wai-rs/src/co_watch.rs new file mode 100644 index 000000000..6cd590164 --- /dev/null +++ b/wai/wai-rs/src/co_watch.rs @@ -0,0 +1,1640 @@ +//! Co-watch — `wai.live.cowatch` ([extensions/co-watch.md]). +//! +//! People in different places watching one programme together in a room. The room authority +//! signs a co-watch policy (`WXP1`) naming the source and the bounds; a principal whose grant +//! allows it sends controls (`WXC1`: play, pause, seek, rate), each effective at a stated +//! room-clock instant ahead of its sending; the controls, applied in a pinned order, define the +//! controlled position of the source at every instant. Each viewer's player signs presentation +//! statements (`WXS1`): the source position it presented at a room-clock instant. The room +//! clock signs skew statements (`WXK1`) per window: each viewer's error from the controlled +//! position and each pair's skew, as percentiles, with verdicts against the policy's bound, +//! which a verifier recomputes; a viewer whose statements are missing is unknown. A player off +//! the controlled position corrects by the pinned catch-up rule. +//! +//! What this module implements, by section of the extension: +//! +//! - §3: the policy, its rules, its chain and the object-sequence source digest; +//! - §4, §5: the statements, the control attribute, controls and their order of application; +//! - §6: the controlled position ([`Timeline`]); +//! - §7: presentation statements; +//! - §8: windows, due slots, samples, settling, percentiles, verdicts and the skew statement +//! ([`WatchFacts::entries`]); +//! - §9: the catch-up rule ([`catch_up`]); +//! - §11: verification over a room the live-rooms verifier replays ([`verify`]). +//! +//! The corpus `live-conformance/cowatch/` is written by [`corpus::generate`] and checked by +//! [`corpus::verify`], and by `live-conformance/co_watch_verify.py`, which shares no code with +//! this module. +//! +//! [extensions/co-watch.md]: ../../extensions/co-watch.md + +use std::collections::{BTreeMap, BTreeSet}; + +use ed25519_dalek::{Signer, SigningKey}; +use sha2::{Digest, Sha256}; + +use crate::live_events::{self as events, kind, Event, Payload}; +use crate::live_room::{self as room, power, Descriptor, Detail, Grant, HeldGrant, RoomOutcome}; + +pub mod corpus; + +/// The capability string this extension registers. +pub const CAPABILITY: &str = "wai.live.cowatch"; +/// The magic of a co-watch policy (§3.1). +pub const POLICY_MAGIC: [u8; 4] = *b"WXP1"; +/// The magic of a control (§5.1). +pub const CONTROL_MAGIC: [u8; 4] = *b"WXC1"; +/// The magic of a presentation statement (§7.1). +pub const PRESENTATION_MAGIC: [u8; 4] = *b"WXS1"; +/// The magic of a skew statement (§8.4). +pub const SKEW_MAGIC: [u8; 4] = *b"WXK1"; +/// The version of every record this revision defines. +pub const RECORD_VERSION: u8 = 1; +/// The domain a policy's signature is made under (§3.2). +pub const POLICY_DOMAIN: &[u8] = b"wai:co-watch-policy\x01"; +/// The domain a presentation statement's signature is made under (§7.1). +pub const PRESENTATION_DOMAIN: &[u8] = b"wai:co-watch-presentation\x01"; +/// The label of an object sequence's digest (§3.5). +pub const SOURCE_DOMAIN: &[u8] = b"wai:co-watch-source\x01"; +/// The grant attribute of the actions a principal may control (§4.4). +pub const CONTROL_ATTR: &str = "watch_control"; +/// Normal speed, in millionths (§2). +pub const NORMAL_RATE: u32 = 1_000_000; +/// The most viewers one skew statement lists (§8.4). +pub const MAX_LISTED: usize = 8; +/// The most slots a policy's window or a statement's window holds (§3.1, §8.1). +pub const MAX_SLOTS: u64 = 1000; +/// A control's length (§5.1). +pub const CONTROL_LEN: usize = 22; +/// A presentation statement's length, its signature included (§7.1). +pub const PRESENTATION_LEN: usize = 186; + +/// A source's type (§3.5). +pub mod source_type { + pub const PACKAGE: u8 = 1; + pub const OBJECTS: u8 = 2; + pub const RECORDING: u8 = 3; +} + +/// A control's action (§5.1); bit `action − 1` of `watch_control` allows it (§4.4). +pub mod action { + pub const PLAY: u8 = 1; + pub const PAUSE: u8 = 2; + pub const SEEK: u8 = 3; + pub const RATE: u8 = 4; +} + +/// A presentation statement's state (§7.1). +pub mod state { + pub const PLAYING: u8 = 1; + pub const PAUSED: u8 = 2; + pub const STALLED: u8 = 3; + pub const ENDED: u8 = 4; +} + +/// A verdict (§8.5). +pub mod verdict { + pub const IN_SYNC: u8 = 1; + pub const OUT_OF_SYNC: u8 = 2; + pub const UNKNOWN: u8 = 3; +} + +/// The name of an action, as the corpus writes it. +pub fn action_name(a: u8) -> &'static str { + match a { + action::PLAY => "play", + action::PAUSE => "pause", + action::SEEK => "seek", + action::RATE => "rate", + _ => "?", + } +} + +/// The name of a verdict, as the corpus writes it. +pub fn verdict_name(v: u8) -> &'static str { + match v { + verdict::IN_SYNC => "in_sync", + verdict::OUT_OF_SYNC => "out_of_sync", + verdict::UNKNOWN => "unknown", + _ => "?", + } +} + +/// The name of a presentation state, as the corpus writes it. +pub fn state_name(s: u8) -> &'static str { + match s { + state::PLAYING => "playing", + state::PAUSED => "paused", + state::STALLED => "stalled", + state::ENDED => "ended", + _ => "?", + } +} + +// --------------------------------------------------------------------------------------- +// §12 Reasons +// --------------------------------------------------------------------------------------- + +/// Why a co-watch verification refused (§12). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Reason { + /// A code a room verifier raises (live-rooms §11, live-events §9). + Room(room::Reason), + CwPolicyMalformed, + CwPolicyUnlinked, + CwSourceMismatch, + CwAttrMalformed, + CwStatementMalformed, + CwNoPolicy, + CwNotPermitted, + ControlNotPermitted, + ControlNotAhead, + ControlBeyondHorizon, + ControlOutOfRange, + PresentationWrongKey, + PresentationAhead, + PresentationWrongSource, + SkewMismatch, + SkewIncomplete, +} + +impl Reason { + /// The codes this extension adds, in §12's order. + pub const ALL: [Reason; 16] = [ + Reason::CwPolicyMalformed, + Reason::CwPolicyUnlinked, + Reason::CwSourceMismatch, + Reason::CwAttrMalformed, + Reason::CwStatementMalformed, + Reason::CwNoPolicy, + Reason::CwNotPermitted, + Reason::ControlNotPermitted, + Reason::ControlNotAhead, + Reason::ControlBeyondHorizon, + Reason::ControlOutOfRange, + Reason::PresentationWrongKey, + Reason::PresentationAhead, + Reason::PresentationWrongSource, + Reason::SkewMismatch, + Reason::SkewIncomplete, + ]; + + pub fn code(self) -> &'static str { + match self { + Reason::Room(r) => r.code(), + Reason::CwPolicyMalformed => "cw_policy_malformed", + Reason::CwPolicyUnlinked => "cw_policy_unlinked", + Reason::CwSourceMismatch => "cw_source_mismatch", + Reason::CwAttrMalformed => "cw_attr_malformed", + Reason::CwStatementMalformed => "cw_statement_malformed", + Reason::CwNoPolicy => "cw_no_policy", + Reason::CwNotPermitted => "cw_not_permitted", + Reason::ControlNotPermitted => "control_not_permitted", + Reason::ControlNotAhead => "control_not_ahead", + Reason::ControlBeyondHorizon => "control_beyond_horizon", + Reason::ControlOutOfRange => "control_out_of_range", + Reason::PresentationWrongKey => "presentation_wrong_key", + Reason::PresentationAhead => "presentation_ahead", + Reason::PresentationWrongSource => "presentation_wrong_source", + Reason::SkewMismatch => "skew_mismatch", + Reason::SkewIncomplete => "skew_incomplete", + } + } +} + +impl std::fmt::Display for Reason { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(self.code()) + } +} + +impl std::error::Error for Reason {} + +fn ev(r: events::Reason) -> Reason { + Reason::Room(room::Reason::Events(r)) +} + +fn sha256(parts: &[&[u8]]) -> [u8; 32] { + let mut h = Sha256::new(); + for p in parts { + h.update(p); + } + h.finalize().into() +} + +pub(crate) fn hex(b: &[u8]) -> String { + b.iter().map(|x| format!("{x:02x}")).collect() +} + +const ZERO: [u8; 32] = [0; 32]; + +/// A cursor that reports running out as `None`. +struct Rd<'a> { + b: &'a [u8], + p: usize, +} + +impl<'a> Rd<'a> { + fn new(b: &'a [u8]) -> Self { + Rd { b, p: 0 } + } + fn take(&mut self, n: usize) -> Option<&'a [u8]> { + let end = self.p.checked_add(n)?; + let s = self.b.get(self.p..end)?; + self.p = end; + Some(s) + } + fn u8(&mut self) -> Option { + Some(self.take(1)?[0]) + } + fn u16(&mut self) -> Option { + Some(u16::from_le_bytes(self.take(2)?.try_into().ok()?)) + } + fn u32(&mut self) -> Option { + Some(u32::from_le_bytes(self.take(4)?.try_into().ok()?)) + } + fn u64(&mut self) -> Option { + Some(u64::from_le_bytes(self.take(8)?.try_into().ok()?)) + } + fn d32(&mut self) -> Option<[u8; 32]> { + self.take(32)?.try_into().ok() + } + fn d64(&mut self) -> Option<[u8; 64]> { + self.take(64)?.try_into().ok() + } + fn done(&self) -> bool { + self.p == self.b.len() + } +} + +fn verify_sig(key: &[u8; 32], domain: &[u8], body: &[u8], sig: &[u8; 64]) -> Result<(), Reason> { + let mut m = domain.to_vec(); + m.extend_from_slice(body); + crate::sig::verify_strict(key, &m, sig).map_err(|e| match e { + crate::sig::SigError::BadKey => ev(events::Reason::BadKey), + crate::sig::SigError::BadSignature => ev(events::Reason::BadSignature), + }) +} + +// --------------------------------------------------------------------------------------- +// §3 The co-watch policy +// --------------------------------------------------------------------------------------- + +/// A co-watch policy (§3.1). +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct WatchPolicy { + pub room: [u8; 32], + pub prev: [u8; 32], + pub effective: u64, + pub source_type: u8, + pub source: [u8; 32], + pub duration_us: u64, + pub lead_ms: u32, + pub horizon_ms: u32, + pub min_rate: u32, + pub max_rate: u32, + pub period_ms: u32, + pub window_ms: u32, + pub settle_ms: u32, + pub bound_us: u32, + pub quantile: u8, + pub tolerance_us: u32, + pub nudge: u32, + pub seek_us: u32, + pub sig: [u8; 64], +} + +impl WatchPolicy { + /// The record from `magic` through `seek_us` (§3.2). + pub fn body(&self) -> Vec { + let mut o = Vec::with_capacity(163); + o.extend_from_slice(&POLICY_MAGIC); + o.push(RECORD_VERSION); + o.extend_from_slice(&self.room); + o.extend_from_slice(&self.prev); + o.extend_from_slice(&self.effective.to_le_bytes()); + o.push(self.source_type); + o.extend_from_slice(&self.source); + o.extend_from_slice(&self.duration_us.to_le_bytes()); + for v in [self.lead_ms, self.horizon_ms, self.min_rate, self.max_rate, self.period_ms, self.window_ms, self.settle_ms, self.bound_us] { + o.extend_from_slice(&v.to_le_bytes()); + } + o.push(self.quantile); + for v in [self.tolerance_us, self.nudge, self.seek_us] { + o.extend_from_slice(&v.to_le_bytes()); + } + o + } + + pub fn to_bytes(&self) -> Vec { + let mut o = self.body(); + o.extend_from_slice(&self.sig); + o + } + + pub fn digest(&self) -> [u8; 32] { + sha256(&[&self.body()]) + } + + /// Signed by the room authority (§3.2). + pub fn sign(mut self, authority: &SigningKey) -> WatchPolicy { + let mut m = POLICY_DOMAIN.to_vec(); + m.extend_from_slice(&self.body()); + self.sig = authority.sign(&m).to_bytes(); + self + } + + /// Read a policy (§3.3 steps 1 to 3), then its rules (`cw_policy_malformed`). The room, + /// the signature and the link are the caller's ([`check_policies`]). + pub fn parse(b: &[u8]) -> Result { + read_head(b, &POLICY_MAGIC)?; + let mut r = Rd::new(&b[5..]); + let t = ev(events::Reason::Truncated); + let p = WatchPolicy { + room: r.d32().ok_or(t)?, + prev: r.d32().ok_or(t)?, + effective: r.u64().ok_or(t)?, + source_type: r.u8().ok_or(t)?, + source: r.d32().ok_or(t)?, + duration_us: r.u64().ok_or(t)?, + lead_ms: r.u32().ok_or(t)?, + horizon_ms: r.u32().ok_or(t)?, + min_rate: r.u32().ok_or(t)?, + max_rate: r.u32().ok_or(t)?, + period_ms: r.u32().ok_or(t)?, + window_ms: r.u32().ok_or(t)?, + settle_ms: r.u32().ok_or(t)?, + bound_us: r.u32().ok_or(t)?, + quantile: r.u8().ok_or(t)?, + tolerance_us: r.u32().ok_or(t)?, + nudge: r.u32().ok_or(t)?, + seek_us: r.u32().ok_or(t)?, + sig: r.d64().ok_or(t)?, + }; + if !r.done() { + return Err(ev(events::Reason::Malformed)); + } + if !p.rules_ok() { + return Err(Reason::CwPolicyMalformed); + } + Ok(p) + } + + /// §3.1's rules over the fields (§3.3). + pub fn rules_ok(&self) -> bool { + (1..=3).contains(&self.source_type) + && self.duration_us > 0 + && self.lead_ms > 0 + && self.period_ms > 0 + && self.bound_us > 0 + && self.nudge > 0 + && self.horizon_ms >= self.lead_ms + && self.min_rate > 0 + && self.min_rate <= NORMAL_RATE + && self.max_rate >= NORMAL_RATE + && self.window_ms.is_multiple_of(self.period_ms) + && (1..=MAX_SLOTS).contains(&(u64::from(self.window_ms) / u64::from(self.period_ms))) + && (1..=100).contains(&self.quantile) + && self.tolerance_us <= self.bound_us + && self.seek_us > self.bound_us + } + + pub fn period_us(&self) -> u64 { + u64::from(self.period_ms) * 1000 + } + + pub fn settle_us(&self) -> u64 { + u64::from(self.settle_ms) * 1000 + } + + /// The catch-up rule's parameters (§9). + pub fn catch_up_params(&self) -> CatchUp { + CatchUp { tolerance_us: self.tolerance_us, seek_us: self.seek_us, nudge: self.nudge, min_rate: self.min_rate, max_rate: self.max_rate } + } + + /// Whether this policy names the source `other` names (§3.4). + pub fn same_source(&self, other: &WatchPolicy) -> bool { + self.source_type == other.source_type && self.source == other.source + } +} + +/// The head every record of this extension reads first (§3.3 step 1): its magic and version. +fn read_head(b: &[u8], magic: &[u8; 4]) -> Result<(), Reason> { + if b.len() < 4 { + return Err(ev(events::Reason::Truncated)); + } + if b[..4] != *magic { + return Err(ev(events::Reason::Malformed)); + } + if b.len() < 5 { + return Err(ev(events::Reason::Truncated)); + } + if b[4] != RECORD_VERSION { + return Err(ev(events::Reason::UnknownVersion)); + } + Ok(()) +} + +/// One object of an object sequence (§3.5). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct SourceObject { + pub content_hash: [u8; 32], + pub duration_ms: u32, +} + +/// An object sequence's digest (§3.5). +pub fn source_digest(objects: &[SourceObject]) -> [u8; 32] { + let mut h = Sha256::new(); + h.update(SOURCE_DOMAIN); + h.update((objects.len() as u32).to_le_bytes()); + for o in objects { + h.update(o.content_hash); + h.update(o.duration_ms.to_le_bytes()); + } + h.finalize().into() +} + +/// An object sequence's duration, in µs (§3.5). +pub fn source_duration_us(objects: &[SourceObject]) -> u64 { + objects.iter().map(|o| u64::from(o.duration_ms)).sum::() * 1000 +} + +/// §3.3 and §3.4 over every policy, in the order given, and the sources given for them +/// (§3.5): the first refusal and the policy's index, or the policies. +pub fn check_policies(d: &Descriptor, room_id: &[u8; 32], policies: &[Vec], sources: &[Option>]) -> Result, (usize, Reason)> { + let mut held: Vec = Vec::new(); + for (i, b) in policies.iter().enumerate() { + let p = WatchPolicy::parse(b).map_err(|r| (i, r))?; + if p.room != *room_id { + return Err((i, ev(events::Reason::WrongRoom))); + } + verify_sig(&d.authority, POLICY_DOMAIN, &p.body(), &p.sig).map_err(|r| (i, r))?; + let linked = match held.last() { + None => p.prev == ZERO && p.effective == 0, + Some(q) => p.prev == q.digest() && p.effective > q.effective && (!p.same_source(q) || p.duration_us == q.duration_us), + }; + if !linked { + return Err((i, Reason::CwPolicyUnlinked)); + } + if let Some(Some(objects)) = sources.get(i) + && (p.source_type != source_type::OBJECTS || source_digest(objects) != p.source || source_duration_us(objects) != p.duration_us) + { + return Err((i, Reason::CwSourceMismatch)); + } + held.push(p); + } + Ok(held) +} + +/// The index of the policy in effect at `t` (§3.4). +pub fn policy_at(policies: &[WatchPolicy], t: u64) -> Option { + policies.iter().rposition(|p| p.effective <= t) +} + +/// The instants each source starts at (§3.4, §6.4), with the index of the policy that starts +/// it. +pub fn starts(policies: &[WatchPolicy]) -> Vec<(u64, usize)> { + let mut out = Vec::new(); + for (i, p) in policies.iter().enumerate() { + if i == 0 || !p.same_source(&policies[i - 1]) { + out.push((p.effective, i)); + } + } + out +} + +// --------------------------------------------------------------------------------------- +// §4 Statements, §4.4 the control attribute +// --------------------------------------------------------------------------------------- + +/// The actions a grant's `watch_control` allows (§4.4), as its bits; `None` without it. +pub fn control_bits(g: &Grant) -> Result, Reason> { + let Some((_, v)) = g.attrs.iter().find(|(k, _)| k == CONTROL_ATTR) else { return Ok(None) }; + let b = v.as_bytes(); + if b.is_empty() || b.len() > 2 || !b.iter().all(u8::is_ascii_digit) || b[0] == b'0' { + return Err(Reason::CwAttrMalformed); + } + let n: u32 = v.parse().map_err(|_| Reason::CwAttrMalformed)?; + if n > 15 { + return Err(Reason::CwAttrMalformed); + } + Ok(Some(n as u8)) +} + +/// Whether a grant may send a control of `action` (§5.2): the direct power, or the action's +/// bit of `watch_control`. +pub fn may_control(g: &Grant, a: u8) -> bool { + if g.caps.powers & power::DIRECT != 0 { + return true; + } + matches!(control_bits(g), Ok(Some(bits)) if (1..=4).contains(&a) && bits & (1 << (a - 1)) != 0) +} + +/// A control (§5.1). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Control { + pub action: u8, + pub at: u64, + pub arg: u64, +} + +impl Control { + pub fn encode(&self) -> Vec { + let mut o = Vec::with_capacity(CONTROL_LEN); + o.extend_from_slice(&CONTROL_MAGIC); + o.push(RECORD_VERSION); + o.push(self.action); + o.extend_from_slice(&self.at.to_le_bytes()); + o.extend_from_slice(&self.arg.to_le_bytes()); + o + } + + fn read(r: &mut Rd) -> Option { + let c = Control { action: r.u8()?, at: r.u64()?, arg: r.u64()? }; + let arg_ok = match c.action { + action::PLAY | action::PAUSE => c.arg == 0, + action::SEEK => true, + action::RATE => c.arg >= 1 && c.arg <= u64::from(u32::MAX), + _ => false, + }; + arg_ok.then_some(c) + } + + /// What the control sets (§5.4): 0 whether the source plays, 1 the position, 2 the rate. + pub fn aspect(&self) -> u8 { + match self.action { + action::PLAY | action::PAUSE => 0, + action::SEEK => 1, + _ => 2, + } + } +} + +/// A presentation statement (§7.1). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Presentation { + pub room: [u8; 32], + pub player: [u8; 32], + pub source: [u8; 32], + pub at: u64, + pub position: u64, + pub state: u8, + pub rate: u32, + pub sig: [u8; 64], +} + +impl Presentation { + /// The record from `magic` through `rate`. + pub fn body(&self) -> Vec { + let mut o = Vec::with_capacity(PRESENTATION_LEN - 64); + o.extend_from_slice(&PRESENTATION_MAGIC); + o.push(RECORD_VERSION); + o.extend_from_slice(&self.room); + o.extend_from_slice(&self.player); + o.extend_from_slice(&self.source); + o.extend_from_slice(&self.at.to_le_bytes()); + o.extend_from_slice(&self.position.to_le_bytes()); + o.push(self.state); + o.extend_from_slice(&self.rate.to_le_bytes()); + o + } + + pub fn encode(&self) -> Vec { + let mut o = self.body(); + o.extend_from_slice(&self.sig); + o + } + + pub fn digest(&self) -> [u8; 32] { + sha256(&[&self.body()]) + } + + /// Signed by `key`, whose public key becomes `player`. + #[allow(clippy::too_many_arguments)] + pub fn sign(key: &SigningKey, room: [u8; 32], source: [u8; 32], at: u64, position: u64, st: u8, rate: u32) -> Presentation { + let mut p = Presentation { room, player: key.verifying_key().to_bytes(), source, at, position, state: st, rate, sig: [0; 64] }; + p.sig = sign_with(key, &p); + p + } + + /// The signature check of §7.2 step 3. + pub fn verify(&self) -> Result<(), Reason> { + verify_sig(&self.player, PRESENTATION_DOMAIN, &self.body(), &self.sig) + } + + fn read(r: &mut Rd) -> Option { + let p = Presentation { room: r.d32()?, player: r.d32()?, source: r.d32()?, at: r.u64()?, position: r.u64()?, state: r.u8()?, rate: r.u32()?, sig: r.d64()? }; + ((state::PLAYING..=state::ENDED).contains(&p.state) && p.rate > 0).then_some(p) + } +} + +/// The signature `key` makes over `p`'s body, whatever key `p` names: a corpus control signs +/// a statement naming one player with another's key. +pub fn sign_with(key: &SigningKey, p: &Presentation) -> [u8; 64] { + let mut m = PRESENTATION_DOMAIN.to_vec(); + m.extend_from_slice(&p.body()); + key.sign(&m).to_bytes() +} + +/// One viewer's entry of a skew statement (§8.4). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct ViewerEntry { + pub principal: [u8; 32], + pub held: u64, + pub due: u16, + pub samples: u16, + pub counted: u16, + pub p50: u32, + pub pq: u32, + pub max: u32, + pub verdict: u8, +} + +/// One pair's entry of a skew statement (§8.4). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct PairEntry { + pub a: u8, + pub b: u8, + pub n: u16, + pub p50: u32, + pub pq: u32, + pub max: u32, + pub verdict: u8, +} + +/// A skew statement (§8.4). +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Skew { + pub from: u64, + pub to: u64, + pub bound_us: u32, + pub quantile: u8, + pub viewers: Vec, + pub pairs: Vec, +} + +impl Skew { + pub fn encode(&self) -> Vec { + let mut o = Vec::new(); + o.extend_from_slice(&SKEW_MAGIC); + o.push(RECORD_VERSION); + o.extend_from_slice(&self.from.to_le_bytes()); + o.extend_from_slice(&self.to.to_le_bytes()); + o.extend_from_slice(&self.bound_us.to_le_bytes()); + o.push(self.quantile); + o.push(self.viewers.len() as u8); + for v in &self.viewers { + o.extend_from_slice(&v.principal); + o.extend_from_slice(&v.held.to_le_bytes()); + for x in [v.due, v.samples, v.counted] { + o.extend_from_slice(&x.to_le_bytes()); + } + for x in [v.p50, v.pq, v.max] { + o.extend_from_slice(&x.to_le_bytes()); + } + o.push(v.verdict); + } + o.push(self.pairs.len() as u8); + for p in &self.pairs { + o.push(p.a); + o.push(p.b); + o.extend_from_slice(&p.n.to_le_bytes()); + for x in [p.p50, p.pq, p.max] { + o.extend_from_slice(&x.to_le_bytes()); + } + o.push(p.verdict); + } + o + } + + fn read(r: &mut Rd) -> Option { + let (from, to, bound_us, quantile) = (r.u64()?, r.u64()?, r.u32()?, r.u8()?); + let nv = r.u8()? as usize; + if !(1..=MAX_LISTED).contains(&nv) { + return None; + } + let mut viewers = Vec::with_capacity(nv); + for _ in 0..nv { + let v = ViewerEntry { principal: r.d32()?, held: r.u64()?, due: r.u16()?, samples: r.u16()?, counted: r.u16()?, p50: r.u32()?, pq: r.u32()?, max: r.u32()?, verdict: r.u8()? }; + if !(verdict::IN_SYNC..=verdict::UNKNOWN).contains(&v.verdict) { + return None; + } + viewers.push(v); + } + if !viewers.windows(2).all(|w| w[0].principal < w[1].principal) { + return None; + } + let np = r.u8()? as usize; + let want: Vec<(u8, u8)> = (0..nv).flat_map(|a| (a + 1..nv).map(move |b| (a as u8, b as u8))).collect(); + if np != want.len() { + return None; + } + let mut pairs = Vec::with_capacity(np); + for &(wa, wb) in &want { + let p = PairEntry { a: r.u8()?, b: r.u8()?, n: r.u16()?, p50: r.u32()?, pq: r.u32()?, max: r.u32()?, verdict: r.u8()? }; + if (p.a, p.b) != (wa, wb) || !(verdict::IN_SYNC..=verdict::UNKNOWN).contains(&p.verdict) { + return None; + } + pairs.push(p); + } + Some(Skew { from, to, bound_us, quantile, viewers, pairs }) + } +} + +/// A statement of this extension (§4.1). +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Statement { + Control(Control), + Presentation(Presentation), + Skew(Skew), +} + +impl Statement { + pub fn encode(&self) -> Vec { + match self { + Statement::Control(c) => c.encode(), + Statement::Presentation(p) => p.encode(), + Statement::Skew(s) => s.encode(), + } + } +} + +/// Whether a `meta` payload is one of this extension's statements: its magic is one of §4.1. +pub fn is_statement(payload: &[u8]) -> bool { + payload.len() >= 4 && [CONTROL_MAGIC, PRESENTATION_MAGIC, SKEW_MAGIC].iter().any(|m| payload[..4] == *m) +} + +/// Read a statement (§4.2): `None` for a payload that is not this extension's. +pub fn read_statement(payload: &[u8]) -> Option> { + if !is_statement(payload) { + return None; + } + let bad = Err(Reason::CwStatementMalformed); + if payload.len() < 5 || payload[4] != RECORD_VERSION { + return Some(bad); + } + let mut r = Rd::new(&payload[5..]); + let s = match payload[..4].try_into().expect("four bytes") { + CONTROL_MAGIC => Control::read(&mut r).map(Statement::Control), + PRESENTATION_MAGIC => Presentation::read(&mut r).map(Statement::Presentation), + _ => Skew::read(&mut r).map(Statement::Skew), + }; + Some(match s { + Some(s) if r.done() => Ok(s), + _ => bad, + }) +} + +// --------------------------------------------------------------------------------------- +// §5.4, §6 The order of application and the controlled position +// --------------------------------------------------------------------------------------- + +/// The state of the controlled position (§6.1). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct TimelineState { + pub playing: bool, + pub rate: u32, + pub anchor_at: u64, + pub anchor_pos: u64, +} + +impl TimelineState { + /// A source's start at `s` (§6.4). + pub fn start(s: u64) -> TimelineState { + TimelineState { playing: false, rate: NORMAL_RATE, anchor_at: s, anchor_pos: 0 } + } + + /// The controlled position at `x`, at or after the anchor, for a source of `duration` µs + /// (§6.2). + pub fn position(&self, x: u64, duration: u64) -> u64 { + if !self.playing { + return self.anchor_pos; + } + let ran = (u128::from(x.saturating_sub(self.anchor_at)) * u128::from(self.rate)) / 1_000_000; + let p = u128::from(self.anchor_pos) + ran; + p.min(u128::from(duration)) as u64 + } + + /// Whether the source has ended at `x` (§6.3). + pub fn ended(&self, x: u64, duration: u64) -> bool { + self.position(x, duration) >= duration + } + + /// `c` applied at its `at` (§6.3). + pub fn apply(&mut self, c: &Control, duration: u64) { + let p = self.position(c.at, duration); + self.anchor_at = c.at; + self.anchor_pos = p; + match c.action { + action::PLAY => self.playing = true, + action::PAUSE => self.playing = false, + action::SEEK => self.anchor_pos = c.arg, + _ => self.rate = c.arg as u32, + } + } +} + +/// An accepted control with what orders it (§5.4). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct TimedControl { + pub control: Control, + /// Its event's `t` and digest. + pub t: u64, + pub digest: [u8; 32], +} + +impl TimedControl { + fn key(&self) -> (u64, u64, [u8; 32]) { + (self.control.at, self.t, self.digest) + } +} + +/// The controlled position over the room clock (§6): the policies, the starts, the controls +/// in their order of application, and each change of state. +#[derive(Clone, Debug, Default)] +pub struct Timeline { + pub policies: Vec, + pub starts: Vec<(u64, usize)>, + /// The controls in the order of §5.4. + pub controls: Vec, + /// The digests of the controls a later one at their instant overrides (§5.4). + pub overridden: BTreeSet<[u8; 32]>, + /// Each change of state, in order: its instant and the state after it. + pub points: Vec<(u64, TimelineState)>, +} + +impl Timeline { + pub fn build(policies: &[WatchPolicy], controls: &[TimedControl]) -> Timeline { + let mut cs = controls.to_vec(); + cs.sort_by_key(TimedControl::key); + let starts = starts(policies); + let mut overridden = BTreeSet::new(); + for (i, c) in cs.iter().enumerate() { + if cs[i + 1..].iter().take_while(|d| d.control.at == c.control.at).any(|d| d.control.aspect() == c.control.aspect()) { + overridden.insert(c.digest); + } + } + let mut tl = Timeline { policies: policies.to_vec(), starts: starts.clone(), controls: cs.clone(), overridden, points: Vec::new() }; + // The starts and the controls together, a start first at one instant (§6.4). + let mut st: Option = None; + let (mut si, mut ci) = (0, 0); + loop { + let next_start = starts.get(si).map(|s| s.0); + let next_control = cs.get(ci).map(|c| c.control.at); + match (next_start, next_control) { + (None, None) => break, + (Some(s), c) if c.is_none_or(|c| s <= c) => { + let s0 = TimelineState::start(s); + st = Some(s0); + tl.points.push((s, s0)); + si += 1; + } + (_, Some(_)) => { + let c = cs[ci].control; + ci += 1; + if let Some(mut s) = st { + s.apply(&c, tl.duration_at(c.at)); + st = Some(s); + tl.points.push((c.at, s)); + } + } + _ => unreachable!("one of the two is next"), + } + } + tl + } + + /// The duration of the source in effect at `x`. + pub fn duration_at(&self, x: u64) -> u64 { + policy_at(&self.policies, x).map_or(0, |i| self.policies[i].duration_us) + } + + /// The state in effect at `x`: the last change at or before it. + pub fn state_at(&self, x: u64) -> Option { + let i = self.points.partition_point(|p| p.0 <= x); + (i > 0).then(|| self.points[i - 1].1) + } + + /// The controlled position at `x` (§6.4). + pub fn position_at(&self, x: u64) -> u64 { + self.state_at(x).map_or(0, |s| s.position(x, self.duration_at(x))) + } + + /// The instants a sample settles after, but a viewer's joins (§8.3): every accepted + /// control's `at` and every start. + pub fn settle_points(&self) -> Vec { + let mut v: Vec = self.controls.iter().map(|c| c.control.at).chain(self.starts.iter().map(|s| s.0)).collect(); + v.sort_unstable(); + v.dedup(); + v + } +} + +// --------------------------------------------------------------------------------------- +// §9 Catch-up +// --------------------------------------------------------------------------------------- + +/// The parameters of the catch-up rule, from the policy in effect (§9). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct CatchUp { + pub tolerance_us: u32, + pub seek_us: u32, + pub nudge: u32, + pub min_rate: u32, + pub max_rate: u32, +} + +/// The correction the catch-up rule gives (§9). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Correction { + Hold, + Rate(u32), + Seek(u64), +} + +/// §9: a player at `presented` while the controlled position is `controlled`, the source +/// playing or not at the controlled `rate`, of `duration` µs. +pub fn catch_up(p: &CatchUp, playing: bool, rate: u32, controlled: u64, duration: u64, presented: u64) -> Correction { + let e = i128::from(presented) - i128::from(controlled); + let mag = e.unsigned_abs(); + if !playing || controlled >= duration { + return if mag > u128::from(p.tolerance_us) { Correction::Seek(controlled) } else { Correction::Hold }; + } + if mag <= u128::from(p.tolerance_us) { + return Correction::Rate(rate); + } + if mag > u128::from(p.seek_us) { + return Correction::Seek(controlled); + } + let r = if e > 0 { i64::from(rate) - i64::from(p.nudge) } else { i64::from(rate) + i64::from(p.nudge) }; + Correction::Rate(r.clamp(i64::from(p.min_rate), i64::from(p.max_rate)) as u32) +} + +// --------------------------------------------------------------------------------------- +// §8 Skew +// --------------------------------------------------------------------------------------- + +/// A stretch of a principal's presence (§8.2): from a `join` to the following `leave`. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Stretch { + pub principal: [u8; 32], + pub join: u64, + pub leave: Option, +} + +/// A change of a principal's grant in effect (a `join` or a `grant_exchange`), and whether +/// the new grant may subscribe. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct GrantChange { + pub principal: [u8; 32], + pub t: u64, + pub subscribe: bool, +} + +/// An accepted presentation statement, as a sample is drawn from it (§8.3). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct SampleRec { + pub principal: [u8; 32], + pub seq: u64, + pub at: u64, + pub position: u64, +} + +/// What a window's entries are computed from (§8): the policies and the controlled position, +/// who was present when and under what grant, and every accepted presentation statement, in the +/// merged order. +#[derive(Clone, Debug, Default)] +pub struct WatchFacts { + pub timeline: Timeline, + pub stretches: Vec, + pub grants: Vec, + pub samples: Vec, +} + +/// The policy a window is checked under, when `from`–`to` is a window (§8.1): the policy in +/// effect at `from`, in effect up to `to`, with `to` − `from` a whole number of its slots from 1 +/// to 1000. +pub fn window_policy(policies: &[WatchPolicy], from: u64, to: u64) -> Option<&WatchPolicy> { + if from >= to { + return None; + } + let i = policy_at(policies, from)?; + if policy_at(policies, to - 1) != Some(i) { + return None; + } + let p = &policies[i]; + let len = to - from; + (len.is_multiple_of(p.period_us()) && (1..=MAX_SLOTS).contains(&(len / p.period_us()))).then_some(p) +} + +/// The `q`-th percentile of `v` by nearest rank (§8.5), 0 for none; `v` is sorted here. +pub fn percentile(v: &mut [u64], q: u8) -> u64 { + if v.is_empty() { + return 0; + } + v.sort_unstable(); + let n = v.len() as u64; + let rank = (u64::from(q) * n).div_ceil(100); + v[(rank.max(1) - 1) as usize] +} + +fn sat(x: u64) -> u32 { + x.min(u64::from(u32::MAX)) as u32 +} + +/// A window's error rows for one viewer: per slot, the sample's error when it has one, and +/// whether it is counted. +#[derive(Clone, Debug)] +struct Row { + due: Vec, + sample: Vec>, +} + +impl WatchFacts { + /// The policy a window is checked under, when the window is one (§8.1): the policy in + /// effect at `from`, in effect up to `to`, with `to` − `from` a whole number of its slots + /// from 1 to 1000. + pub fn window_policy(&self, from: u64, to: u64) -> Option<&WatchPolicy> { + window_policy(&self.timeline.policies, from, to) + } + + fn subscribes_at(&self, who: &[u8; 32], x: u64) -> bool { + self.grants.iter().rfind(|g| g.principal == *who && g.t <= x).is_some_and(|g| g.subscribe) + } + + fn due(&self, p: &WatchPolicy, from: u64, to: u64, who: &[u8; 32]) -> Vec { + let per = p.period_us(); + let n = ((to - from) / per) as usize; + (0..n) + .map(|j| { + let s = from + j as u64 * per; + let e = s + per; + self.stretches.iter().any(|st| st.principal == *who && st.join <= s && st.leave.is_none_or(|l| l >= e)) && self.subscribes_at(who, s) + }) + .collect() + } + + /// The viewers of the window `from`–`to` (§8.2), ascending. + pub fn viewers(&self, from: u64, to: u64) -> Vec<[u8; 32]> { + let Some(p) = self.window_policy(from, to) else { return vec![] }; + let who: BTreeSet<[u8; 32]> = self.stretches.iter().map(|s| s.principal).collect(); + who.into_iter().filter(|w| self.due(p, from, to, w).iter().any(|d| *d)).collect() + } + + fn settling(&self, p: &WatchPolicy, who: &[u8; 32], at: u64, points: &[u64]) -> bool { + let w = p.settle_us(); + let near = |x: u64| at >= x && at < x.saturating_add(w); + points.iter().any(|&x| near(x)) || self.stretches.iter().any(|s| s.principal == *who && near(s.join)) + } + + fn row(&self, p: &WatchPolicy, from: u64, to: u64, who: &[u8; 32], held: u64, points: &[u64]) -> Row { + let due = self.due(p, from, to, who); + let per = p.period_us(); + let mut sample: Vec> = vec![None; due.len()]; + for s in self.samples.iter().filter(|s| s.principal == *who && s.seq < held && s.at >= from && s.at < to) { + let j = ((s.at - from) / per) as usize; + if !due[j] || sample[j].is_some() { + continue; + } + let e = i128::from(s.position) - i128::from(self.timeline.position_at(s.at)); + sample[j] = Some((e, !self.settling(p, who, s.at, points))); + } + Row { due, sample } + } + + /// The entries of a skew statement listing `listed` (each a viewer and its `held`, in + /// ascending order of key) for the window `from`–`to` (§8.4, §8.5). `None` when the window + /// is not one (§8.1). + pub fn entries(&self, from: u64, to: u64, listed: &[([u8; 32], u64)]) -> Option<(Vec, Vec)> { + let p = self.window_policy(from, to)?; + let points = self.timeline.settle_points(); + let rows: Vec = listed.iter().map(|(w, held)| self.row(p, from, to, w, *held, &points)).collect(); + let bound = u64::from(p.bound_us); + let judge = |unknown: bool, pq: u64| { + if unknown { + verdict::UNKNOWN + } else if pq <= bound { + verdict::IN_SYNC + } else { + verdict::OUT_OF_SYNC + } + }; + let mut viewers = Vec::with_capacity(listed.len()); + for ((w, held), r) in listed.iter().zip(&rows) { + let due = r.due.iter().filter(|d| **d).count(); + let samples = r.sample.iter().filter(|s| s.is_some()).count(); + let mut errs: Vec = r.sample.iter().flatten().filter(|s| s.1).map(|s| s.0.unsigned_abs().min(u128::from(u64::MAX)) as u64).collect(); + let counted = errs.len(); + let (p50, pq, max) = (percentile(&mut errs, 50), percentile(&mut errs, p.quantile), errs.iter().copied().max().unwrap_or(0)); + viewers.push(ViewerEntry { + principal: *w, + held: *held, + due: due as u16, + samples: samples as u16, + counted: counted as u16, + p50: sat(p50), + pq: sat(pq), + max: sat(max), + verdict: judge(samples < due || counted == 0, pq), + }); + } + let mut pairs = Vec::new(); + for a in 0..listed.len() { + for b in a + 1..listed.len() { + let mut d: Vec = rows[a] + .sample + .iter() + .zip(&rows[b].sample) + .filter_map(|(x, y)| match (x, y) { + (Some((ea, true)), Some((eb, true))) => Some((ea - eb).unsigned_abs().min(u128::from(u64::MAX)) as u64), + _ => None, + }) + .collect(); + let n = d.len(); + let (p50, pq, max) = (percentile(&mut d, 50), percentile(&mut d, p.quantile), d.iter().copied().max().unwrap_or(0)); + let unknown = viewers[a].verdict == verdict::UNKNOWN || viewers[b].verdict == verdict::UNKNOWN || n == 0; + pairs.push(PairEntry { a: a as u8, b: b as u8, n: n as u16, p50: sat(p50), pq: sat(pq), max: sat(max), verdict: judge(unknown, pq) }); + } + } + Some((viewers, pairs)) + } + + /// The skew statements a room clock makes for the window `from`–`to`, holding `held` of + /// each principal's events: every viewer of the window, in statements of at most eight, + /// in ascending order of key (§8.4, §8.6). Empty when the window has no viewer or is not + /// one. + pub fn statements(&self, from: u64, to: u64, held: &BTreeMap<[u8; 32], u64>) -> Vec { + let Some(p) = self.window_policy(from, to) else { return vec![] }; + let viewers = self.viewers(from, to); + viewers + .chunks(MAX_LISTED) + .filter_map(|chunk| { + let listed: Vec<([u8; 32], u64)> = chunk.iter().map(|w| (*w, held.get(w).copied().unwrap_or(0))).collect(); + let (v, pr) = self.entries(from, to, &listed)?; + Some(Skew { from, to, bound_us: p.bound_us, quantile: p.quantile, viewers: v, pairs: pr }) + }) + .collect() + } +} + +// --------------------------------------------------------------------------------------- +// §11 Verification +// --------------------------------------------------------------------------------------- + +/// What a co-watch verifier is given (§11.1). +#[derive(Clone, Copy, Debug)] +pub struct Input<'a> { + pub descriptor: &'a [u8], + pub grants: &'a [Vec], + pub head: Option<&'a str>, + pub chains: &'a [Vec>], + pub policies: &'a [Vec], + /// For any policy, by its index, the objects of the object sequence it names. + pub sources: &'a [Option>], +} + +/// Where a verification stopped (§11.2). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum At { + Room(room::At), + Policy(usize), + Grant(usize), + Record { chain: usize, record: usize }, +} + +/// The outcome of a verification (§11.3). +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Outcome { + Accept, + Gap(Vec), + Refuse { at: At, reason: Reason }, +} + +/// A control, as a verification states it (§11.3). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct ControlFact { + pub digest: [u8; 32], + pub author: [u8; 32], + pub t: u64, + pub control: Control, + pub applied: bool, +} + +/// A presentation statement, as a verification states it (§11.3). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct PresentationFact { + pub digest: [u8; 32], + pub player: [u8; 32], + pub at: u64, + pub position: u64, + pub state: u8, + pub controlled: u64, + pub error: i64, + pub settling: bool, +} + +/// A skew statement, as a verification states it (§11.3): its entries recomputed, or none +/// when they are unchecked (a room with a gap). +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct SkewFact { + pub digest: [u8; 32], + pub from: u64, + pub to: u64, + pub recomputed: Option<(Vec, Vec)>, +} + +/// What a verification holds at its end (§11.3). +#[derive(Clone, Debug)] +pub struct Run { + pub outcome: Outcome, + pub room: Option<[u8; 32]>, + pub policies: Vec<[u8; 32]>, + pub starts: Vec<(u64, usize)>, + pub controls: Vec, + pub presentations: Vec, + pub skews: Vec, + pub facts: WatchFacts, +} + +impl Run { + fn new() -> Run { + Run { outcome: Outcome::Accept, room: None, policies: vec![], starts: vec![], controls: vec![], presentations: vec![], skews: vec![], facts: WatchFacts::default() } + } + + fn refuse(mut self, at: At, reason: Reason) -> Run { + self.outcome = Outcome::Refuse { at, reason }; + self + } +} + +/// An accepted record, once, in the merged order. +struct Held { + chain: usize, + record: usize, + ev: Event, + digest: [u8; 32], + under: Option<[u8; 32]>, +} + +/// A skew statement read, its checks that recompute held until every record is read. +struct PendingSkew { + at: At, + digest: [u8; 32], + skew: Skew, +} + +/// Verify a co-watch room (§11). +pub fn verify(i: &Input) -> Run { + let mut run = Run::new(); + // Step 1: the room. + let rr = room::verify_room(i.descriptor, i.grants, i.head, i.chains); + let gaps = match &rr.outcome { + RoomOutcome::Refuse { at, reason } => return run.refuse(At::Room(*at), Reason::Room(*reason)), + RoomOutcome::Gap(g) => Some(g.clone()), + RoomOutcome::Accept => None, + }; + let d = rr.descriptor.clone().expect("a room that is not refused at its descriptor has one"); + let room_id = rr.room.expect("and an id"); + run.room = Some(room_id); + // Step 2: the policies and the sources given. + let policies = match check_policies(&d, &room_id, i.policies, i.sources) { + Ok(p) => p, + Err((k, r)) => return run.refuse(At::Policy(k), r), + }; + run.policies = policies.iter().map(WatchPolicy::digest).collect(); + run.starts = starts(&policies); + // Step 3: the grants' attributes. + for (k, h) in rr.grants.iter().enumerate() { + if let Err(r) = control_bits(&h.grant) { + return run.refuse(At::Grant(k), r); + } + } + let grant_of = |digest: &[u8; 32]| -> Option<&HeldGrant> { rr.grants.iter().find(|h| h.digest == *digest) }; + // The records the room accepted, once each, in the merged order. + let mut held: Vec = Vec::new(); + let mut seen = BTreeSet::new(); + for &(c, r, under) in &rr.order { + let ev = Event::parse(&i.chains[c][r]).expect("the room accepted it"); + let digest = ev.digest(); + if seen.insert(digest) { + held.push(Held { chain: c, record: r, ev, digest, under }); + } + } + // Presence and grants, from the room's lifecycle (§8.2). + let mut stretches: Vec = Vec::new(); + for h in held.iter().filter(|h| d.is_room_key(&h.ev.principal) && h.ev.kind >= kind::JOIN) { + let Ok(Payload::Lifecycle { kind: k, subject, detail }) = events::parse_payload(h.ev.kind, &h.ev.payload, u16::MAX) else { continue }; + match Detail::parse(k, &detail) { + Ok(Detail::Join { .. }) => stretches.push(Stretch { principal: subject, join: h.ev.t, leave: None }), + Ok(Detail::Leave { .. }) => { + if let Some(s) = stretches.iter_mut().rev().find(|s| s.principal == subject && s.leave.is_none()) { + s.leave = Some(h.ev.t); + } + } + _ => {} + } + } + let grants: Vec = + rr.state.timeline.iter().map(|(p, g, t)| GrantChange { principal: *p, t: *t, subscribe: grant_of(g).is_some_and(|h| h.grant.caps.subscribe) }).collect(); + // Step 4: the statements, in the merged order. + let mut controls: Vec<(TimedControl, [u8; 32])> = Vec::new(); + let mut presentations: Vec<(Presentation, [u8; 32], u64)> = Vec::new(); + let mut pending: Vec = Vec::new(); + for h in &held { + if h.ev.kind != kind::META { + continue; + } + let Some(read) = read_statement(&h.ev.payload) else { continue }; + let at = At::Record { chain: h.chain, record: h.record }; + let s = match read { + Ok(s) => s, + Err(r) => return run.refuse(at, r), + }; + let t = h.ev.t; + let Some(pi) = policy_at(&policies, t) else { return run.refuse(at, Reason::CwNoPolicy) }; + let p = &policies[pi]; + let room_key = d.is_room_key(&h.ev.principal); + match s { + Statement::Control(c) => { + let allowed = room_key || h.under.as_ref().and_then(grant_of).is_some_and(|g| may_control(&g.grant, c.action)); + if !allowed { + return run.refuse(at, Reason::ControlNotPermitted); + } + if c.at < t.saturating_add(u64::from(p.lead_ms) * 1000) { + return run.refuse(at, Reason::ControlNotAhead); + } + if c.at > t.saturating_add(u64::from(p.horizon_ms) * 1000) { + return run.refuse(at, Reason::ControlBeyondHorizon); + } + let q = &policies[policy_at(&policies, c.at).expect("a policy is in effect at t, so at at")]; + let in_range = match c.action { + action::SEEK => c.arg <= q.duration_us, + action::RATE => c.arg >= u64::from(q.min_rate) && c.arg <= u64::from(q.max_rate), + _ => true, + }; + if !in_range { + return run.refuse(at, Reason::ControlOutOfRange); + } + controls.push((TimedControl { control: c, t, digest: h.digest }, h.ev.principal)); + } + Statement::Presentation(ps) => { + if room_key { + return run.refuse(at, Reason::CwNotPermitted); + } + if ps.room != room_id { + return run.refuse(at, ev(events::Reason::WrongRoom)); + } + if ps.player != h.ev.principal { + return run.refuse(at, Reason::PresentationWrongKey); + } + if let Err(r) = ps.verify() { + return run.refuse(at, r); + } + if ps.at > t { + return run.refuse(at, Reason::PresentationAhead); + } + let q = &policies[policy_at(&policies, ps.at).expect("the first policy is in effect from 0")]; + if ps.source != q.source { + return run.refuse(at, Reason::PresentationWrongSource); + } + presentations.push((ps, h.digest, h.ev.seq)); + } + Statement::Skew(sk) => { + if !room_key { + return run.refuse(at, Reason::CwNotPermitted); + } + // The window (§8.1), checked as the facts check it, before any are held. + let Some(wp) = window_policy(&policies, sk.from, sk.to).cloned() else { return run.refuse(at, Reason::CwStatementMalformed) }; + if sk.to > t { + return run.refuse(at, Reason::CwStatementMalformed); + } + if sk.bound_us != wp.bound_us || sk.quantile != wp.quantile { + return run.refuse(at, Reason::SkewMismatch); + } + pending.push(PendingSkew { at, digest: h.digest, skew: sk }); + } + } + } + // The controlled position, from every accepted control (§5.4, §6). + let timed: Vec = controls.iter().map(|c| c.0).collect(); + let timeline = Timeline::build(&policies, &timed); + run.controls = controls + .iter() + .map(|(c, author)| ControlFact { digest: c.digest, author: *author, t: c.t, control: c.control, applied: !timeline.overridden.contains(&c.digest) }) + .collect(); + let facts = WatchFacts { + timeline, + stretches, + grants, + samples: presentations.iter().map(|(p, _, seq)| SampleRec { principal: p.player, seq: *seq, at: p.at, position: p.position }).collect(), + }; + let points = facts.timeline.settle_points(); + run.presentations = presentations + .iter() + .map(|(p, digest, _)| { + let controlled = facts.timeline.position_at(p.at); + let error = (i128::from(p.position) - i128::from(controlled)).clamp(i128::from(i64::MIN), i128::from(i64::MAX)) as i64; + let settling = policy_at(&policies, p.at).is_some_and(|k| facts.settling(&policies[k], &p.player, p.at, &points)); + PresentationFact { digest: *digest, player: p.player, at: p.at, position: p.position, state: p.state, controlled, error, settling } + }) + .collect(); + // The skew statements' checks that recompute (§8.4 steps 2 and 3), and completeness + // (§8.6): not made with a gap. + let held_count = |w: &[u8; 32]| held.iter().filter(|h| h.ev.principal == *w).count() as u64; + for ps in &pending { + let sk = &ps.skew; + let recomputed = if gaps.is_some() { + None + } else { + let viewers: BTreeSet<[u8; 32]> = facts.viewers(sk.from, sk.to).into_iter().collect(); + if sk.viewers.iter().any(|v| !viewers.contains(&v.principal) || v.held > held_count(&v.principal)) { + run.facts = facts; + return run.refuse(ps.at, Reason::SkewMismatch); + } + let listed: Vec<([u8; 32], u64)> = sk.viewers.iter().map(|v| (v.principal, v.held)).collect(); + let (v, p) = facts.entries(sk.from, sk.to, &listed).expect("the window was checked"); + if v != sk.viewers || p != sk.pairs { + run.facts = facts; + return run.refuse(ps.at, Reason::SkewMismatch); + } + Some((v, p)) + }; + run.skews.push(SkewFact { digest: ps.digest, from: sk.from, to: sk.to, recomputed }); + } + // Step 5: completeness. + if gaps.is_none() { + // Each window a statement names, with the first statement's place and every viewer listed. + type Listed = (At, BTreeSet<[u8; 32]>); + let mut windows: BTreeMap<(u64, u64), Listed> = BTreeMap::new(); + let mut order: Vec<(u64, u64)> = Vec::new(); + for ps in &pending { + let k = (ps.skew.from, ps.skew.to); + let e = windows.entry(k).or_insert_with(|| { + order.push(k); + (ps.at, BTreeSet::new()) + }); + e.1.extend(ps.skew.viewers.iter().map(|v| v.principal)); + } + for k in order { + let (at, listed) = &windows[&k]; + if facts.viewers(k.0, k.1).iter().any(|w| !listed.contains(w)) { + run.facts = facts; + return run.refuse(*at, Reason::SkewIncomplete); + } + } + } + run.facts = facts; + run.outcome = match gaps { + Some(g) => Outcome::Gap(g), + None => Outcome::Accept, + }; + run +} + +#[cfg(test)] +mod tests { + use super::*; + + fn policy() -> WatchPolicy { + WatchPolicy { + room: [7; 32], + prev: ZERO, + effective: 0, + source_type: source_type::OBJECTS, + source: [9; 32], + duration_us: 600_000_000, + lead_ms: 500, + horizon_ms: 10_000, + min_rate: 500_000, + max_rate: 2_000_000, + period_ms: 1000, + window_ms: 5000, + settle_ms: 1500, + bound_us: 200_000, + quantile: 95, + tolerance_us: 40_000, + nudge: 50_000, + seek_us: 1_000_000, + sig: [0; 64], + } + } + + #[test] + fn a_policy_round_trips_and_its_rules_refuse() { + let k = SigningKey::from_bytes(&[3; 32]); + let p = policy().sign(&k); + let b = p.to_bytes(); + assert_eq!(b.len(), 227); + assert_eq!(WatchPolicy::parse(&b), Ok(p.clone())); + assert_eq!(WatchPolicy::parse(&b[..b.len() - 1]), Err(ev(events::Reason::Truncated))); + let mut long = b.clone(); + long.push(0); + assert_eq!(WatchPolicy::parse(&long), Err(ev(events::Reason::Malformed))); + for bad in [ + WatchPolicy { tolerance_us: 200_001, ..policy() }, + WatchPolicy { window_ms: 4500, ..policy() }, + WatchPolicy { seek_us: 200_000, ..policy() }, + WatchPolicy { min_rate: 1_000_001, ..policy() }, + WatchPolicy { max_rate: 999_999, ..policy() }, + WatchPolicy { quantile: 0, ..policy() }, + WatchPolicy { horizon_ms: 499, ..policy() }, + WatchPolicy { source_type: 4, ..policy() }, + WatchPolicy { window_ms: 1_001_000, ..policy() }, + ] { + assert_eq!(WatchPolicy::parse(&bad.sign(&k).to_bytes()), Err(Reason::CwPolicyMalformed)); + } + } + + #[test] + fn statements_read_back_and_malformed_ones_refuse() { + let c = Control { action: action::SEEK, at: 5, arg: 9 }; + assert_eq!(read_statement(&c.encode()), Some(Ok(Statement::Control(c)))); + assert_eq!(c.encode().len(), CONTROL_LEN); + for bad in [Control { action: 5, at: 1, arg: 0 }, Control { action: action::PLAY, at: 1, arg: 1 }, Control { action: action::RATE, at: 1, arg: 0 }] { + assert_eq!(read_statement(&bad.encode()), Some(Err(Reason::CwStatementMalformed))); + } + let k = SigningKey::from_bytes(&[4; 32]); + let p = Presentation::sign(&k, [1; 32], [2; 32], 10, 20, state::PLAYING, NORMAL_RATE); + assert_eq!(p.encode().len(), PRESENTATION_LEN); + assert_eq!(read_statement(&p.encode()), Some(Ok(Statement::Presentation(p)))); + assert!(p.verify().is_ok()); + let mut q = p; + q.position += 1; + assert_eq!(q.verify(), Err(ev(events::Reason::BadSignature))); + assert_eq!(read_statement(b"chat"), None); + assert_eq!(read_statement(b"WXK1"), Some(Err(Reason::CwStatementMalformed))); + } + + #[test] + fn the_controlled_position_follows_the_controls_in_their_order() { + let ps = vec![policy()]; + let tc = |at, t, d: u8, a, arg| TimedControl { control: Control { action: a, at, arg }, t, digest: [d; 32] }; + let s = 1_000_000; + let tl = Timeline::build(&ps, &[tc(2 * s, s, 1, action::PLAY, 0), tc(4 * s, 3 * s, 2, action::RATE, 2_000_000), tc(6 * s, 5 * s, 3, action::PAUSE, 0), tc(6 * s, 5 * s + 1, 4, action::PLAY, 0)]); + assert_eq!(tl.position_at(s), 0, "paused at its start"); + assert_eq!(tl.position_at(3 * s), s, "plays from 2 s"); + assert_eq!(tl.position_at(5 * s), 2 * s + 2 * s, "at twice the rate from 4 s"); + assert!(tl.overridden.contains(&[3; 32]) && !tl.overridden.contains(&[4; 32]), "the later play overrides the pause at one instant"); + assert_eq!(tl.position_at(7 * s), 6 * s + 2 * s, "and it plays on"); + let ended = tl.position_at(10_000 * s); + assert_eq!(ended, 600_000_000, "held at the duration"); + } + + #[test] + fn the_catch_up_rule_has_each_branch() { + let p = policy().catch_up_params(); + let d = 600_000_000; + assert_eq!(catch_up(&p, true, NORMAL_RATE, 10_000_000, d, 10_030_000), Correction::Rate(NORMAL_RATE)); + assert_eq!(catch_up(&p, true, NORMAL_RATE, 10_000_000, d, 10_100_000), Correction::Rate(950_000)); + assert_eq!(catch_up(&p, true, NORMAL_RATE, 10_000_000, d, 9_900_000), Correction::Rate(1_050_000)); + assert_eq!(catch_up(&p, true, 1_980_000, 10_000_000, d, 9_900_000), Correction::Rate(2_000_000)); + assert_eq!(catch_up(&p, true, NORMAL_RATE, 10_000_000, d, 12_000_000), Correction::Seek(10_000_000)); + assert_eq!(catch_up(&p, false, NORMAL_RATE, 10_000_000, d, 10_030_000), Correction::Hold); + assert_eq!(catch_up(&p, false, NORMAL_RATE, 10_000_000, d, 10_050_000), Correction::Seek(10_000_000)); + } + + #[test] + fn percentiles_are_by_nearest_rank() { + let mut v = vec![5, 1, 4, 2, 3]; + assert_eq!(percentile(&mut v, 50), 3); + assert_eq!(percentile(&mut v, 95), 5); + assert_eq!(percentile(&mut v, 1), 1); + assert_eq!(percentile(&mut [], 95), 0); + let mut w: Vec = (1..=20).collect(); + assert_eq!(percentile(&mut w, 95), 19); + } + + #[test] + fn the_control_attribute_reads_and_refuses() { + let mut g = Grant { + room: [0; 32], + principal: [1; 32], + prev: ZERO, + effective: 0, + nbf: 0, + exp: 1, + role: 0, + caps: room::Caps { publish: 0, subscribe: true, max_layer: 0, powers: 0 }, + precedence: 0, + once: [0; 16], + viewer: [0; 16], + policy: events::Policy::default(), + joules_ceiling: room::NO_CEILING, + funds_ceiling: room::NO_CEILING, + currency: [0; 3], + profiles: vec![], + origins: vec![], + attrs: vec![(CONTROL_ATTR.into(), "3".into())], + sig: [0; 64], + }; + assert_eq!(control_bits(&g), Ok(Some(3))); + assert!(may_control(&g, action::PAUSE) && !may_control(&g, action::SEEK)); + g.caps.powers = power::DIRECT; + assert!(may_control(&g, action::SEEK), "the direct power allows every action"); + g.caps.powers = 0; + for bad in ["0", "03", "16", "x", "", "100"] { + g.attrs = vec![(CONTROL_ATTR.into(), bad.into())]; + assert_eq!(control_bits(&g), Err(Reason::CwAttrMalformed), "{bad}"); + } + } +} diff --git a/wai/wai-rs/src/co_watch/corpus.rs b/wai/wai-rs/src/co_watch/corpus.rs new file mode 100644 index 000000000..d9a2563c2 --- /dev/null +++ b/wai/wai-rs/src/co_watch/corpus.rs @@ -0,0 +1,1042 @@ +//! The conformance corpus of extensions/co-watch.md §13: `live-conformance/cowatch/`. +//! +//! [`generate`] writes it from fixed seeds: every key is SHA-256 of this corpus's label and an +//! index, every time is a constant, every error a player states is written here, and Ed25519 +//! signing is deterministic (RFC 8032), so the file is the same bytes on every machine. A room +//! is written from a script of acts in room-clock order: the clock's lifecycle, controls, and +//! each viewer's presentation statements at the controlled position plus a stated error; and +//! the clock's skew statements, which the generator makes as a room clock does, from the room +//! as it stands when it makes them ([`WatchFacts::statements`]). Each vector states the outcome +//! it was written to have, and the generator asserts that this module reaches it, and that the +//! corpus gives every reason of §12. +//! +//! [`verify`] checks a corpus directory's files against this module. +//! `live-conformance/co_watch_verify.py` checks the same files from the extension's text, +//! sharing no code with this module. + +use super::*; +use crate::live_events::Policy as EventPolicy; +use crate::live_room::{Caps, Limits, Recording, Review, Role, NO_CEILING}; +use serde_json::{json, Map, Value}; + +const T0_US: u64 = 1_792_108_800_000_000; +const T0_S: u64 = T0_US / 1_000_000; +const S: u64 = 1_000_000; +const MS: u64 = 1_000; + +const AUTHORITY: u8 = 0; +const CLOCK: u8 = 1; +const HOST: u8 = 2; +const GUEST: u8 = 3; +const LATE: u8 = 4; +const FOURTH: u8 = 5; +const PRINCIPALS: [(&str, u8); 6] = [("authority", AUTHORITY), ("clock", CLOCK), ("host", HOST), ("guest", GUEST), ("late", LATE), ("fourth", FOURTH)]; + +/// The room roles, by index. +const ROLE_HOST: usize = 0; +const ROLE_VIEWER: usize = 1; + +fn key(i: u8) -> SigningKey { + SigningKey::from_bytes(&sha256(&[b"wai:co-watch/corpus/key\x00", &[i]])) +} + +fn pk(i: u8) -> [u8; 32] { + key(i).verifying_key().to_bytes() +} + +/// An object of a source, named by a label. +fn object(label: &str, duration_ms: u32) -> SourceObject { + SourceObject { content_hash: sha256(&[b"wai:co-watch/corpus/object\x00", label.as_bytes()]), duration_ms } +} + +fn bits(ks: &[u8]) -> [u8; 32] { + let mut b = [0u8; 32]; + for &k in ks { + b[(k / 8) as usize] |= 1 << (k % 8); + } + b +} + +fn unhex(s: &str) -> Option> { + if !s.len().is_multiple_of(2) { + return None; + } + (0..s.len()).step_by(2).map(|i| u8::from_str_radix(s.get(i..i + 2)?, 16).ok()).collect() +} + +// ---- rooms ---- + +/// A principal's chain being written. +#[derive(Clone)] +struct Author { + pk: [u8; 32], + seq: u64, + prev: [u8; 32], + records: Vec>, +} + +/// A room being written: its descriptor and grants, and its chains. +#[derive(Clone, Default)] +struct Room { + descriptor: Vec, + id: [u8; 32], + grants: Vec>, + /// Each grant's digest, by the principal it is for. + digests: BTreeMap, + authors: Vec, +} + +impl Room { + fn raw(&mut self, k: &SigningKey, t: u64, kind: u8, payload: Vec) -> [u8; 32] { + let me = k.verifying_key().to_bytes(); + let i = match self.authors.iter().position(|a| a.pk == me) { + Some(i) => i, + None => { + self.authors.push(Author { pk: me, seq: 0, prev: ZERO, records: vec![] }); + self.authors.len() - 1 + } + }; + let a = &mut self.authors[i]; + let e = Event::sign(k, self.id, a.seq, a.prev, t, None, kind, payload); + a.seq += 1; + a.prev = e.digest(); + a.records.push(e.to_bytes()); + a.prev + } + + fn lifecycle(&mut self, t: u64, subject: u8, d: Detail) { + let p = Payload::Lifecycle { kind: d.kind(), subject: pk(subject), detail: d.encode() }; + self.raw(&key(CLOCK), t, p.kind(), p.encode()); + } + + fn chains(&self) -> Vec>> { + self.authors.iter().map(|a| a.records.clone()).collect() + } + + /// The room with every record after `t` left out: a vector refused at a record needs no + /// record after it, since verification stops there. + fn cut(mut self, t: u64) -> Room { + for a in self.authors.iter_mut() { + a.records.retain(|r| Event::parse(r).expect("a corpus record").t <= t); + } + self.authors.retain(|a| !a.records.is_empty()); + self + } + + /// How many events of `who` the room holds. + fn count(&self, who: &[u8; 32]) -> u64 { + self.authors.iter().find(|a| a.pk == *who).map_or(0, |a| a.records.len() as u64) + } +} + +fn role(name: &str, powers: u8) -> Role { + Role { name: name.into(), caps: Caps { publish: 0, subscribe: true, max_layer: 0, powers }, events: bits(&[kind::META, kind::CHAT]) } +} + +/// A watch room: a host whose role holds the direct power, and viewers; each principal's +/// `watch_control` as given (none for `None`). +fn watch_room(members: &[(u8, usize, Option<&str>)]) -> Room { + let d = Descriptor { + authority: pk(AUTHORITY), + clock: pk(CLOCK), + t0_us: T0_US, + tick_us: S, + origin: String::new(), + limits: Limits { max_present: 16, max_publishers: 4, reval_s: 0, ceiling: EventPolicy::default() }, + roles: vec![role("host", power::DIRECT | power::SEEK), role("viewer", power::SEEK)], + slots: vec![], + profiles: vec![], + review: Review { kinds: [0; 32], deadline_ms: 0, fallback: 0 }, + recording: Recording { mode: 0, retention_days: 0, commit_interval_ms: 0, jitter_ms: 0, regions: vec![] }, + sig: [0; 64], + } + .sign(&key(AUTHORITY)); + let id = d.room_id(); + let mut room = Room { descriptor: d.to_bytes(), id, ..Default::default() }; + for &(who, r, attr) in members { + let role = &d.roles[r]; + let g = Grant { + room: id, + principal: pk(who), + prev: ZERO, + effective: 0, + nbf: T0_S - 3_600, + exp: T0_S + 86_400, + role: r as u8, + caps: role.caps, + precedence: 0, + once: [0; 16], + viewer: [0; 16], + policy: EventPolicy::with_kinds(&[kind::META, kind::CHAT]), + joules_ceiling: NO_CEILING, + funds_ceiling: NO_CEILING, + currency: [0; 3], + profiles: vec![], + origins: vec![], + attrs: attr.map(|a| vec![(CONTROL_ATTR.to_string(), a.to_string())]).unwrap_or_default(), + sig: [0; 64], + } + .sign(&key(AUTHORITY)); + room.grants.push(g.to_bytes()); + room.digests.insert(who, g.digest()); + } + room +} + +/// The watch party's policy: an hour-long object sequence of one episode, controls half a +/// second ahead and at most ten, rates from half to twice normal speed, one-second slots in +/// five-second windows, a 200 ms bound at the 95th percentile, and the catch-up rule's 40 ms, +/// 5 % and one second. +fn policy(room: [u8; 32], prev: [u8; 32], effective: u64, objects: &[SourceObject]) -> WatchPolicy { + WatchPolicy { + room, + prev, + effective, + source_type: source_type::OBJECTS, + source: source_digest(objects), + duration_us: source_duration_us(objects), + lead_ms: 500, + horizon_ms: 10_000, + min_rate: 500_000, + max_rate: 2_000_000, + period_ms: 1_000, + window_ms: 5_000, + settle_ms: 1_500, + bound_us: 200_000, + quantile: 95, + tolerance_us: 40_000, + nudge: 50_000, + seek_us: 1_000_000, + sig: [0; 64], + } +} + +fn episode() -> Vec { + vec![object("episode-1", 3_600_000)] +} + +// ---- scripts ---- + +/// How a presentation statement is written wrong, for a control of one defect. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum Pres { + Good, + /// Made and signed by another viewer's player, in this viewer's chain. + OtherPlayer(u8), + /// Naming this viewer, signed by another key. + SignedBy(u8), + /// Its `at` after its event's `t`. + Ahead, + /// Naming another source. + OtherSource, + /// A state outside 1 to 4. + BadState, +} + +/// How a skew statement is written wrong. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum Tamper { + None, + /// The first viewer's `pq` one microsecond more. + Pq, + /// Every viewer stated in sync, its numbers kept. + AllInSync, + /// The policy's bound and one more. + Bound, + /// The first viewer's `held` past what the room holds. + Held, + /// Only the first viewer listed. + FirstOnly, + /// Signed by the host. + ByHost, + /// Its window ending after its event's `t`. + Future, +} + +#[derive(Clone, Debug)] +enum Act { + Join(u8), + Leave(u8), + Control { who: u8, action: u8, at: u64, arg: u64 }, + /// A presentation statement of `who` about instant `x`, its position the controlled one plus + /// `err` µs. + Present { who: u8, x: u64, err: i64, how: Pres }, + /// The clock's skew statements of the window `from`–`to`. + Skew { from: u64, to: u64, tamper: Tamper }, + /// A presentation statement in the clock's own chain. + ClockPresents, + /// A control payload written as given. + RawControl { who: u8, payload: Vec }, +} + +#[derive(Clone, Debug)] +struct Step { + t: u64, + act: Act, +} + +fn at(t: u64, act: Act) -> Step { + Step { t, act } +} + +/// A player's stated error, in µs, for its `k`-th statement: small, deterministic, and on +/// either side of the controlled position. +fn wobble(who: u8, k: u64) -> i64 { + let pattern: [i64; 7] = match who { + HOST => [12, -8, 20, -15, 5, 0, -22], + GUEST => [30, -25, 45, -10, 18, -35, 8], + LATE => [-20, 15, -5, 28, -12, 6, 33], + _ => [400, 420, 390, 410, 405, 395, 415], + }; + pattern[(k % 7) as usize] * MS as i64 +} + +/// Statements of `who` every half second from `from` to `to`, `t` 40 ms after each instant; +/// a player that has just joined or seen a control states the error it then has. +fn presents(who: u8, from: u64, to: u64, settle_err: &dyn Fn(u64) -> Option) -> Vec { + let mut out = Vec::new(); + let mut x = from; + let mut k = 0; + while x < to { + let err = settle_err(x).unwrap_or_else(|| wobble(who, k)); + out.push(at(x + 40 * MS, Act::Present { who, x, err, how: Pres::Good })); + x += 500 * MS; + k += 1; + } + out +} + +/// The watch party (§13): host and guest from 1 s, the late joiner from 11 s, controls, a +/// conflict at 20 s, and the clock's statements of every five-second window to 25 s. +fn party_script(late_states: bool) -> Vec { + let mut v = vec![at(S, Act::Join(HOST)), at(S, Act::Join(GUEST)), at(11 * S, Act::Join(LATE))]; + let c = |t: u64, who, action, at_: u64, arg| at(t, Act::Control { who, action, at: at_, arg }); + v.extend([ + c(2 * S, HOST, action::PLAY, 2_600 * MS, 0), + c(5_400 * MS, GUEST, action::PAUSE, 6 * S, 0), + c(7_300 * MS, GUEST, action::PLAY, 8 * S, 0), + c(9 * S, HOST, action::SEEK, 10 * S, 120 * S), + c(13_200 * MS, HOST, action::RATE, 14 * S, 1_250_000), + c(17_500 * MS, HOST, action::RATE, 18 * S, 1_000_000), + // Two controls for one instant set whether the source plays: the later prevails. + c(19_200 * MS, GUEST, action::PAUSE, 20 * S, 0), + c(19_400 * MS, HOST, action::PLAY, 20 * S, 0), + c(19_400 * MS, HOST, action::SEEK, 20 * S, 200 * S), + ]); + // A player just after a control states a transient error; the late joiner states its + // seek on joining. + let controls = [2_600 * MS, 6 * S, 8 * S, 10 * S, 14 * S, 18 * S, 20 * S]; + let transient = move |x: u64| controls.iter().any(|&c| x >= c && x < c + 300 * MS).then_some(60_000); + v.extend(presents(HOST, 1_100 * MS, 25 * S, &transient)); + v.extend(presents(GUEST, 1_300 * MS, 25 * S, &transient)); + if late_states { + v.extend(presents(LATE, 11_200 * MS, 25 * S, &move |x| if x < 12 * S { Some(700_000) } else { transient(x) })); + } + for w in 0..5 { + v.push(at((5 * w + 5) * S + 600 * MS, Act::Skew { from: 5 * w * S, to: (5 * w + 5) * S, tamper: Tamper::None })); + } + v +} + +fn party_members(guest_attr: &str) -> Vec<(u8, usize, Option<&str>)> { + vec![(HOST, ROLE_HOST, None), (GUEST, ROLE_VIEWER, Some(guest_attr)), (LATE, ROLE_VIEWER, None)] +} + +/// A room written from `script` (stably sorted by `t`) under `policies`. +fn write(room: &mut Room, policies: &[WatchPolicy], script: &[Step]) { + let mut steps = script.to_vec(); + steps.sort_by_key(|s| s.t); + let pb: Vec> = policies.iter().map(WatchPolicy::to_bytes).collect(); + // The controls written so far: a player states its error from the position they define. + let mut written: Vec = Vec::new(); + for s in &steps { + let t = s.t; + match &s.act { + Act::Join(who) => { + let g = room.digests[who]; + room.lifecycle(t, *who, Detail::Join { grant: g }); + } + Act::Leave(who) => room.lifecycle(t, *who, Detail::Leave { reason: room::leave::LEFT }), + Act::Control { who, action, at, arg } => { + let control = Control { action: *action, at: *at, arg: *arg }; + let digest = room.raw(&key(*who), t, kind::META, control.encode()); + written.push(TimedControl { control, t, digest }); + } + Act::RawControl { who, payload } => { + room.raw(&key(*who), t, kind::META, payload.clone()); + } + Act::Present { who, x, err, how } => { + let tl = Timeline::build(policies, &written); + let pi = policy_at(policies, *x).expect("a policy from 0"); + let pol = &policies[pi]; + let controlled = tl.position_at(*x); + let st = tl.state_at(*x).expect("a state from 0"); + let position = (i128::from(controlled) + i128::from(*err)).max(0) as u64; + let duration = pol.duration_us; + let (rate, state_) = if !st.playing { + (st.rate, state::PAUSED) + } else if controlled >= duration { + (st.rate, state::ENDED) + } else { + let r = match catch_up(&pol.catch_up_params(), true, st.rate, controlled, duration, position) { + Correction::Rate(r) => r, + _ => st.rate, + }; + (r, state::PLAYING) + }; + let source = if *how == Pres::OtherSource { sha256(&[b"wai:co-watch/corpus/another source"]) } else { pol.source }; + let at_ = if *how == Pres::Ahead { t + S } else { *x }; + let mut p = Presentation::sign(&key(*who), room.id, source, at_, position, state_, rate); + match how { + Pres::OtherPlayer(o) => p = Presentation::sign(&key(*o), room.id, source, at_, position, state_, rate), + Pres::SignedBy(o) => p.sig = sign_with(&key(*o), &p), + _ => {} + } + let mut b = p.encode(); + if *how == Pres::BadState { + b[5 + 32 + 32 + 32 + 16] = 9; + p = Presentation { state: 9, ..p }; + let sig = sign_with(&key(*who), &p); + b.truncate(b.len() - 64); + b.extend_from_slice(&sig); + } + room.raw(&key(*who), t, kind::META, b); + } + Act::ClockPresents => { + let p = Presentation::sign(&key(CLOCK), room.id, policies[0].source, t - 10 * MS, 0, state::PAUSED, NORMAL_RATE); + room.raw(&key(CLOCK), t, kind::META, p.encode()); + } + Act::Skew { from, to, tamper } => { + let run = run_of(room, &pb, &[]); + let held: BTreeMap<[u8; 32], u64> = room.authors.iter().map(|a| (a.pk, room.count(&a.pk))).collect(); + let mut sts = run.facts.statements(*from, *to, &held); + if sts.is_empty() { + continue; + } + for sk in sts.iter_mut() { + match tamper { + Tamper::None | Tamper::ByHost => {} + Tamper::Pq => sk.viewers[0].pq += 1, + Tamper::AllInSync => sk.viewers.iter_mut().for_each(|v| v.verdict = verdict::IN_SYNC), + Tamper::Bound => sk.bound_us += 1, + Tamper::Held => sk.viewers[0].held += 1_000, + Tamper::FirstOnly => { + sk.viewers.truncate(1); + sk.pairs.clear(); + } + Tamper::Future => {} + } + } + let signer = if *tamper == Tamper::ByHost { HOST } else { CLOCK }; + let when = if *tamper == Tamper::Future { *to - 100 * MS } else { t }; + for sk in sts { + room.raw(&key(signer), when, kind::META, sk.encode()); + } + } + } + } +} + +fn run_of(room: &Room, policies: &[Vec], sources: &[Option>]) -> Run { + let chains = room.chains(); + super::verify(&Input { descriptor: &room.descriptor, grants: &room.grants, head: None, chains: &chains, policies, sources }) +} + +// ---- vectors ---- + +/// What a vector was written to do. +#[derive(Clone, Copy, Debug)] +enum Intent { + Accept, + Gap, + /// Refused, at a place of this kind (`room`, `policy`, `grant`, `record`), with this reason. + Refuse(&'static str, Reason), +} + +struct Vector { + name: &'static str, + about: &'static str, + room: Room, + policies: Vec>, + sources: Vec>>, + intent: Intent, +} + +impl Vector { + fn run(&self) -> Run { + run_of(&self.room, &self.policies, &self.sources) + } +} + +/// The watch party's room and policy with `script`, the guest's `watch_control` as given. +fn party_with(guest_attr: &str, script: &[Step]) -> (Room, Vec) { + let mut room = watch_room(&party_members(guest_attr)); + let ps = vec![policy(room.id, ZERO, 0, &episode()).sign(&key(AUTHORITY))]; + write(&mut room, &ps, script); + (room, ps) +} + +fn bytes(ps: &[WatchPolicy]) -> Vec> { + ps.iter().map(WatchPolicy::to_bytes).collect() +} + +fn party_vector(name: &'static str, about: &'static str, script: Vec, intent: Intent) -> Vector { + let (room, ps) = party_with("3", &script); + Vector { name, about, room, policies: bytes(&ps), sources: vec![Some(episode())], intent } +} + +/// [`party_vector`], every record after `cut` left out. +fn party_cut(name: &'static str, about: &'static str, script: Vec, cut: u64, intent: Intent) -> Vector { + let mut v = party_vector(name, about, script, intent); + v.room = v.room.cut(cut); + v +} + +/// The party's script with `extra` added. +fn party_plus(extra: Vec) -> Vec { + let mut s = party_script(true); + s.extend(extra); + s +} + +/// The party's script with its statements of the window from `from` tampered. +fn party_tampered(from: u64, tamper: Tamper, late_states: bool) -> Vec { + let mut s = party_script(late_states); + for st in s.iter_mut() { + if let Act::Skew { from: f, tamper: tp, .. } = &mut st.act + && *f == from + { + *tp = tamper; + } + } + s +} + +/// The party's script with one presentation statement of `who` about `x` written as `how`. +fn party_pres(who: u8, x: u64, how: Pres) -> Vec { + let mut s = party_script(true); + for st in s.iter_mut() { + if let Act::Present { who: w, x: xx, how: h, .. } = &mut st.act + && *w == who + && *xx == x + { + *h = how; + } + } + s +} + +fn control(t: u64, who: u8, a: u8, at_: u64, arg: u64) -> Step { + at(t, Act::Control { who, action: a, at: at_, arg }) +} + +/// The room in which one viewer drifts, one misses a slot, one leaves, and a window is stated +/// in two statements. +fn drift_room() -> (Room, Vec) { + let members = vec![(HOST, ROLE_HOST, None), (GUEST, ROLE_VIEWER, Some("3")), (LATE, ROLE_VIEWER, None), (FOURTH, ROLE_VIEWER, None)]; + let mut room = watch_room(&members); + let ps = vec![policy(room.id, ZERO, 0, &episode()).sign(&key(AUTHORITY))]; + let mut s = vec![at(S, Act::Join(HOST)), at(S, Act::Join(GUEST)), at(S, Act::Join(LATE)), at(S, Act::Join(FOURTH)), control(1_600 * MS, HOST, action::PLAY, 2_100 * MS, 0)]; + s.push(at(7 * S, Act::Leave(GUEST))); + let none = |_: u64| None; + s.extend(presents(HOST, 1_100 * MS, 10 * S, &none)); + s.extend(presents(GUEST, 1_300 * MS, 7 * S, &none)); + // The late joiner states nothing about the slot from 6 s. + s.extend(presents(LATE, 1_200 * MS, 10 * S, &none).into_iter().filter(|st| !matches!(st.act, Act::Present { x, .. } if (6 * S..7 * S).contains(&x)))); + s.extend(presents(FOURTH, 1_400 * MS, 10 * S, &none)); + s.push(at(5_600 * MS, Act::Skew { from: 0, to: 5 * S, tamper: Tamper::None })); + write(&mut room, &ps, &s); + // The window from 5 s in two statements, each of two viewers. + let pb = bytes(&ps); + let run = run_of(&room, &pb, &[]); + let held: BTreeMap<[u8; 32], u64> = room.authors.iter().map(|a| (a.pk, room.count(&a.pk))).collect(); + let mut viewers = run.facts.viewers(5 * S, 10 * S); + assert_eq!(viewers.len(), 4, "every viewer has a slot due from 5 s: {:?}", run.outcome); + let second = viewers.split_off(2); + for part in [viewers, second] { + let listed: Vec<([u8; 32], u64)> = part.iter().map(|w| (*w, held[w])).collect(); + let (v, p) = run.facts.entries(5 * S, 10 * S, &listed).expect("a window"); + room.raw(&key(CLOCK), 10_600 * MS, kind::META, Skew { from: 5 * S, to: 10 * S, bound_us: 200_000, quantile: 95, viewers: v, pairs: p }.encode()); + } + (room, ps) +} + +/// The room whose second policy starts another source at 10 s. +fn next_episode() -> (Room, Vec, Vec>>) { + let mut room = watch_room(&[(HOST, ROLE_HOST, None), (GUEST, ROLE_VIEWER, Some("15"))]); + let a = vec![object("episode-1 part 1", 1_500_000), object("episode-1 part 2", 1_500_000)]; + let b = vec![object("episode-2", 2_700_000)]; + let p0 = policy(room.id, ZERO, 0, &a).sign(&key(AUTHORITY)); + let p1 = policy(room.id, p0.digest(), 10 * S, &b).sign(&key(AUTHORITY)); + let ps = vec![p0, p1]; + let none = |_: u64| None; + let mut s = vec![at(S, Act::Join(HOST)), at(S, Act::Join(GUEST)), control(1_600 * MS, HOST, action::PLAY, 2_100 * MS, 0), control(10_300 * MS, GUEST, action::PLAY, 11 * S, 0)]; + s.extend(presents(HOST, 1_100 * MS, 15 * S, &none)); + s.extend(presents(GUEST, 1_300 * MS, 15 * S, &none)); + s.push(at(15_600 * MS, Act::Skew { from: 10 * S, to: 15 * S, tamper: Tamper::None })); + write(&mut room, &ps, &s); + (room, ps, vec![Some(a), Some(b)]) +} + +fn build() -> Vec<(Vector, Run)> { + use Intent::*; + let mut vs: Vec = Vec::new(); + // Accepted. + vs.push(party_vector( + "watch_party", + "three viewers: the host (the direct power) plays, seeks and sets a rate and back; the guest (watch_control 3) pauses and plays; the late joiner (no control) joins at 11 s and seeks; at 20 s the guest's pause and the host's play and seek are for one instant, and the host's play, sent later, overrides the pause; every five-second window stated, every viewer in sync", + party_script(true), + Accept, + )); + { + let (room, ps, sources) = next_episode(); + vs.push(Vector { + name: "next_episode", + about: "a second policy names another source at 10 s: the controlled position starts again there, paused at 0, and a guest's play at 11 s starts it; statements before 10 s name the first source and after it the second, and both sources' objects are given", + room, + policies: bytes(&ps), + sources, + intent: Accept, + }); + } + { + let (room, ps) = drift_room(); + vs.push(Vector { + name: "drift", + about: "four viewers: the fourth states 400 ms ahead and is out of sync; the late joiner states nothing about one slot and is unknown from 5 s; the guest leaves at 7 s and has only the slots it was present for; the window from 5 s is stated in two statements of two viewers each", + room, + policies: bytes(&ps), + sources: vec![None], + intent: Accept, + }); + } + // A gap: one of the guest's statements not delivered. + { + let (mut room, ps) = party_with("3", &party_script(true)); + let g = room.authors.iter_mut().find(|a| a.pk == pk(GUEST)).expect("the guest's chain"); + g.records.remove(20); + vs.push(Vector { name: "gap", about: "the watch party with one of the guest's statements not delivered: a gap, and every skew statement unchecked", room, policies: bytes(&ps), sources: vec![None], intent: Gap }); + } + // Refused: controls, each the last record of its room. + let c4 = |who, a, at_, arg| party_plus(vec![control(4 * S, who, a, at_, arg)]); + vs.push(party_cut("control_without_power", "the late joiner, whose grant carries no watch_control and no direct power, pauses", party_plus(vec![control(11_500 * MS, LATE, action::PAUSE, 12_500 * MS, 0)]), 11_500 * MS, Refuse("record", Reason::ControlNotPermitted))); + vs.push(party_cut("control_beyond_attribute", "the guest, whose watch_control allows play and pause, seeks", c4(GUEST, action::SEEK, 5 * S, 30 * S), 4 * S, Refuse("record", Reason::ControlNotPermitted))); + vs.push(party_cut("control_in_the_past", "the host pauses at an instant a second before it sends the control", c4(HOST, action::PAUSE, 3 * S, 0), 4 * S, Refuse("record", Reason::ControlNotAhead))); + vs.push(party_cut("control_short_lead", "the host pauses 100 ms ahead, under the policy's 500 ms lead", c4(HOST, action::PAUSE, 4_100 * MS, 0), 4 * S, Refuse("record", Reason::ControlNotAhead))); + vs.push(party_cut("control_beyond_horizon", "the host pauses eleven seconds ahead, past the policy's ten", c4(HOST, action::PAUSE, 15 * S, 0), 4 * S, Refuse("record", Reason::ControlBeyondHorizon))); + vs.push(party_cut("seek_past_the_end", "the host seeks past the source's duration", c4(HOST, action::SEEK, 5 * S, 3_600 * S + 1), 4 * S, Refuse("record", Reason::ControlOutOfRange))); + vs.push(party_cut("rate_above_the_limit", "the host sets three times normal speed, past the policy's twice", c4(HOST, action::RATE, 5 * S, 3_000_000), 4 * S, Refuse("record", Reason::ControlOutOfRange))); + { + let mut bad = Control { action: action::PLAY, at: 5 * S, arg: 0 }.encode(); + bad[5] = 5; + vs.push(party_cut("control_unknown_action", "a control of action 5", party_plus(vec![at(4 * S, Act::RawControl { who: HOST, payload: bad })]), 4 * S, Refuse("record", Reason::CwStatementMalformed))); + let mut arg = Control { action: action::PLAY, at: 5 * S, arg: 0 }.encode(); + arg[14] = 1; + vs.push(party_cut("play_with_an_argument", "a play whose arg is not 0", party_plus(vec![at(4 * S, Act::RawControl { who: HOST, payload: arg })]), 4 * S, Refuse("record", Reason::CwStatementMalformed))); + } + vs.push(party_cut("control_before_joining", "the late joiner sends a control before its join: the room refuses it", party_plus(vec![control(5 * S, LATE, action::PAUSE, 6 * S, 0)]), 5 * S, Refuse("room", Reason::Room(room::Reason::NotPresent)))); + // Refused: presentation statements. + let p33 = |how| party_pres(GUEST, 3_300 * MS, how); + vs.push(party_cut("statement_of_another_player", "the guest's chain carries a statement the host's player made and signed", p33(Pres::OtherPlayer(HOST)), 3_400 * MS, Refuse("record", Reason::PresentationWrongKey))); + vs.push(party_cut("statement_signed_by_another_key", "a statement naming the guest's player, signed by the host's key", p33(Pres::SignedBy(HOST)), 3_400 * MS, Refuse("record", Reason::Room(room::Reason::Events(events::Reason::BadSignature))))); + vs.push(party_cut("statement_ahead", "a statement whose instant is a second after its event's", p33(Pres::Ahead), 3_400 * MS, Refuse("record", Reason::PresentationAhead))); + vs.push(party_cut("statement_of_another_source", "a statement naming another source than the policy's", p33(Pres::OtherSource), 3_400 * MS, Refuse("record", Reason::PresentationWrongSource))); + vs.push(party_cut("statement_bad_state", "a statement of state 9", p33(Pres::BadState), 3_400 * MS, Refuse("record", Reason::CwStatementMalformed))); + vs.push(party_cut("statement_by_the_clock", "a presentation statement in the clock's chain", party_plus(vec![at(3 * S, Act::ClockPresents)]), 3 * S, Refuse("record", Reason::CwNotPermitted))); + // Refused: skew statements, each the last record of its room. + let first = |tamper| party_tampered(0, tamper, true); + let w0 = 5_600 * MS; + vs.push(party_cut("skew_does_not_recompute", "the clock's statement of the first window states the first viewer's 95th percentile a microsecond more", first(Tamper::Pq), w0, Refuse("record", Reason::SkewMismatch))); + vs.push(party_cut("missing_viewer_in_sync", "the late joiner states nothing, and the clock's statement of the window from 10 s states every viewer in sync: the late joiner is unknown", party_tampered(10 * S, Tamper::AllInSync, false), 15_600 * MS, Refuse("record", Reason::SkewMismatch))); + vs.push(party_cut("skew_other_bound", "a statement judging by another bound than the policy's", first(Tamper::Bound), w0, Refuse("record", Reason::SkewMismatch))); + vs.push(party_cut("skew_held_too_many", "a statement claiming to have held more of a viewer's events than the room holds", first(Tamper::Held), w0, Refuse("record", Reason::SkewMismatch))); + vs.push(party_cut("skew_leaves_a_viewer_out", "the clock states the first window for its first viewer alone", first(Tamper::FirstOnly), w0, Refuse("record", Reason::SkewIncomplete))); + vs.push(party_cut("skew_by_a_viewer", "a skew statement signed by the host", first(Tamper::ByHost), w0, Refuse("record", Reason::CwNotPermitted))); + vs.push(party_cut("skew_of_the_future", "a skew statement made before its window ends", first(Tamper::Future), w0, Refuse("record", Reason::CwStatementMalformed))); + // Refused: grants, policies and sources. + { + let (room, ps) = party_with("16", &party_script(true)); + vs.push(Vector { name: "attribute_above_15", about: "the guest's grant carries watch_control 16", room: room.cut(2 * S), policies: bytes(&ps), sources: vec![None], intent: Refuse("grant", Reason::CwAttrMalformed) }); + let (room, ps) = party_with("03", &party_script(true)); + vs.push(Vector { name: "attribute_leading_zero", about: "the guest's grant carries watch_control 03", room: room.cut(2 * S), policies: bytes(&ps), sources: vec![None], intent: Refuse("grant", Reason::CwAttrMalformed) }); + } + let (room, ps) = party_with("3", &party_script(true)); + let room = room.cut(2 * S); + let p0 = ps[0].clone(); + let with_policies = |name, about, policies: Vec>, sources: Vec>>, intent| Vector { name, about, room: room.clone(), policies, sources, intent }; + vs.push(with_policies("no_policy", "the watch party given no policy: its first statement is under none", vec![], vec![], Refuse("record", Reason::CwNoPolicy))); + vs.push(with_policies( + "policy_tolerance_above_bound", + "a policy whose catch-up tolerance is above its bound", + vec![WatchPolicy { tolerance_us: 250_000, ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::CwPolicyMalformed), + )); + vs.push(with_policies( + "policy_window_not_whole_slots", + "a policy whose window is not a whole number of slots", + vec![WatchPolicy { window_ms: 4_500, ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::CwPolicyMalformed), + )); + vs.push(with_policies( + "policy_unlinked", + "a second policy whose prev is not the first's digest", + vec![p0.to_bytes(), WatchPolicy { prev: [7; 32], effective: 30 * S, ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::CwPolicyUnlinked), + )); + vs.push(with_policies( + "policy_same_source_other_duration", + "a second policy naming the first's source with another duration", + vec![p0.to_bytes(), WatchPolicy { prev: p0.digest(), effective: 30 * S, duration_us: p0.duration_us + 1, ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::CwPolicyUnlinked), + )); + vs.push(with_policies( + "policy_first_not_from_zero", + "a first policy effective from 1 s", + vec![WatchPolicy { effective: S, ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::CwPolicyUnlinked), + )); + vs.push(with_policies("source_objects_differ", "the policy given objects that are not its source", vec![p0.to_bytes()], vec![Some(vec![object("episode-1", 3_599_000)])], Refuse("policy", Reason::CwSourceMismatch))); + { + let mut t = p0.to_bytes(); + t.truncate(100); + vs.push(with_policies("policy_truncated", "a policy cut short", vec![t], vec![], Refuse("policy", Reason::Room(room::Reason::Events(events::Reason::Truncated))))); + let mut u = p0.to_bytes(); + u[4] = 2; + vs.push(with_policies("policy_unknown_version", "a policy of version 2", vec![u], vec![], Refuse("policy", Reason::Room(room::Reason::Events(events::Reason::UnknownVersion))))); + vs.push(with_policies( + "policy_of_another_room", + "a policy naming another room", + vec![WatchPolicy { room: [7; 32], ..p0.clone() }.sign(&key(AUTHORITY)).to_bytes()], + vec![], + Refuse("policy", Reason::Room(room::Reason::Events(events::Reason::WrongRoom))), + )); + vs.push(with_policies( + "policy_signed_by_the_clock", + "a policy signed by the clock, not the authority", + vec![p0.clone().sign(&key(CLOCK)).to_bytes()], + vec![], + Refuse("policy", Reason::Room(room::Reason::Events(events::Reason::BadSignature))), + )); + } + let out: Vec<(Vector, Run)> = vs.into_iter().map(|v| { + let run = v.run(); + (v, run) + }).collect(); + for (v, run) in &out { + let ok = match (&v.intent, &run.outcome) { + (Intent::Accept, Outcome::Accept) | (Intent::Gap, Outcome::Gap(_)) => true, + (Intent::Refuse(place, reason), Outcome::Refuse { at, reason: r }) => r == reason && place_kind(at) == *place, + _ => false, + }; + assert!(ok, "{}: written to {:?}, verified {:?}", v.name, v.intent, run.outcome); + } + out +} + +fn place_kind(at: &At) -> &'static str { + match at { + At::Room(_) => "room", + At::Policy(_) => "policy", + At::Grant(_) => "grant", + At::Record { .. } => "record", + } +} + +// ---- catch-up cases ---- + +struct Case { + about: &'static str, + playing: bool, + rate: u32, + controlled: u64, + duration: u64, + presented: u64, +} + +fn cases() -> Vec { + let d = 3_600 * S; + let c = |about, playing, rate, controlled, presented| Case { about, playing, rate, controlled, duration: d, presented }; + vec![ + c("playing, 30 ms ahead: within the tolerance, the controlled rate", true, NORMAL_RATE, 10 * S, 10 * S + 30 * MS), + c("playing, exactly the tolerance behind: the controlled rate", true, NORMAL_RATE, 10 * S, 10 * S - 40 * MS), + c("playing, 41 ms ahead: a nudge slower", true, NORMAL_RATE, 10 * S, 10 * S + 41 * MS), + c("playing, 150 ms behind: a nudge faster", true, NORMAL_RATE, 10 * S, 10 * S - 150 * MS), + c("playing, exactly the seek threshold ahead: still a nudge", true, NORMAL_RATE, 10 * S, 11 * S), + c("playing, a microsecond past the seek threshold ahead: a seek", true, NORMAL_RATE, 10 * S, 11 * S + 1), + c("playing, two seconds behind: a seek", true, NORMAL_RATE, 10 * S, 8 * S), + c("playing at the most rate, behind: the rate held at the limit", true, 1_980_000, 10 * S, 10 * S - 100 * MS), + c("playing at the least rate, ahead: the rate held at the limit", true, 520_000, 10 * S, 10 * S + 100 * MS), + c("playing at 1.25, ahead: 1.2", true, 1_250_000, 10 * S, 10 * S + 100 * MS), + c("paused, 30 ms ahead: hold", false, NORMAL_RATE, 10 * S, 10 * S + 30 * MS), + c("paused, 41 ms behind: a seek", false, NORMAL_RATE, 10 * S, 10 * S - 41 * MS), + Case { about: "ended, 200 ms behind: a seek to the end", playing: true, rate: NORMAL_RATE, controlled: d, duration: d, presented: d - 200 * MS }, + Case { about: "ended, at the end: hold", playing: true, rate: NORMAL_RATE, controlled: d, duration: d, presented: d }, + ] +} + +fn correction_json(c: Correction) -> Value { + match c { + Correction::Hold => json!({"action": "hold"}), + Correction::Rate(r) => json!({"action": "rate", "value": r}), + Correction::Seek(p) => json!({"action": "seek", "value": p}), + } +} + +fn case_json(c: &Case, p: &CatchUp) -> Value { + json!({ + "about": c.about, + "playing": c.playing, + "rate": c.rate, + "controlled": c.controlled, + "duration": c.duration, + "presented": c.presented, + "correction": correction_json(catch_up(p, c.playing, c.rate, c.controlled, c.duration, c.presented)), + }) +} + +fn params_json(p: &CatchUp) -> Value { + json!({"tolerance_us": p.tolerance_us, "seek_us": p.seek_us, "nudge": p.nudge, "min_rate": p.min_rate, "max_rate": p.max_rate}) +} + +// ---- JSON ---- + +fn place_json(at: &At) -> Value { + match at { + At::Room(room::At::Descriptor) => json!(["room", "descriptor"]), + At::Room(room::At::KeyLog) => json!(["room", "key_log"]), + At::Room(room::At::Grant(i)) => json!(["room", "grant", i]), + At::Room(room::At::Record { chain, record }) => json!(["room", "record", chain, record]), + At::Policy(i) => json!(["policy", i]), + At::Grant(i) => json!(["grant", i]), + At::Record { chain, record } => json!(["record", chain, record]), + } +} + +fn viewer_json(v: &ViewerEntry) -> Value { + json!({"principal": hex(&v.principal), "held": v.held, "due": v.due, "samples": v.samples, "counted": v.counted, "p50": v.p50, "pq": v.pq, "max": v.max, "verdict": verdict_name(v.verdict)}) +} + +fn pair_json(p: &PairEntry) -> Value { + json!({"a": p.a, "b": p.b, "n": p.n, "p50": p.p50, "pq": p.pq, "max": p.max, "verdict": verdict_name(p.verdict)}) +} + +/// What the corpus states of a vector's outcome (§11.3). +fn run_json(run: &Run) -> Map { + let mut o = Map::new(); + let gaps = match &run.outcome { + Outcome::Refuse { at, reason } => { + o.insert("outcome".into(), json!("refuse")); + o.insert("reason".into(), json!(reason.code())); + o.insert("at".into(), place_json(at)); + return o; + } + Outcome::Gap(g) => { + o.insert("outcome".into(), json!("gap")); + g.clone() + } + Outcome::Accept => { + o.insert("outcome".into(), json!("accept")); + vec![] + } + }; + o.insert("room".into(), json!(hex(&run.room.expect("a room")))); + o.insert("gaps".into(), Value::Array(gaps.iter().map(|g| json!({"principal": hex(&g.principal), "first": g.first, "last": g.last})).collect())); + o.insert("policy_digests".into(), Value::Array(run.policies.iter().map(|d| json!(hex(d))).collect())); + o.insert("starts".into(), Value::Array(run.starts.iter().map(|(t, i)| json!({"at": t, "policy": i})).collect())); + o.insert( + "controls".into(), + Value::Array( + run.controls + .iter() + .map(|c| { + json!({"digest": hex(&c.digest), "author": hex(&c.author), "t": c.t, "action": action_name(c.control.action), "at": c.control.at, "arg": c.control.arg, "applied": c.applied}) + }) + .collect(), + ), + ); + let tl = &run.facts.timeline; + o.insert( + "timeline".into(), + Value::Array( + tl.points + .iter() + .map(|(t, s)| json!({"at": t, "playing": s.playing, "rate": s.rate, "position": s.position(*t, tl.duration_at(*t))})) + .collect(), + ), + ); + o.insert( + "presentations".into(), + Value::Array( + run.presentations + .iter() + .map(|p| { + json!({"digest": hex(&p.digest), "player": hex(&p.player), "at": p.at, "position": p.position, "state": state_name(p.state), "controlled": p.controlled, "error": p.error, "settling": p.settling}) + }) + .collect(), + ), + ); + o.insert( + "skews".into(), + Value::Array( + run.skews + .iter() + .map(|s| match &s.recomputed { + Some((v, p)) => json!({"digest": hex(&s.digest), "from": s.from, "to": s.to, "viewers": v.iter().map(viewer_json).collect::>(), "pairs": p.iter().map(pair_json).collect::>()}), + None => json!({"digest": hex(&s.digest), "from": s.from, "to": s.to, "viewers": "unchecked", "pairs": "unchecked"}), + }) + .collect(), + ), + ); + o +} + +fn sources_json(s: &[Option>]) -> Value { + Value::Array( + s.iter() + .map(|o| match o { + None => Value::Null, + Some(objs) => Value::Array(objs.iter().map(|x| json!({"content_hash": hex(&x.content_hash), "duration_ms": x.duration_ms})).collect()), + }) + .collect(), + ) +} + +fn vector_json(v: &Vector, run: &Run) -> Value { + let mut o = Map::new(); + o.insert("name".into(), json!(v.name)); + o.insert("about".into(), json!(v.about)); + o.insert("descriptor".into(), json!(hex(&v.room.descriptor))); + o.insert("grants".into(), Value::Array(v.room.grants.iter().map(|g| json!(hex(g))).collect())); + o.insert("key_log".into(), Value::Null); + o.insert("chains".into(), Value::Array(v.room.chains().iter().map(|c| Value::Array(c.iter().map(|r| json!(hex(r))).collect())).collect())); + o.insert("policies".into(), Value::Array(v.policies.iter().map(|p| json!(hex(p))).collect())); + o.insert("sources".into(), sources_json(&v.sources)); + o.extend(run_json(run)); + Value::Object(o) +} + +/// Every reason the corpus gives. +fn reasons_given(rooms: &[(Vector, Run)]) -> BTreeSet { + rooms + .iter() + .filter_map(|(_, r)| match &r.outcome { + Outcome::Refuse { reason, .. } => Some(reason.code().to_string()), + _ => None, + }) + .collect() +} + +/// The corpus's files, by name. +pub fn generate() -> Vec<(String, String)> { + let rooms = build(); + let seen = reasons_given(&rooms); + for r in Reason::ALL { + assert!(seen.contains(r.code()), "no vector gives {}", r.code()); + } + let params = policy(ZERO, ZERO, 0, &episode()).catch_up_params(); + let names: Map = PRINCIPALS.iter().map(|(n, i)| (n.to_string(), json!(hex(&pk(*i))))).collect(); + let doc = json!({ + "about": "extensions/co-watch.md §13: watch rooms with their policies, controls, presentation statements and skew statements, the outcome of each with the controlled position and every recomputed entry; and catch-up cases", + "principals": names, + "key_seed": "SHA-256 of \"wai:co-watch/corpus/key\" and a zero byte, then the principal's index (authority 0, clock 1, host 2, guest 3, late 4, fourth 5)", + "vectors": rooms.iter().map(|(v, run)| vector_json(v, run)).collect::>(), + "catch_up": {"params": params_json(¶ms), "cases": cases().iter().map(|c| case_json(c, ¶ms)).collect::>()}, + }); + let mut body = serde_json::to_string_pretty(&doc).expect("JSON"); + body.push('\n'); + vec![("vectors.json".into(), body)] +} + +fn hex_list(v: &Value) -> Option>> { + v.as_array()?.iter().map(|h| unhex(h.as_str()?)).collect() +} + +fn sources_of(v: &Value) -> Option>>> { + v.as_array()? + .iter() + .map(|s| { + if s.is_null() { + return Some(None); + } + let objs: Option> = s + .as_array()? + .iter() + .map(|o| Some(SourceObject { content_hash: unhex(o["content_hash"].as_str()?)?.try_into().ok()?, duration_ms: o["duration_ms"].as_u64()? as u32 })) + .collect(); + Some(Some(objs?)) + }) + .collect() +} + +/// Check a corpus directory's files (by name) against this module: every vector gets the +/// outcome and everything else it states, and every catch-up case its correction. The +/// failures, one line each. +pub fn verify(files: &BTreeMap) -> Vec { + let mut fails = Vec::new(); + let Some(body) = files.get("vectors.json") else { return vec!["no vectors.json".into()] }; + let doc: Value = match serde_json::from_str(body) { + Ok(d) => d, + Err(e) => return vec![format!("vectors.json: {e}")], + }; + for v in doc["vectors"].as_array().into_iter().flatten() { + let name = v["name"].as_str().unwrap_or("?"); + let (Some(descriptor), Some(grants), Some(policies), Some(sources)) = (v["descriptor"].as_str().and_then(unhex), hex_list(&v["grants"]), hex_list(&v["policies"]), sources_of(&v["sources"])) else { + fails.push(format!("{name}: does not read")); + continue; + }; + let Some(chains) = v["chains"].as_array().and_then(|cs| cs.iter().map(hex_list).collect::>>()) else { + fails.push(format!("{name}: chains do not read")); + continue; + }; + let run = verify_room_input(&descriptor, &grants, &chains, &policies, &sources); + for (k, want) in run_json(&run) { + if v.get(&k) != Some(&want) { + fails.push(format!("{name}: {k} differs")); + } + } + } + let c = &doc["catch_up"]; + let p = &c["params"]; + let params = CatchUp { + tolerance_us: p["tolerance_us"].as_u64().unwrap_or(0) as u32, + seek_us: p["seek_us"].as_u64().unwrap_or(0) as u32, + nudge: p["nudge"].as_u64().unwrap_or(0) as u32, + min_rate: p["min_rate"].as_u64().unwrap_or(0) as u32, + max_rate: p["max_rate"].as_u64().unwrap_or(0) as u32, + }; + for (i, k) in c["cases"].as_array().into_iter().flatten().enumerate() { + let got = catch_up( + ¶ms, + k["playing"].as_bool().unwrap_or(false), + k["rate"].as_u64().unwrap_or(0) as u32, + k["controlled"].as_u64().unwrap_or(0), + k["duration"].as_u64().unwrap_or(0), + k["presented"].as_u64().unwrap_or(0), + ); + if correction_json(got) != k["correction"] { + fails.push(format!("catch-up case {i}: {}", k["about"])); + } + } + fails +} + +fn verify_room_input(descriptor: &[u8], grants: &[Vec], chains: &[Vec>], policies: &[Vec], sources: &[Option>]) -> Run { + super::verify(&Input { descriptor, grants, head: None, chains, policies, sources }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn the_corpus_verifies_against_itself() { + let files: BTreeMap = generate().into_iter().collect(); + let fails = verify(&files); + assert!(fails.is_empty(), "{}", fails.join("\n")); + } +} diff --git a/wai/wai-rs/src/lib.rs b/wai/wai-rs/src/lib.rs index c4f49b6a5..3e690c73e 100644 --- a/wai/wai-rs/src/lib.rs +++ b/wai/wai-rs/src/lib.rs @@ -460,6 +460,14 @@ pub mod energy_steering; /// cbindgen:ignore #[cfg(feature = "live_moderation")] pub mod live_moderation; +// Co-watch (extensions/co-watch.md): `wai.live.cowatch` — a room watching one source together: +// the co-watch policy, controls at a room-clock instant ahead of their sending and their pinned +// order, the controlled position, players' signed presentation statements, the room clock's +// skew statements recomputed from them, and the pinned catch-up rule. Rust-only, like the other +// live modules: its constants must not become macros in include/wai.h. +/// cbindgen:ignore +#[cfg(feature = "co_watch")] +pub mod co_watch; // Synthesis provenance (extensions/synthesis.md): `wai.media.synthesis` — the origin claim of an // object, a group or a track and its class (captured, reconstructed, assistive, synthesized), // its IPTC digital source type and C2PA statement, assistive claims proved by recomputing a pinned diff --git a/wai/wai-rs/tests/co_watch.rs b/wai/wai-rs/tests/co_watch.rs new file mode 100644 index 000000000..4a87c40f3 --- /dev/null +++ b/wai/wai-rs/tests/co_watch.rs @@ -0,0 +1,52 @@ +//! `wai.live.cowatch` (extensions/co-watch.md): the committed corpus `live-conformance/cowatch/` +//! regenerates byte for byte from its fixed seeds, holds no other file, every case in it gets the +//! outcome it states, and the extension's §12 lists exactly the reasons the reference reports. +//! The generator itself asserts that the corpus gives every one of them. +#![cfg(feature = "co_watch")] + +use std::collections::BTreeMap; +use std::path::PathBuf; +use wai::co_watch::{corpus, Reason}; + +fn wai_dir() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("..") +} + +fn committed() -> BTreeMap { + let dir = wai_dir().join("live-conformance/cowatch"); + std::fs::read_dir(&dir) + .expect("the committed corpus") + .flatten() + .map(|e| (e.file_name().to_string_lossy().into_owned(), e.path())) + .filter(|(n, _)| n != "README.md") + .map(|(n, p)| (n, std::fs::read_to_string(p).expect("a text file"))) + .collect() +} + +#[test] +fn the_committed_corpus_regenerates_from_its_seeds() { + let files = committed(); + let generated: BTreeMap = corpus::generate().into_iter().collect(); + let extra: Vec<&String> = files.keys().filter(|k| !generated.contains_key(*k)).collect(); + let missing: Vec<&String> = generated.keys().filter(|k| !files.contains_key(*k)).collect(); + let differ: Vec<&String> = generated.iter().filter(|(k, v)| files.get(*k).is_some_and(|f| f != *v)).map(|(k, _)| k).collect(); + assert!(extra.is_empty() && missing.is_empty() && differ.is_empty(), "extra {extra:?}, missing {missing:?}, differ {differ:?}: run `wai_co_watch_vectors gen`"); +} + +#[test] +fn every_case_gets_its_stated_outcome() { + let fails = corpus::verify(&committed()); + assert!(fails.is_empty(), "{}", fails.join("\n")); +} + +/// §12 of the extension lists exactly the codes `Reason::ALL` has, each once, in order. +#[test] +fn the_extension_lists_the_reasons() { + let text = std::fs::read_to_string(wai_dir().join("extensions/co-watch.md")).expect("the extension"); + let at = text.find("\n## 12. Reasons").expect("a §12"); + let end = text[at + 1..].find("\n## ").map_or(text.len(), |e| at + 1 + e); + let listed: Vec = + text[at..end].lines().filter(|l| l.starts_with("| `")).filter_map(|l| l.split('`').nth(1).map(String::from)).collect(); + let want: Vec = Reason::ALL.iter().map(|r| r.code().to_string()).collect(); + assert_eq!(listed, want, "§12's table and Reason::ALL differ"); +} -- 2.54.0 (Apple Git-157) From 2ccc58bd258a6f870e30b28a9103507fa1673447 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:14:35 -0400 Subject: [PATCH 02/16] co_watch_verify.py: the co-watch corpus's second implementation, written from the extension's text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It verifies each room with live_rooms_verify.py, recomputes the controlled position, samples, percentiles and verdicts from §5 to §9, requires every mutated copy of the corpus to fail and catches each of its own checks dropped. Standard library only, run isolated. Co-Authored-By: Claude Opus 5.5 --- wai/extensions/co-watch.md | 4 +- wai/live-conformance/co_watch_verify.py | 794 ++++++++++++++++++++++++ 2 files changed, 796 insertions(+), 2 deletions(-) create mode 100644 wai/live-conformance/co_watch_verify.py diff --git a/wai/extensions/co-watch.md b/wai/extensions/co-watch.md index be43c5993..cff6e1fc6 100644 --- a/wai/extensions/co-watch.md +++ b/wai/extensions/co-watch.md @@ -413,8 +413,8 @@ within the slot, the first in the merged order. A statement the clock had not re made its statement, a later `seq`, is not a sample of that statement, whenever it arrived. A sample's **error** is its `position` less the controlled position at its `at` (§6), a signed -number of microseconds. A sample is **settling** when its `at` is within `settle_ms` × 1000 µs -after a `join` of the viewer, the `at` of an accepted control, or a source's start: at or after +number of microseconds. A sample is **settling** when its `at` is within `settle_ms` × 1000 µs (of the +policy in effect at its `at`) after a `join` of the viewer, the `at` of an accepted control, or a source's start: at or after that instant and before it plus `settle_ms` × 1000. A settling sample fills its slot, and is not **counted**: a viewer seeking to the room on its join, or every viewer applying a control, takes a moment that the bound is not about. diff --git a/wai/live-conformance/co_watch_verify.py b/wai/live-conformance/co_watch_verify.py new file mode 100644 index 000000000..6eb57fc9e --- /dev/null +++ b/wai/live-conformance/co_watch_verify.py @@ -0,0 +1,794 @@ +#!/usr/bin/env python3 +"""Independent verifier of the co-watch corpus (extensions/co-watch.md). + +Written from the extension's text. It shares no code with wai-rs, which generates the corpus, +and never runs it. It checks Ed25519 signatures with ../claim-conformance/_ed25519.py, WAI's +strict rule (SPEC §7 *Signatures*) written from RFC 8032 with the standard library. Each room +is verified by the live-rooms corpus's own second implementation, live_rooms_verify.py +(live-rooms §9), written from its text alone. Everything else is here: + +- the co-watch policy (§3): its layout, rules, signature and chain, and the object-sequence + source digest (§3.5); +- the statements (§4): reading, who signs, the control attribute (§4.4); +- controls (§5): who may control, the lead and the horizon, the range, and the order of + application with the overridden ones; +- the controlled position (§6); +- presentation statements (§7); +- windows, due slots, samples, settling, percentiles, verdicts, the skew statement and + completeness (§8); +- the catch-up rule (§9). + +For every room it requires the outcome, reason and place, and everything else the corpus +states (§11.3); for every catch-up case, its correction; of the corpus, that every reason of +§12 appears in it and that no other file is there. Then it mutates copies of the corpus, one +defect each, and requires every copy to fail; and it drops each of its own checks in turn and +requires the corpus to catch the weakened verifier. + + python3 co_watch_verify.py + python3 co_watch_verify.py --room + +With `--room`, it verifies one room given in a vector's form (descriptor, grants, chains, +policies, sources) and prints what §11.3 states of it, as JSON: a room a deployment kept, +checked from the text alone. + +Exit status 0 only if every case verifies, every mutated copy fails and every weakened +verifier is caught. Python 3.8 or later; standard library only. +""" + +import copy +import hashlib +import json +import os +import re +import struct +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +sys.path.insert(0, os.path.join(HERE, "..", "claim-conformance")) +import live_events_verify as LEV # noqa: E402 +import live_rooms_verify as LRV # noqa: E402 +import _ed25519 as ED # noqa: E402 + +Refuse = LEV.Refuse + +# Ed25519 is a pure function of its inputs: each signature is verified once, and every later +# pass over the corpus (its mutated copies, the weakened verifiers) reads the answer back. +_verified = {} +_verify = ED.verify + + +def _memo_verify(pk, msg, sig, skip=()): + k = (bytes(pk), bytes(msg), bytes(sig), tuple(skip)) + if k not in _verified: + _verified[k] = _verify(pk, msg, sig, skip) + return _verified[k] + + +ED.verify = _memo_verify +EXTENSION = os.path.join(HERE, "..", "extensions", "co-watch.md") + +POLICY_MAGIC, CONTROL_MAGIC, PRESENTATION_MAGIC, SKEW_MAGIC = b"WXP1", b"WXC1", b"WXS1", b"WXK1" +POLICY_DOMAIN = b"wai:co-watch-policy\x01" # §3.2 +PRESENTATION_DOMAIN = b"wai:co-watch-presentation\x01" # §7.1 +SOURCE_DOMAIN = b"wai:co-watch-source\x01" # §3.5 +ZERO = bytes(32) +NORMAL = 1000000 +META, JOIN, LEAVE, EXCHANGE = 0x01, 0x10, 0x11, 0x14 +DIRECT = 2 # live-rooms §3.3, bit 1 +PLAY, PAUSE, SEEK, RATE = 1, 2, 3, 4 +ACTIONS = {1: "play", 2: "pause", 3: "seek", 4: "rate"} +STATES = {1: "playing", 2: "paused", 3: "stalled", 4: "ended"} +VERDICTS = {1: "in_sync", 2: "out_of_sync", 3: "unknown"} +IN_SYNC, OUT_OF_SYNC, UNKNOWN = 1, 2, 3 +U32 = (1 << 32) - 1 + +# Each check this verifier makes, by name; the self-test drops one at a time (§13). +DROP = set() + + +def on(name): + return name not in DROP + + +class Stop(Exception): + def __init__(self, reason, at): + super().__init__(reason) + self.reason, self.at = reason, at + + +def sha(*parts): + h = hashlib.sha256() + for p in parts: + h.update(p) + return h.digest() + + +def reasons_of_extension(): + """§12's table: the codes this extension adds, in order.""" + with open(EXTENSION, encoding="utf-8") as f: + text = f.read() + sec = text[text.index("\n## 12. Reasons"):] + sec = sec[:sec.index("\n## ", 1)] + return re.findall(r"^\| `([a-z_0-9]+)` \|", sec, re.M) + + +REASONS = reasons_of_extension() + + +class Rd: + def __init__(self, b, p=0): + self.b, self.p = b, p + + def take(self, n, why): + if self.p + n > len(self.b): + raise Refuse(why) + s = self.b[self.p:self.p + n] + self.p += n + return s + + def u8(self, why): + return self.take(1, why)[0] + + def u16(self, why): + return struct.unpack(" 0 and p["lead_ms"] > 0 and p["period_ms"] > 0 + and p["bound_us"] > 0 and p["nudge"] > 0 and p["horizon_ms"] >= p["lead_ms"] + and 0 < p["min_rate"] <= NORMAL <= p["max_rate"] + and p["window_ms"] % p["period_ms"] == 0 and 1 <= p["window_ms"] // p["period_ms"] <= 1000 + and 1 <= p["quantile"] <= 100 and p["tolerance_us"] <= p["bound_us"] and p["seek_us"] > p["bound_us"]) + if not ok: + raise Refuse("cw_policy_malformed") + p["digest"] = sha(p["body"]) + return p + + +def source_digest(objects): + """§3.5: an object sequence's digest.""" + out = SOURCE_DOMAIN + struct.pack(" q["effective"] and (not same or p["duration_us"] == q["duration_us"]) + if not linked: + raise Refuse("cw_policy_unlinked") + objs = sources[i] if i < len(sources) else None + if objs is not None and on("sources"): + total = sum(o["duration_ms"] for o in objs) * 1000 + if p["source_type"] != 2 or source_digest(objs) != p["source"] or total != p["duration_us"]: + raise Refuse("cw_source_mismatch") + except Refuse as e: + raise Stop(e.reason, ["policy", i]) + held.append(p) + return held + + +def policy_at(ps, t): + """§3.4: the index of the last policy whose effective is at or below t, or None.""" + k = None + for i, p in enumerate(ps): + if p["effective"] <= t: + k = i + return k + + +def starts_of(ps): + """§3.4, §6.4: (instant, policy index) of each source's start.""" + out = [] + for i, p in enumerate(ps): + if i == 0 or (p["source_type"], p["source"]) != (ps[i - 1]["source_type"], ps[i - 1]["source"]): + out.append((p["effective"], i)) + return out + + +# ---------------------------------------------------------------- §4 statements + +def control_bits(g): + """§4.4: the actions `watch_control` allows, None without it; Refuse when malformed.""" + for k, v in LRV.read_attrs(g["attrs"]) or []: + if k == "watch_control": + if not re.fullmatch(r"[1-9][0-9]?", v) or int(v) > 15: + raise Refuse("cw_attr_malformed") + return int(v) + return None + + +def may_control(g, action): + """§5.2.""" + if g["powers"] & DIRECT: + return True + try: + bits = control_bits(g) + except Refuse: + return False + return bits is not None and bits >> (action - 1) & 1 == 1 + + +def read_statement(payload): + """§4.1, §4.2: None for a payload not this extension's; else (kind, fields).""" + if len(payload) < 4 or payload[:4] not in (CONTROL_MAGIC, PRESENTATION_MAGIC, SKEW_MAGIC): + return None + bad = "cw_statement_malformed" + if len(payload) < 5 or payload[4] != 1: + raise Refuse(bad) + r = Rd(payload, 5) + magic = payload[:4] + if magic == CONTROL_MAGIC: # §5.1 + s = ("control", {"action": r.u8(bad), "at": r.u64(bad), "arg": r.u64(bad)}) + a, arg = s[1]["action"], s[1]["arg"] + if a in (PLAY, PAUSE): + ok = arg == 0 + elif a == SEEK: + ok = True + elif a == RATE: + ok = 1 <= arg <= U32 + else: + ok = False + if not ok: + raise Refuse(bad) + elif magic == PRESENTATION_MAGIC: # §7.1 + f = {"room": r.take(32, bad), "player": r.take(32, bad), "source": r.take(32, bad), "at": r.u64(bad), + "position": r.u64(bad), "state": r.u8(bad), "rate": r.u32(bad)} + f["body"] = payload[:r.p] + f["sig"] = r.take(64, bad) + if f["state"] not in STATES or f["rate"] == 0: + raise Refuse(bad) + s = ("presentation", f) + else: # §8.4 + f = {"from": r.u64(bad), "to": r.u64(bad), "bound_us": r.u32(bad), "quantile": r.u8(bad)} + nv = r.u8(bad) + if not 1 <= nv <= 8: + raise Refuse(bad) + f["viewers"] = [] + for _ in range(nv): + e = {"principal": r.take(32, bad), "held": r.u64(bad), "due": r.u16(bad), "samples": r.u16(bad), + "counted": r.u16(bad), "p50": r.u32(bad), "pq": r.u32(bad), "max": r.u32(bad), "verdict": r.u8(bad)} + if e["verdict"] not in VERDICTS: + raise Refuse(bad) + f["viewers"].append(e) + keys = [e["principal"] for e in f["viewers"]] + if any(keys[i] >= keys[i + 1] for i in range(len(keys) - 1)): + raise Refuse(bad) + want = [(a, b) for a in range(nv) for b in range(a + 1, nv)] + if r.u8(bad) != len(want): + raise Refuse(bad) + f["pairs"] = [] + for a, b in want: + e = {"a": r.u8(bad), "b": r.u8(bad), "n": r.u16(bad), "p50": r.u32(bad), "pq": r.u32(bad), + "max": r.u32(bad), "verdict": r.u8(bad)} + if (e["a"], e["b"]) != (a, b) or e["verdict"] not in VERDICTS: + raise Refuse(bad) + f["pairs"].append(e) + s = ("skew", f) + if r.p != len(payload): + raise Refuse(bad) + return s + + +# ---------------------------------------------------------------- §5.4, §6 the controlled position + +def position(st, x, duration): + """§6.2.""" + if not st["playing"]: + return st["pos"] + return min(duration, st["pos"] + (x - st["anchor"]) * st["rate"] // 1000000) + + +class Timeline: + """§5.4 and §6 over the accepted controls (each with its event's t and digest).""" + + def __init__(self, policies, controls): + self.policies = policies + self.starts = starts_of(policies) + self.controls = sorted(controls, key=lambda c: (c["at"], c["t"], c["digest"])) + self.overridden = set() + aspect = {PLAY: 0, PAUSE: 0, SEEK: 1, RATE: 2} + for i, c in enumerate(self.controls): + for d in self.controls[i + 1:]: + if d["at"] != c["at"]: + break + if aspect[d["action"]] == aspect[c["action"]]: + self.overridden.add(c["digest"]) + events = [(s, 0, k, None) for k, (s, _) in enumerate(self.starts)] + events += [(c["at"], 1, k, c) for k, c in enumerate(self.controls)] + events.sort(key=lambda e: (e[0], e[1], e[2])) + self.points, st = [], None + for x, what, _, c in events: + if what == 0: + st = {"playing": False, "rate": NORMAL, "anchor": x, "pos": 0} + else: + p = position(st, x, self.duration_at(x)) + st = dict(st, anchor=x, pos=p) + if c["action"] == PLAY: + st["playing"] = True + elif c["action"] == PAUSE: + st["playing"] = False + elif c["action"] == SEEK: + st["pos"] = c["arg"] + else: + st["rate"] = c["arg"] + self.points.append((x, st)) + + def duration_at(self, x): + k = policy_at(self.policies, x) + return 0 if k is None else self.policies[k]["duration_us"] + + def state_at(self, x): + st = None + for at, s in self.points: + if at <= x: + st = s + return st + + def position_at(self, x): + st = self.state_at(x) + return 0 if st is None else position(st, x, self.duration_at(x)) + + def settle_points(self): + return sorted({c["at"] for c in self.controls} | {s for s, _ in self.starts}) + + +# ---------------------------------------------------------------- §9 catch-up + +def catch_up(p, playing, rate, controlled, duration, presented): + """§9.""" + e = presented - controlled + if not playing or controlled >= duration: + return {"action": "seek", "value": controlled} if abs(e) > p["tolerance_us"] else {"action": "hold"} + if abs(e) <= p["tolerance_us"]: + return {"action": "rate", "value": rate} + if abs(e) > p["seek_us"]: + return {"action": "seek", "value": controlled} + r = rate - p["nudge"] if e > 0 else rate + p["nudge"] + return {"action": "rate", "value": max(p["min_rate"], min(p["max_rate"], r))} + + +# ---------------------------------------------------------------- §8 skew + +def window_policy(ps, frm, to): + """§8.1: the policy of the window frm–to, or None when it is not one.""" + if frm >= to: + return None + k = policy_at(ps, frm) + if k is None or policy_at(ps, to - 1) != k: + return None + per = ps[k]["period_ms"] * 1000 + n = (to - frm) // per + return ps[k] if (to - frm) % per == 0 and 1 <= n <= 1000 else None + + +def percentile(vals, q): + """§8.5: nearest rank; 0 for none.""" + if not vals: + return 0 + v = sorted(vals) + rank = -(-q * len(v) // 100) + return v[max(rank, 1) - 1] + + +class Facts: + """Presence (§8.2), grants, samples (§8.3) and the timeline.""" + + def __init__(self, timeline, stretches, grant_changes, samples): + self.tl, self.stretches, self.grants, self.samples = timeline, stretches, grant_changes, samples + + def subscribes_at(self, w, x): + last = None + for g in self.grants: + if g["principal"] == w and g["t"] <= x: + last = g + return last is not None and last["subscribe"] + + def due(self, p, frm, to, w): + per = p["period_ms"] * 1000 + out = [] + for j in range((to - frm) // per): + s = frm + j * per + inside = any(st["principal"] == w and st["join"] <= s and (st["leave"] is None or st["leave"] >= s + per) for st in self.stretches) + out.append(inside and self.subscribes_at(w, s)) + return out + + def viewers(self, frm, to): + p = window_policy(self.tl.policies, frm, to) + if p is None: + return [] + who = sorted({st["principal"] for st in self.stretches}) + return [w for w in who if any(self.due(p, frm, to, w))] + + def settling(self, p, w, at): + span = p["settle_ms"] * 1000 + if not on("settle"): + return False + near = [x for x in self.tl.settle_points()] + [st["join"] for st in self.stretches if st["principal"] == w] + return any(x <= at < x + span for x in near) + + def row(self, p, frm, to, w, held): + due = self.due(p, frm, to, w) + per = p["period_ms"] * 1000 + sample = [None] * len(due) + for s in self.samples: + if s["principal"] != w or s["seq"] >= held or not frm <= s["at"] < to: + continue + j = (s["at"] - frm) // per + if not due[j] or sample[j] is not None: + continue + e = s["position"] - self.tl.position_at(s["at"]) + sample[j] = (e, not self.settling(p, w, s["at"])) + return due, sample + + def entries(self, frm, to, listed): + p = window_policy(self.tl.policies, frm, to) + rows = [self.row(p, frm, to, w, held) for w, held in listed] + bound = p["bound_us"] + + def judge(unknown, pq): + return UNKNOWN if unknown else (IN_SYNC if pq <= bound else OUT_OF_SYNC) + + viewers = [] + for (w, held), (due, sample) in zip(listed, rows): + nd = sum(1 for d in due if d) + ns = sum(1 for s in sample if s is not None) + errs = [abs(s[0]) for s in sample if s is not None and s[1]] + p50, pq = percentile(errs, 50), percentile(errs, p["quantile"]) + viewers.append({"principal": w, "held": held, "due": nd, "samples": ns, "counted": len(errs), + "p50": min(p50, U32), "pq": min(pq, U32), "max": min(max(errs, default=0), U32), + "verdict": judge(ns < nd or not errs, pq)}) + pairs = [] + for a in range(len(listed)): + for b in range(a + 1, len(listed)): + d = [abs(x[0] - y[0]) for x, y in zip(rows[a][1], rows[b][1]) if x is not None and y is not None and x[1] and y[1]] + p50, pq = percentile(d, 50), percentile(d, p["quantile"]) + unknown = viewers[a]["verdict"] == UNKNOWN or viewers[b]["verdict"] == UNKNOWN or not d + pairs.append({"a": a, "b": b, "n": len(d), "p50": min(p50, U32), "pq": min(pq, U32), + "max": min(max(d, default=0), U32), "verdict": judge(unknown, pq)}) + return viewers, pairs + + +# ---------------------------------------------------------------- §11 verification + +def viewer_json(v): + return {"principal": v["principal"].hex(), "held": v["held"], "due": v["due"], "samples": v["samples"], "counted": v["counted"], + "p50": v["p50"], "pq": v["pq"], "max": v["max"], "verdict": VERDICTS[v["verdict"]]} + + +def pair_json(p): + return {"a": p["a"], "b": p["b"], "n": p["n"], "p50": p["p50"], "pq": p["pq"], "max": p["max"], "verdict": VERDICTS[p["verdict"]]} + + +def verify(descriptor, grants, chains, policy_blobs, sources): + """§11.2: a dict of what the corpus states (§11.3).""" + room = LRV.verify_room(descriptor, grants, None, chains) # step 1 + if room["outcome"] == "refuse": + return {"outcome": "refuse", "reason": room["reason"], "at": ["room"] + room["at"]} + gap = room["outcome"] == "gap" + d = LRV.read_descriptor(descriptor) + held_grants, _ = LRV.check_grants(d, grants) + by_digest = {g["digest"]: g for g in held_grants} + room_keys = (d["authority"], d["clock"]) + try: + policies = check_policies(d, policy_blobs, sources) # step 2 + for i, g in enumerate(held_grants): # step 3 + if on("attr"): + try: + control_bits(g) + except Refuse as e: + raise Stop(e.reason, ["grant", i]) + records, seen = [], set() + for c, i, under in room["order"]: + ev = LEV.read_record(chains[c][i]) + if ev["digest"] in seen: + continue + seen.add(ev["digest"]) + ev["chain"], ev["index"], ev["under"] = c, i, bytes.fromhex(under) if under else None + records.append(ev) + stretches, grant_changes = [], [] # §8.2 + for ev in records: + if ev["principal"] not in room_keys or ev["kind"] not in (JOIN, LEAVE, EXCHANGE): + continue + pl = LEV.read_payload(ev["kind"], ev["payload"], 1 << 20) + x = LRV.read_detail(ev["kind"], pl["detail"]) + who = pl["subject"] + if ev["kind"] == JOIN: + stretches.append({"principal": who, "join": ev["t"], "leave": None}) + grant_changes.append({"principal": who, "t": ev["t"], "subscribe": by_digest[x["grant"]]["subscribe"] == 1}) + elif ev["kind"] == LEAVE: + for st in reversed(stretches): + if st["principal"] == who and st["leave"] is None: + st["leave"] = ev["t"] + break + else: + grant_changes.append({"principal": who, "t": ev["t"], "subscribe": by_digest[x["new"]]["subscribe"] == 1}) + controls, presentations, pending = [], [], [] + for ev in records: # step 4 + if ev["kind"] != META: + continue + at = ["record", ev["chain"], ev["index"]] + try: + s = read_statement(ev["payload"]) + if s is None: + continue + kind, f = s + t = ev["t"] + k = policy_at(policies, t) + if k is None: + raise Refuse("cw_no_policy") + p = policies[k] + is_key = ev["principal"] in room_keys + if kind == "control": + if on("control_power") and not is_key and not may_control(by_digest[ev["under"]], f["action"]): + raise Refuse("control_not_permitted") + if on("lead") and f["at"] < t + p["lead_ms"] * 1000: + raise Refuse("control_not_ahead") + if on("horizon") and f["at"] > t + p["horizon_ms"] * 1000: + raise Refuse("control_beyond_horizon") + q = policies[policy_at(policies, f["at"])] + if on("range") and ((f["action"] == SEEK and f["arg"] > q["duration_us"]) + or (f["action"] == RATE and not q["min_rate"] <= f["arg"] <= q["max_rate"])): + raise Refuse("control_out_of_range") + controls.append(dict(f, t=t, digest=ev["digest"], author=ev["principal"])) + elif kind == "presentation": + if on("who_presents") and is_key: + raise Refuse("cw_not_permitted") + if f["room"] != d["room"]: + raise Refuse("wrong_room") + if on("wrong_key") and f["player"] != ev["principal"]: + raise Refuse("presentation_wrong_key") + bad = ED.verify(f["player"], PRESENTATION_DOMAIN + f["body"], f["sig"]) if on("pres_sig") else None + if bad: + raise Refuse(bad) + if on("ahead") and f["at"] > t: + raise Refuse("presentation_ahead") + if on("source") and f["source"] != policies[policy_at(policies, f["at"])]["source"]: + raise Refuse("presentation_wrong_source") + presentations.append(dict(f, digest=ev["digest"], seq=ev["seq"])) + else: + if on("who_skews") and not is_key: + raise Refuse("cw_not_permitted") + wp = window_policy(policies, f["from"], f["to"]) + if wp is None or f["to"] > t: + raise Refuse("cw_statement_malformed") + if on("skew_bound") and (f["bound_us"], f["quantile"]) != (wp["bound_us"], wp["quantile"]): + raise Refuse("skew_mismatch") + pending.append((at, ev["digest"], f)) + except Refuse as e: + raise Stop(e.reason, at) + tl = Timeline(policies, controls) + facts = Facts(tl, stretches, grant_changes, + [{"principal": p["player"], "seq": p["seq"], "at": p["at"], "position": p["position"]} for p in presentations]) + skews = [] + counts = {} + for ev in records: + counts[ev["principal"]] = counts.get(ev["principal"], 0) + 1 + for at, digest, f in pending: # §8.4 steps 2 and 3 + if gap: + skews.append({"digest": digest.hex(), "from": f["from"], "to": f["to"], "viewers": "unchecked", "pairs": "unchecked"}) + continue + vs = set(facts.viewers(f["from"], f["to"])) + if on("skew_viewers") and any(v["principal"] not in vs or v["held"] > counts.get(v["principal"], 0) for v in f["viewers"]): + raise Stop("skew_mismatch", at) + viewers, pairs = facts.entries(f["from"], f["to"], [(v["principal"], v["held"]) for v in f["viewers"]]) + if on("skew_recompute") and (viewers != f["viewers"] or pairs != f["pairs"]): + raise Stop("skew_mismatch", at) + skews.append({"digest": digest.hex(), "from": f["from"], "to": f["to"], + "viewers": [viewer_json(v) for v in viewers], "pairs": [pair_json(p) for p in pairs]}) + if not gap and on("complete"): # step 5, §8.6 + windows = {} + for at, _, f in pending: + w = windows.setdefault((f["from"], f["to"]), [at, set()]) + w[1].update(v["principal"] for v in f["viewers"]) + for (frm, to), (at, listed) in windows.items(): + if any(w not in listed for w in facts.viewers(frm, to)): + raise Stop("skew_incomplete", at) + except Stop as s: + return {"outcome": "refuse", "reason": s.reason, "at": s.at} + out = {"outcome": "gap" if gap else "accept", "room": d["room"].hex(), "gaps": room.get("gaps", []), + "policy_digests": [p["digest"].hex() for p in policies], + "starts": [{"at": s, "policy": i} for s, i in tl.starts], + "controls": [{"digest": c["digest"].hex(), "author": c["author"].hex(), "t": c["t"], "action": ACTIONS[c["action"]], + "at": c["at"], "arg": c["arg"], "applied": c["digest"] not in tl.overridden} for c in controls], + "timeline": [{"at": x, "playing": s["playing"], "rate": s["rate"], "position": position(s, x, tl.duration_at(x))} for x, s in tl.points], + "presentations": [], "skews": skews} + for p in presentations: + controlled = tl.position_at(p["at"]) + pol = policies[policy_at(policies, p["at"])] + out["presentations"].append({"digest": p["digest"].hex(), "player": p["player"].hex(), "at": p["at"], "position": p["position"], + "state": STATES[p["state"]], "controlled": controlled, "error": p["position"] - controlled, + "settling": facts.settling(pol, p["player"], p["at"])}) + return out + + +def run_vector(v): + sources = [] + for s in v["sources"]: + sources.append(None if s is None else s) + return verify(bytes.fromhex(v["descriptor"]), [bytes.fromhex(g) for g in v["grants"]], + [[bytes.fromhex(r) for r in c] for c in v["chains"]], [bytes.fromhex(p) for p in v["policies"]], sources) + + +STATED = ("outcome", "reason", "at", "room", "gaps", "policy_digests", "starts", "controls", "timeline", "presentations", "skews") + + +def check(doc, quiet=False, first=False): + """Every vector and catch-up case of `doc` against this verifier: the failures (with + `first`, the first alone).""" + fails, seen = [], set() + for v in doc["vectors"]: + if first and fails: + return fails, seen + try: + got = run_vector(v) + except Exception as e: # a copy that does not read is a failure to verify it + fails.append("%s: does not verify (%r)" % (v["name"], e)) + continue + bad = [k for k in STATED if (k in got or k in v) and got.get(k) != v.get(k)] + if got.get("reason"): + seen.add(got["reason"]) + if not quiet: + what = got["outcome"] + ("" if "reason" not in got else " " + got["reason"] + " at %s" % got["at"]) + print(("PASS" if not bad else "FAIL") + " room %s: %s" % (v["name"], what)) + for k in bad: + fails.append("%s: %s is %s, the corpus states %s" % (v["name"], k, json.dumps(got.get(k))[:200], json.dumps(v.get(k))[:200])) + cu = doc["catch_up"] + for i, c in enumerate(cu["cases"]): + got = catch_up(cu["params"], c["playing"], c["rate"], c["controlled"], c["duration"], c["presented"]) + ok = got == c["correction"] + if not quiet: + print(("PASS" if ok else "FAIL") + " catch-up %d: %s -> %s" % (i, c["about"], json.dumps(got))) + if not ok: + fails.append("catch-up case %d: %s, the corpus states %s" % (i, got, c["correction"])) + return fails, seen + + +def mutations(doc): + """Copies of the corpus, each with one defect a conforming verifier must catch.""" + vn = {v["name"]: k for k, v in enumerate(doc["vectors"])} + party, drift, nxt, gapv = vn["watch_party"], vn["drift"], vn["next_episode"], vn["gap"] + + def mutate(label, f): + d = copy.deepcopy(doc) + f(d) + return label, d + + def vs(d): + return d["vectors"] + + def flip(h, i): + b = bytearray(bytes.fromhex(h)) + b[i] ^= 1 + return b.hex() + + def drop_chain(d, k, principal): + chains = vs(d)[k]["chains"] + vs(d)[k]["chains"] = [c for c in chains if LEV.read_record(bytes.fromhex(c[0]))["principal"].hex() != principal] + + late = doc["principals"]["late"] + return [ + mutate("a stated 95th percentile", lambda d: vs(d)[party]["skews"][2]["viewers"][0].update(pq=vs(d)[party]["skews"][2]["viewers"][0]["pq"] + 1)), + mutate("a stated verdict", lambda d: vs(d)[drift]["skews"][0]["viewers"][2].update(verdict="in_sync")), + mutate("a stated pair", lambda d: vs(d)[drift]["skews"][2]["pairs"][0].update(n=0)), + mutate("a control stated applied", lambda d: vs(d)[party]["controls"][6].update(applied=True)), + mutate("a stated error", lambda d: vs(d)[party]["presentations"][9].update(error=vs(d)[party]["presentations"][9]["error"] + 1)), + mutate("a statement stated settling", lambda d: vs(d)[party]["presentations"][7].update(settling=not vs(d)[party]["presentations"][7]["settling"])), + mutate("a stated position of the timeline", lambda d: vs(d)[party]["timeline"][3].update(position=1)), + mutate("the second source's start unstated", lambda d: vs(d)[nxt]["starts"].pop()), + mutate("a byte of a presentation statement's own signature", lambda d: vs(d)[party]["chains"][2].__setitem__(4, flip(vs(d)[party]["chains"][2][4], -70))), + mutate("the late joiner's chain withheld", lambda d: drop_chain(d, party, late)), + mutate("an object of the second source one millisecond longer", lambda d: vs(d)[nxt]["sources"][1][0].update(duration_ms=vs(d)[nxt]["sources"][1][0]["duration_ms"] + 1)), + mutate("the gap's skew statements stated checked", lambda d: vs(d)[gapv]["skews"][0].update(viewers=[])), + mutate("a refusal's reason", lambda d: vs(d)[vn["control_short_lead"]].update(reason="control_beyond_horizon")), + mutate("a refusal's place", lambda d: vs(d)[vn["skew_leaves_a_viewer_out"]].update(at=["record", 0, 4])), + mutate("a catch-up correction", lambda d: d["catch_up"]["cases"][3]["correction"].update(value=1040000)), + mutate("the catch-up nudge", lambda d: d["catch_up"]["params"].update(nudge=40000)), + ] + + +CHECKS = ("policy_rules", "policy_link", "sources", "attr", "control_power", "lead", "horizon", "range", "who_presents", "wrong_key", + "pres_sig", "ahead", "source", "who_skews", "skew_bound", "skew_viewers", "skew_recompute", "complete", "settle") + + +def main(corpus_dir): + fails = [] + st = ED._self_test() + print(("PASS" if not st else "FAIL") + " Ed25519 strict rule self-test " + ",".join(st)) + fails += ["ed25519 self-test"] if st else [] + ok = len(REASONS) == 16 + print(("PASS" if ok else "FAIL") + " §12 read from the extension: %d reasons" % len(REASONS)) + fails += [] if ok else ["§12 does not read"] + names = sorted(n for n in os.listdir(corpus_dir) if n != "README.md") + ok = names == ["vectors.json"] + print(("PASS" if ok else "FAIL") + " the corpus holds vectors.json and README.md alone") + fails += [] if ok else ["other files: %s" % names] + with open(os.path.join(corpus_dir, "vectors.json"), encoding="utf-8") as f: + doc = json.load(f) + f2, seen = check(doc) + fails += f2 + missing = [r for r in REASONS if r not in seen] + print(("PASS" if not missing else "FAIL") + " every reason of §12 refuses a vector") + fails += ["no vector refused with %s" % ", ".join(missing)] if missing else [] + for label, d in mutations(doc): + caught, _ = check(d, quiet=True, first=True) + print(("PASS" if caught else "FAIL") + " mutated copy fails: %s%s" % (label, " (%s)" % caught[0][:90] if caught else "")) + if not caught: + fails.append("a mutated copy verifies: %s" % label) + for name in CHECKS: + DROP.add(name) + try: + caught, _ = check(doc, quiet=True, first=True) + finally: + DROP.discard(name) + print(("PASS" if caught else "FAIL") + " the corpus catches the check dropped: %s%s" % (name, " (%s)" % caught[0][:90] if caught else "")) + if not caught: + fails.append("the corpus does not catch the check dropped: %s" % name) + print("co_watch_verify: %s" % ("PASS" if not fails else "FAIL (%d)" % len(fails))) + for f in fails: + print(" " + f) + return 0 if not fails else 1 + + +def room_main(path): + with open(path, encoding="utf-8") as f: + v = json.load(f) + v.setdefault("sources", []) + print(json.dumps(run_vector(v))) + return 0 + + +if __name__ == "__main__": + if len(sys.argv) == 3 and sys.argv[1] == "--room": + sys.exit(room_main(sys.argv[2])) + if len(sys.argv) != 2: + print("usage: co_watch_verify.py | --room ", file=sys.stderr) + sys.exit(2) + sys.exit(main(sys.argv[1])) -- 2.54.0 (Apple Git-157) From bd794cab6f2fe856cfcd281a3764c5fea934e330 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:16:48 -0400 Subject: [PATCH 03/16] =?UTF-8?q?wai.live.cowatch:=20registry=20entry=20an?= =?UTF-8?q?d=20export,=20SPEC=20=C2=A75,=20CHANGELOG,=20corpus=20README=20?= =?UTF-8?q?and=20CI=20step?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .github/workflows/wai-conformance.yml | 30 +++++++++++ wai/CHANGELOG.md | 44 ++++++++++++++++ wai/REGISTRY.md | 5 ++ wai/SPEC.md | 19 +++++++ wai/live-conformance/README.md | 2 + wai/live-conformance/cowatch/README.md | 72 ++++++++++++++++++++++++++ wai/registry/capabilities.json | 42 +++++++++++++++ wai/vocab/v2.ttl | 7 +++ wai/wai-rs/src/codecs/registry.rs | 8 +++ 9 files changed, 229 insertions(+) create mode 100644 wai/live-conformance/cowatch/README.md diff --git a/.github/workflows/wai-conformance.yml b/.github/workflows/wai-conformance.yml index ce7d1fe7c..b4aaf0fd0 100644 --- a/.github/workflows/wai-conformance.yml +++ b/.github/workflows/wai-conformance.yml @@ -147,6 +147,12 @@ on: # reports and its §3.2 table to name the reference's descriptors, exploration_verify.py # reads §13, and the registry's wire identifiers test reads its sections. - 'wai/extensions/exploration.md' + # tests/co_watch.rs requires this extension's §12 to list the codes the reference reports, + # co_watch_verify.py reads that table, and the registry's wire identifiers test reads its + # sections. + - 'wai/extensions/co-watch.md' + # The co-watch step runs the browser client's co-watch module against the corpus. + - 'joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch*' - 'wai/wai-web/**' # The audio provenance check below reads the corpora above with this tool. - 'wai/tools/wai_audio_provenance_check.py' @@ -1330,6 +1336,30 @@ jobs: (cd wai-rs && cargo test --no-default-features --features exploration --lib exploration::) (cd wai-rs && cargo test --no-default-features --features exploration --test exploration) python3 -I live-conformance/exploration_verify.py live-conformance/exploration + # wai.live.cowatch (extensions/co-watch.md): the reference module's unit tests (the policy + # and its rules, statements read back and refused, the controlled position in the order of + # §5.4, each branch of the catch-up rule, percentiles by nearest rank, the control attribute) + # and tests/co_watch.rs (vectors.json regenerates byte for byte from its fixed seeds and no + # other file is there, wai-rs gives every room and catch-up case its stated outcome, and §12 + # lists exactly the reference's codes, each of which the corpus gives); then the corpus's + # second implementation, co_watch_verify.py, written from the extension's text and sharing + # no code with wai-rs, which verifies each room with live_rooms_verify.py and every + # signature with WAI's strict Ed25519 rule, recomputes the controlled position, every + # sample, percentile and verdict, requires every mutated copy of the corpus to fail and + # drops each of its own checks in turn and requires the corpus to catch the weakened + # verifier; standard library only, run isolated (-I). Last, the browser client's co-watch + # module (joule-moq-web/web/room/cowatch.js), which gives every catch-up case its + # correction, recomputes each accepted room's controlled position, and writes the corpus's + # controls and presentation statements byte for byte. + - name: co-watch · wai-rs, co_watch_verify.py and the page's module + working-directory: wai + shell: bash + run: | + set -euo pipefail + (cd wai-rs && cargo test --no-default-features --features co_watch --lib co_watch::) + (cd wai-rs && cargo test --no-default-features --features co_watch --test co_watch) + python3 -I live-conformance/co_watch_verify.py live-conformance/cowatch + node --test ../joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.test.mjs # wai.live.e2ee (extensions/confidentiality.md): the corpus's second implementation, # e2ee_verify.py, written from the extension's text and the documents it reads and # sharing no code with the reference (joule-moq's secure_objects and joule-moq-mls, diff --git a/wai/CHANGELOG.md b/wai/CHANGELOG.md index a0b72e830..d7a5e06af 100644 --- a/wai/CHANGELOG.md +++ b/wai/CHANGELOG.md @@ -6,6 +6,50 @@ wire format may change and such changes are recorded here. ## v0.4.0 — current +### `wai.live.cowatch`: watching together in a room, with the sync measured + +- **The extension** ([co-watch](extensions/co-watch.md)) registers a record for a room that + watches one source together. The room authority signs a co-watch policy, `WXP1` (§3): the + source (a WAI package by its receipt, a sequence of on-demand objects by a digest of their + content hashes and durations, or a recording by its manifest), its duration, and the bounds of + every rule below. A policy is replaced by one chained to it; one naming another source starts + the controlled position again. +- **Controls** (§5): `play`, `pause`, `seek` and `rate`, `WXC1`, as `meta` events, each effective + at a room-clock instant ahead of its sending by at least the policy's lead and at most its + horizon, so every viewer applies it at that instant whatever its own latency. Who may control + is the direct power or the grant attribute `watch_control`, one bit per action, which needs no + new power bit. Controls apply in a pinned order, by instant, then by sending, then by digest: + of two for one instant that set the same thing, the one sent later prevails, and the other is + stated overridden (§5.4). The controls define the controlled position at every instant (§6). +- **Presentation statements** (§7): a viewer's player signs, under its own key and in its own + chain, the source position it presented at a room-clock instant, its state and its rate, at + least once a slot. A statement lifted from another chain, signed by another key, about an + instant after its sending, or naming another source is refused. +- **Skew** (§8): the room clock's skew statement, `WXK1`, states per window, for each viewer, the + slots due while it was present, the samples it has and those counted (a sample within the + policy's settle time of a join, a control or a source's start is not), and the 50th + percentile, the policy's percentile and the greatest of its absolute errors, with a verdict + against the bound; and the same for each pair of viewers. `held` pins the statements the clock + had received, so one arriving later changes nothing. A verifier recomputes every entry; a + viewer with a due slot of no statement is unknown, never in sync; and a window's statements + together list every viewer of it. +- **Catch-up** (§9): a pinned correction from the controlled state and the player's position: + the controlled rate within the tolerance, a rate nudged toward the room and held within the + policy's limits up to the seek threshold, a seek past it, and a seek or a hold while paused. +- **Reference**: the `co_watch` module of `wai-rs` (feature `co_watch`); the corpus + `live-conformance/cowatch/` (`wai_co_watch_vectors gen`): a watch party with a conflict at one + instant and a late joiner, a room whose second policy starts another source, a room with a + viewer out of sync, one unknown, one that leaves and a window stated in two statements, a gap, + refused vectors for every reason of §12, and catch-up cases; its second implementation + `live-conformance/co_watch_verify.py`, which recomputes every entry, requires every mutated + copy to fail and catches each of its own checks dropped. +- **The room service and the page** (`joule-moq-room`, `joule-moq-web`): a co-watch room serves + its source and carries its viewers' controls and statements in a log, the clock signing each + viewer's presence and each window's skew statements; the room page has a co-watch mode with + shared controls and a sync indicator, and the module `web/room/cowatch.js` gives every + catch-up case of the corpus its correction and writes its controls and statements byte for + byte. + ### `wai-mark:tent64`: the second marking layer, a watermark recomputed from its payload and read with no key - **The scheme** ([synthesis](extensions/synthesis.md) §7.4, §7.5) fills the scheme slot of §7.4: a diff --git a/wai/REGISTRY.md b/wai/REGISTRY.md index 903c467ec..a6986f4b5 100644 --- a/wai/REGISTRY.md +++ b/wai/REGISTRY.md @@ -201,6 +201,7 @@ and a role are fixed once registered. | `wai.live.ad_presentation` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | | `wai.live.ads` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | | `wai.live.compose` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | +| `wai.live.cowatch` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | | `wai.live.e2ee` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | | `wai.live.events` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | | `wai.live.metering` | record | registered | — | — | — | — | — | §5 Interactive, temporal & computed content | @@ -351,6 +352,10 @@ and a role are fixed once registered. | `WWD1` | magic | defined | forensic-watermark §8.1 | | `WWQ1` | magic | defined | forensic-watermark §7.1 | | `WWS1` | magic | defined | forensic-watermark §5.1 | +| `WXC1` | magic | defined | co-watch §5.1 | +| `WXK1` | magic | defined | co-watch §8.4 | +| `WXP1` | magic | defined | co-watch §3.1 | +| `WXS1` | magic | defined | co-watch §7.1 | | `X-WAI-EVENT` | playlist-attribute | defined | live-events §8.3 | | `X-WAI-FLOOR` | playlist-attribute | defined | http-delivery §11.1 | | `application/wai` | media-type | proposed | http-delivery §3 | diff --git a/wai/SPEC.md b/wai/SPEC.md index 328864451..fd5f06175 100644 --- a/wai/SPEC.md +++ b/wai/SPEC.md @@ -1128,6 +1128,25 @@ Without an attestation a claim is its key holder's statement, which a modified p make falsely; the attestation bounds that to a device its attester vouched for, one token per impression: [`extensions/ad-presentation.md`](extensions/ad-presentation.md). +And for **watching together** in a room — `wai.live.cowatch`: people in different places +watching one source in sync, with the sync measured. The room authority signs a co-watch +policy, `WXP1`, naming the source (a WAI package, a sequence of on-demand objects, or another +room's recording) and the bounds. A principal whose grant holds the direct power, or whose +grant attribute `watch_control` allows the action, sends controls, `WXC1` (`play`, `pause`, +`seek`, `rate`), as `meta` events of `wai.live.events`, each effective at a room-clock instant +at least the policy's lead after it is sent and at most its horizon; the controls apply in a +pinned order, the one sent later prevailing at one instant, and define the controlled position +of the source at every instant. Each viewer's player signs, at least once a slot, a +presentation statement, `WXS1`: the source position it presented at a room-clock instant, +under its own key, carried in its own chain. The room clock signs a skew statement, `WXK1`, +per window: for each viewer and each pair of viewers, the 50th percentile, the policy's +percentile and the greatest of the errors from the controlled position, with a verdict against +the policy's bound; a verifier recomputes every entry from the statements, a viewer with a slot +of no statement is unknown and never in sync, and a window's statements list every viewer. A +viewer off the position corrects by a pinned catch-up rule, a rate nudge within limits or a +seek past a threshold: +[`extensions/co-watch.md`](extensions/co-watch.md). + And for the **provenance** of a room's CMAF tracks and a device's CMAF take — `wai.live.provenance`: the live video provenance of the C2PA Technical Specification, version 2.4, §19, written as it defines it. A room track packaged as CMAF travels under diff --git a/wai/live-conformance/README.md b/wai/live-conformance/README.md index 6317ceae9..777bed637 100644 --- a/wai/live-conformance/README.md +++ b/wai/live-conformance/README.md @@ -25,6 +25,7 @@ and the independent verifier of each, beside it. | [`access/`](access/) | [access-services](../extensions/access-services.md) (`wai.access.services`) | `wai_access_services_vectors gen` | `access_services_verify.py` | | [`presentation/`](presentation/) | [ad-presentation](../extensions/ad-presentation.md) (`wai.live.ad_presentation`) | `wai_ad_presentation_vectors gen` | `ad_presentation_verify.py` | | [`exploration/`](exploration/) | [exploration](../extensions/exploration.md) (`wai.media.exploration`) | `wai_exploration_vectors gen` | `exploration_verify.py` | +| [`cowatch/`](cowatch/) | [co-watch](../extensions/co-watch.md) (`wai.live.cowatch`) | `wai_co_watch_vectors gen` | `co_watch_verify.py` | | [`synthesis-mark/`](synthesis-mark/) | [synthesis](../extensions/synthesis.md) §7.4 to §7.8 (the watermark scheme `wai-mark:tent64`) | `wai_synthesis_mark_vectors gen` | `synthesis_mark_verify.py` | **Provenance.** Generated here: each directory's corpus is written by its row's generator @@ -63,4 +64,5 @@ python3 ai_usage_verify.py usage python3 contribution_verify.py contribution python3 settlement_verify.py settlement python3 exploration_verify.py exploration +python3 co_watch_verify.py cowatch ``` diff --git a/wai/live-conformance/cowatch/README.md b/wai/live-conformance/cowatch/README.md new file mode 100644 index 000000000..a41d40f82 --- /dev/null +++ b/wai/live-conformance/cowatch/README.md @@ -0,0 +1,72 @@ +# live-conformance/cowatch — co-watch + +The corpus of [`extensions/co-watch.md`](../../extensions/co-watch.md) §13: watch rooms of +[live-rooms](../../extensions/live-rooms.md), their co-watch policies (`WXP1`), the controls +(`WXC1`), presentation statements (`WXS1`) and skew statements (`WXK1`) their principals sent +as `meta` events, what a verifier states of them, and catch-up cases. + +**Co-watch equivalence.** For each vector, a conforming verifier given its `descriptor`, +`grants`, `key_log`, `chains`, `policies` and `sources` (§11.1) reaches the `outcome` the +vector states, with its `reason` and `at` when it refuses, and, for an accepted room or a room +with a gap (§11.3): + +- `room`, `gaps`, `policy_digests`, and `starts` (each source's start: its instant and the + policy's index); +- `controls`, in the merged order: each one's `digest`, `author`, `t`, `action`, `at`, `arg` + and whether it is `applied` or a later control at its instant overrides it; +- `timeline`: each change of the controlled state, in the order of §5.4 and §6.4, with whether + the source plays, its `rate` and its `position` at that instant; +- `presentations`, in the merged order: each statement's `digest`, `player`, `at`, + `position`, `state`, the `controlled` position at its `at`, its `error` and whether it is + `settling`; +- `skews`, in the merged order: each statement's `digest`, `from`, `to`, and its `viewers` and + `pairs` as recomputed (§8.4), or `unchecked` in a room with a gap. + +`about` says what each vector is, and is not checked. `catch_up` holds the policy's catch-up +`params` and `cases`: a controlled state (`playing`, `rate`, `controlled`, `duration`) and a +player's `presented` position, with the `correction` §9 gives. A verifier that reaches another +outcome, reason, place, fact or correction does not conform. + +**Provenance.** Generated here: `wai_co_watch_vectors gen` writes `vectors.json` from rooms +authored in code, from fixed seeds. Each key is SHA-256 of `wai:co-watch/corpus/key`, a zero +byte and the principal's index (`principals` lists their public keys); each source object's +content hash is SHA-256 of a fixed label. Each room is written from a script of acts in +room-clock order: the clock's lifecycle, controls, and each viewer's statements at the +controlled position plus an error written in the generator; the clock's skew statements are +made from the room as it stands when the clock makes them, as a room service makes them. +Ed25519 is deterministic, so the file is the same bytes on every machine. The generator asserts +that each vector reaches the outcome it was written to have, and that the corpus gives every +reason of §12, before it writes. A refused vector holds its room up to the record it is refused +at. No recorded data. + +## Layout + +`vectors.json`: `principals` (informative), `key_seed`, `vectors` and `catch_up`. The rooms, +under one policy unless named otherwise (an hour-long episode; controls 500 ms to 10 s ahead; +rates from half to twice normal speed; one-second slots in five-second windows; a 200 ms bound +at the 95th percentile; settling 1.5 s; catch-up at 40 ms, 5 % and one second): + +- `watch_party`: the host (the direct power), the guest (`watch_control` 3: play and pause) and + the late joiner (no control, joining at 11 s). The host plays, the guest pauses and plays, + the host seeks, sets 1.25 and back; at 20 s the guest's pause and the host's play and seek are + for one instant, the host's play, sent later, overriding the pause. Each player states twice a + slot, with a transient error just after a control, and the late joiner a seek's error on + joining; every five-second window to 25 s is stated, every viewer in sync. +- `next_episode`: a second policy names another source at 10 s; the controlled position starts + again there, paused at 0, and the guest (`watch_control` 15) plays it; both sources' objects + are given. +- `drift`: four viewers. The fourth states 400 ms ahead (out of sync); the late joiner states + nothing for one slot (unknown from 5 s); the guest leaves at 7 s; the window from 5 s is + stated in two statements of two viewers each. +- `gap`: `watch_party` with one of the guest's statements not delivered. +- Refused, each a control of one defect: a control from a party without the power, one past its + attribute, one in the past, one under the lead, one past the horizon, a seek past the end, a + rate past the limit, an unknown action, a play with an argument, a control before its sender + joined (the room refuses it); a statement of another player, one signed by another key, one + ahead of its sending, one of another source, one of state 9, one by the clock; a skew + statement that does not recompute, one stating a viewer with no statements in sync, one of + another bound, one claiming events the room does not hold, one leaving a viewer out, one by a + viewer, one made before its window ends; a `watch_control` of 16 and of `03`; no policy; + policies malformed, unlinked, of another duration for one source, not from 0, truncated, of + version 2, of another room and signed by the clock; and objects that are not the policy's + source. diff --git a/wai/registry/capabilities.json b/wai/registry/capabilities.json index abaf03d35..ab1088ece 100644 --- a/wai/registry/capabilities.json +++ b/wai/registry/capabilities.json @@ -700,6 +700,20 @@ "edition": null, "registered": "2026-10-17" }, + { + "capability": "wai.live.cowatch", + "kind": "record", + "status": "registered", + "media": null, + "role": null, + "tier": null, + "licence": null, + "replicate": null, + "sets": [], + "spec_section": "§5 Interactive, temporal & computed content", + "edition": null, + "registered": "2026-10-22" + }, { "capability": "wai.live.e2ee", "kind": "record", @@ -2319,6 +2333,34 @@ "section": "§5.1", "status": "defined" }, + { + "name": "WXC1", + "kind": "magic", + "document": "extensions/co-watch.md", + "section": "§5.1", + "status": "defined" + }, + { + "name": "WXK1", + "kind": "magic", + "document": "extensions/co-watch.md", + "section": "§8.4", + "status": "defined" + }, + { + "name": "WXP1", + "kind": "magic", + "document": "extensions/co-watch.md", + "section": "§3.1", + "status": "defined" + }, + { + "name": "WXS1", + "kind": "magic", + "document": "extensions/co-watch.md", + "section": "§7.1", + "status": "defined" + }, { "name": "X-WAI-EVENT", "kind": "playlist-attribute", diff --git a/wai/vocab/v2.ttl b/wai/vocab/v2.ttl index ac1a1c1ab..23bc5da42 100644 --- a/wai/vocab/v2.ttl +++ b/wai/vocab/v2.ttl @@ -583,6 +583,13 @@ wai:wai.live.compose a wai:Capability ; wai:specSection "§5 Interactive, temporal & computed content" ; wai:registeredOn "2026-10-17"^^xsd:date . +wai:wai.live.cowatch a wai:Capability ; + rdfs:label "wai.live.cowatch" ; + wai:kind wai:kind-record ; + wai:status wai:status-registered ; + wai:specSection "§5 Interactive, temporal & computed content" ; + wai:registeredOn "2026-10-22"^^xsd:date . + wai:wai.live.e2ee a wai:Capability ; rdfs:label "wai.live.e2ee" ; wai:kind wai:kind-record ; diff --git a/wai/wai-rs/src/codecs/registry.rs b/wai/wai-rs/src/codecs/registry.rs index 9ac8451ee..fccca005c 100644 --- a/wai/wai-rs/src/codecs/registry.rs +++ b/wai/wai-rs/src/codecs/registry.rs @@ -222,6 +222,7 @@ pub const CAP_LIVE_E2EE: &str = "wai.live.e2ee"; pub const CAP_LIVE_WATERMARK: &str = "wai.live.watermark"; pub const CAP_LIVE_ADS: &str = "wai.live.ads"; pub const CAP_LIVE_AD_PRESENTATION: &str = "wai.live.ad_presentation"; +pub const CAP_LIVE_COWATCH: &str = "wai.live.cowatch"; pub const CAP_LIVE_PROVENANCE: &str = "wai.live.provenance"; pub const CAP_EDGE_DERIVATION: &str = "wai.edge.derivation"; pub const CAP_MEDIA_SYNTHESIS: &str = "wai.media.synthesis"; @@ -321,6 +322,7 @@ const ROWS: &[(&str, &str, Option<&str>, &str)] = &[ (CAP_LIVE_WATERMARK, S_INTERACTIVE, None, "2026-10-20"), (CAP_LIVE_ADS, S_INTERACTIVE, None, "2026-10-20"), (CAP_LIVE_AD_PRESENTATION, S_INTERACTIVE, None, "2026-10-21"), + (CAP_LIVE_COWATCH, S_INTERACTIVE, None, "2026-10-22"), (CAP_LIVE_PROVENANCE, S_INTERACTIVE, None, "2026-10-21"), (CAP_MEDIA_SYNTHESIS, S_INTERACTIVE, None, "2026-10-21"), (CAP_AI_USAGE, S_INTERACTIVE, None, "2026-10-21"), @@ -381,6 +383,7 @@ const RECORDS: &[&str] = &[ CAP_LIVE_WATERMARK, CAP_LIVE_ADS, CAP_LIVE_AD_PRESENTATION, + CAP_LIVE_COWATCH, CAP_LIVE_PROVENANCE, CAP_EDGE_DERIVATION, CAP_MEDIA_SYNTHESIS, @@ -547,6 +550,7 @@ const FORENSIC_WATERMARK: &str = "extensions/forensic-watermark.md"; const AI_USAGE: &str = "extensions/ai-usage.md"; const LIVE_ADS: &str = "extensions/live-ads.md"; const AD_PRESENTATION: &str = "extensions/ad-presentation.md"; +const CO_WATCH: &str = "extensions/co-watch.md"; const LIVE_PROVENANCE: &str = "extensions/live-provenance.md"; const DERIVING_EDGE: &str = "extensions/deriving-edge.md"; const SYNTHESIS: &str = "extensions/synthesis.md"; @@ -651,6 +655,10 @@ pub const WIRE_IDENTIFIERS: &[WireIdentifier] = &[ wire("WAP1", WireKind::Magic, LIVE_ADS, "§3.1", WireStatus::Defined), wire("WAB1", WireKind::Magic, LIVE_ADS, "§4.2", WireStatus::Defined), wire("WPC1", WireKind::Magic, AD_PRESENTATION, "§5.1", WireStatus::Defined), + wire("WXP1", WireKind::Magic, CO_WATCH, "§3.1", WireStatus::Defined), + wire("WXC1", WireKind::Magic, CO_WATCH, "§5.1", WireStatus::Defined), + wire("WXS1", WireKind::Magic, CO_WATCH, "§7.1", WireStatus::Defined), + wire("WXK1", WireKind::Magic, CO_WATCH, "§8.4", WireStatus::Defined), wire("wai_c2pa_track", WireKind::Catalog, LIVE_PROVENANCE, "§10.2", WireStatus::Defined), wire("wai-c2pa", WireKind::Catalog, LIVE_PROVENANCE, "§10.2", WireStatus::Defined), wire("wai-derivation", WireKind::DocumentKind, DERIVING_EDGE, "§5.1", WireStatus::Defined), -- 2.54.0 (Apple Git-157) From 6924f5ea657068a8cc5f1b4cd3df5a3dfc7c4bb0 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:26:41 -0400 Subject: [PATCH 04/16] joule-moq-room: watch rooms (WAI co-watch); joule-moq-web: the page's co-watch module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The room service serves a watch room's source, admits a viewer by a proof of its grant's key over the service's challenge, carries its controls and presentation statements in a log when co-watch §5 and §7.2 accept them, signs each window's skew statements and a viewer's leave when it falls silent. web/room/cowatch.js holds the rules the page applies (the policy, the controlled position, the catch-up rule, statements written byte for byte) and the player; its tests run them against live-conformance/cowatch/. Co-Authored-By: Claude Opus 5.5 --- .../crates/joule-moq-room/Cargo.toml | 4 +- .../crates/joule-moq-room/src/e2ee.rs | 4 +- .../crates/joule-moq-room/src/epoch.rs | 89 ++- .../crates/joule-moq-room/src/http.rs | 187 +++++- .../crates/joule-moq-room/src/lib.rs | 136 +++- .../crates/joule-moq-room/src/main.rs | 11 +- .../crates/joule-moq-room/src/watch.rs | 622 ++++++++++++++++++ .../crates/joule-moq-web/web/room/cowatch.js | 513 +++++++++++++++ .../joule-moq-web/web/room/cowatch.test.mjs | 119 ++++ 9 files changed, 1650 insertions(+), 35 deletions(-) create mode 100644 joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs create mode 100644 joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js create mode 100644 joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.test.mjs diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/Cargo.toml b/joule-code/joule-code-rs/crates/joule-moq-room/Cargo.toml index 4ba9cd838..13fe1ecf3 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/Cargo.toml +++ b/joule-code/joule-code-rs/crates/joule-moq-room/Cargo.toml @@ -30,8 +30,8 @@ joule-moq-relay = { path = "../joule-moq-relay" } # End-to-end encrypted rooms: the confidentiality record and the clock as the MLS group's # external sender (WAI confidentiality §3, §5). joule-moq-mls = { path = "../joule-moq-mls" } -# The room's records (live-rooms, live-events, live-compose): no codec chain. -wai = { path = "../../../../wai/wai-rs", default-features = false, features = ["live_compose", "timed_text"] } +# The room's records (live-rooms, live-events, live-compose, co-watch): no codec chain. +wai = { path = "../../../../wai/wai-rs", default-features = false, features = ["live_compose", "timed_text", "co_watch"] } # The HTTP service (MIT), the versions joule-moq-ingest pins. hyper = { version = "=1.11.1", features = ["server", "http1"] } hyper-util = { version = "=0.1.20", default-features = false, features = ["tokio"] } diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/e2ee.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/e2ee.rs index 7bc63b846..97eeccbe9 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/e2ee.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/e2ee.rs @@ -78,7 +78,7 @@ impl RoomMls { let ev = match *what { Lifecycle::Join { .. } => Some(Event::Join { subject, keyed: true }), Lifecycle::Leave { reason } => Some(Event::Leave { subject, reason }), - Lifecycle::Publish { .. } => None, + Lifecycle::Publish { .. } | Lifecycle::Meta(_) => None, }; let r = match ev { Some(ev) => self.clock.event(&ev), @@ -141,7 +141,7 @@ mod tests { use joule_moq::secure_objects::Suite; fn settings() -> Settings { - Settings { max_publishers: 4, max_present: 16, publisher_grant_s: 600, viewer_grant_s: 900, join_wait_s: 60, max_grants: 8, e2ee: true } + Settings { max_publishers: 4, max_present: 16, publisher_grant_s: 600, viewer_grant_s: 900, join_wait_s: 60, max_grants: 8, e2ee: true, watch: None, watch_control: 0, watch_window_ms: 5_000 } } #[test] diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/epoch.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/epoch.rs index 25a67324a..0bb31ab91 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/epoch.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/epoch.rs @@ -9,6 +9,8 @@ use crate::e2ee::RoomMls; use crate::keys::Keys; +use crate::watch::{WatchRoom, WatchSource}; +use std::sync::Arc; use serde_json::{json, Value}; use std::collections::HashMap; use wai::live_compose::layout::{aspect, fill, kind as lkind, Params}; @@ -48,6 +50,14 @@ pub struct Settings { /// Every room end-to-end encrypted (WAI confidentiality): a `WRE1` record and an MLS /// group whose external sender is the clock ([`crate::e2ee`]). pub e2ee: bool, + /// Every room watching this source together (WAI co-watch, [`crate::watch`]); none for + /// rooms that watch nothing. + pub watch: Option>, + /// The `watch_control` every grant of a watch room carries (co-watch §4.4): the actions + /// its principal may control; 0 for none. + pub watch_control: u8, + /// A watch room's skew window, in milliseconds (co-watch §3.1, a whole number of seconds). + pub watch_window_ms: u32, } /// The room's camera: one layer of 320 × 240 at 15 frames a second, VP9 first and AV1 @@ -170,6 +180,9 @@ pub struct Epoch { /// An end-to-end encrypted room's record, its clock as the MLS group's external sender, /// and the log that carries the group's messages. pub mls: Option, + /// A room watching a source together: its policy, its viewers and the log that carries + /// their controls and statements (WAI co-watch). + pub watch: Option, } impl Epoch { @@ -183,8 +196,8 @@ impl Epoch { origin: String::new(), limits: Limits { max_present: settings.max_present, max_publishers: settings.max_publishers, reval_s: 0, ceiling: Policy::default() }, roles: vec![ - Role_ { name: "participant", caps: Caps { publish: 0b011, subscribe: true, max_layer: 0, powers: SEEK }, events: bits(&PARTICIPANT_KINDS) }.into(), - Role_ { name: "viewer", caps: Caps { publish: 0, subscribe: true, max_layer: 0, powers: SEEK }, events: bits(&[kind::CHAT]) }.into(), + Role_ { name: "participant", caps: Caps { publish: 0b011, subscribe: true, max_layer: 0, powers: SEEK }, events: bits(&participant_kinds(&settings)) }.into(), + Role_ { name: "viewer", caps: Caps { publish: 0, subscribe: true, max_layer: 0, powers: SEEK }, events: bits(&viewer_kinds(&settings)) }.into(), ], slots: vec![], profiles: vec![registered_profile("speech").expect("a registered profile"), camera_profile()], @@ -217,6 +230,7 @@ impl Epoch { next_order: 0, joined_ever: false, mls: settings.e2ee.then(|| RoomMls::new(keys, id)), + watch: settings.watch.clone().map(|src| WatchRoom::new(id, now_us, src, settings.watch_window_ms, &keys.authority)), settings, } } @@ -230,10 +244,12 @@ impl Epoch { self.members.values().filter(|m| m.state == MemberState::Present).count() } - /// Whether a new room should start before a publisher is let in: nobody holds a place - /// here, and someone has been and gone, or the room has taken its grants. + /// Whether a new room should start before a publisher, or in a watch room a viewer, is let + /// in: nobody holds a place here, nobody watches, and someone has been and gone, or the + /// room has taken its grants. pub fn spent(&self, now_s: u64) -> bool { - self.publishers(now_s) == 0 && (self.joined_ever || self.grants.len() >= self.settings.max_grants) + let watching = self.watch.as_ref().map_or(0, |w| w.present()); + self.publishers(now_s) == 0 && watching == 0 && (self.joined_ever || self.grants.len() >= self.settings.max_grants) } /// A grant for `principal` in `role` at `now_s`, signed by the authority. @@ -247,11 +263,19 @@ impl Epoch { } } let (r, caps, policy, profiles, ttl) = match role { - Role::Publisher => (ROLE_PARTICIPANT, Caps { publish: 0b011, subscribe: true, max_layer: 0, powers: SEEK }, Policy::with_kinds(&PARTICIPANT_KINDS), vec![PROFILE_AUDIO, PROFILE_VIDEO], self.settings.publisher_grant_s), - Role::Viewer => (ROLE_VIEWER, Caps { publish: 0, subscribe: true, max_layer: 0, powers: SEEK }, Policy::with_kinds(&[kind::CHAT]), vec![], self.settings.viewer_grant_s), + Role::Publisher => (ROLE_PARTICIPANT, Caps { publish: 0b011, subscribe: true, max_layer: 0, powers: SEEK }, Policy::with_kinds(&participant_kinds(&self.settings)), vec![PROFILE_AUDIO, PROFILE_VIDEO], self.settings.publisher_grant_s), + Role::Viewer => (ROLE_VIEWER, Caps { publish: 0, subscribe: true, max_layer: 0, powers: SEEK }, Policy::with_kinds(&viewer_kinds(&self.settings)), vec![], self.settings.viewer_grant_s), }; let order = self.next_order; - let attrs = if role == Role::Publisher { vec![("order".to_string(), order.to_string())] } else { vec![] }; + // Attributes in ascending order of key (live-rooms §4.4): a publisher's `order` for the + // layout, and in a watch room the actions every principal may control (co-watch §4.4). + let mut attrs = Vec::new(); + if role == Role::Publisher { + attrs.push(("order".to_string(), order.to_string())); + } + if self.watch.is_some() && self.settings.watch_control > 0 { + attrs.push((wai::co_watch::CONTROL_ATTR.to_string(), self.settings.watch_control.to_string())); + } // `nbf` a minute back, for a browser whose clock runs behind. let (nbf, exp) = (now_s.saturating_sub(60), now_s + ttl); let g = Grant { @@ -278,6 +302,14 @@ impl Epoch { .sign(&keys.authority); let record = g.to_bytes(); let digest = g.digest(); + if let Some(w) = self.watch.as_mut() { + // In a watch room every grant is the room's: each principal's events are verified + // under it, a viewer's among them. + w.granted(record.clone(), g.clone(), digest); + if role == Role::Viewer { + self.grants.push(record.clone()); + } + } match role { Role::Publisher => { self.next_order += 1; @@ -304,6 +336,8 @@ impl Epoch { // The confidentiality record (WAI confidentiality §3) of an end-to-end encrypted // room, which a page checks against the descriptor before it enters. "e2ee": self.mls.as_ref().map(|m| json!({"record": hex::encode(&m.record), "log": m.log.len()})), + // A watch room (WAI co-watch): its policy, its source and its log's length. + "watch": self.watch.as_ref().map(WatchRoom::view), }) } } @@ -321,24 +355,47 @@ impl From for wai::live_room::Role { } } -/// A lifecycle event (live-rooms §7.2) for `subject`. +/// A lifecycle event (live-rooms §7.2) for `subject`; or, in a watch room, a `meta` record +/// of the clock's: a skew statement (co-watch §8.4), whose subject is none. #[derive(Clone, Debug)] pub enum Lifecycle { Join { grant: [u8; 32] }, Publish { media: u8, profile: u8 }, Leave { reason: u8 }, + Meta(Vec), +} + +/// The kinds a participant may send: and in a watch room its controls and presentation +/// statements, `meta` events (co-watch §4.1). +pub fn participant_kinds(s: &Settings) -> Vec { + let mut k = PARTICIPANT_KINDS.to_vec(); + if s.watch.is_some() { + k.insert(0, kind::META); + } + k +} + +/// The kinds a viewer may send: chat; and in a watch room its `meta` events. +pub fn viewer_kinds(s: &Settings) -> Vec { + if s.watch.is_some() { vec![kind::META, kind::CHAT] } else { vec![kind::CHAT] } } impl Chain { /// The clock's next record at room-clock `t` (never before its last), signed. pub fn sign(&mut self, keys: &Keys, room: [u8; 32], t: u64, subject: [u8; 32], what: &Lifecycle) -> Vec { - let detail = match what { - Lifecycle::Join { grant } => Detail::Join { grant: *grant }, - Lifecycle::Publish { media, profile } => Detail::Publish { slot: String::new(), media: *media, profile: *profile, layers: 1 }, - Lifecycle::Leave { reason } => Detail::Leave { reason: *reason }, + let (k, payload) = match what { + Lifecycle::Meta(p) => (kind::META, p.clone()), + _ => { + let detail = match what { + Lifecycle::Join { grant } => Detail::Join { grant: *grant }, + Lifecycle::Publish { media, profile } => Detail::Publish { slot: String::new(), media: *media, profile: *profile, layers: 1 }, + Lifecycle::Leave { reason } => Detail::Leave { reason: *reason }, + Lifecycle::Meta(_) => unreachable!("a meta record is matched above"), + }; + let k = detail.kind(); + (k, Payload::Lifecycle { kind: k, subject, detail: detail.encode() }.encode()) + } }; - let k = detail.kind(); - let payload = Payload::Lifecycle { kind: k, subject, detail: detail.encode() }.encode(); let t = t.max(self.last_t); let ev = Event::sign(&keys.clock, room, self.seq, self.prev, t, None, k, payload); self.prev = ev.digest(); @@ -355,7 +412,7 @@ mod tests { use super::*; fn settings() -> Settings { - Settings { max_publishers: 2, max_present: 16, publisher_grant_s: 600, viewer_grant_s: 900, join_wait_s: 60, max_grants: 3, e2ee: false } + Settings { max_publishers: 2, max_present: 16, publisher_grant_s: 600, viewer_grant_s: 900, join_wait_s: 60, max_grants: 3, e2ee: false, watch: None, watch_control: 0, watch_window_ms: 5_000 } } #[test] diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/http.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/http.rs index 0629149ec..fea470531 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/http.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/http.rs @@ -16,8 +16,20 @@ //! | `POST /mls/key-package` `{"room", "key_package": }` | `{"ok", "principal"}`: kept for the principal's Add; `403` for a principal the room has not granted | //! | `POST /mls/post` `{"room", "frames": []}` | a GroupInfo, or a commit and its Welcome, checked by the clock and carried: `{"ok", "seq"}`; `409` `{"error": }` when the clock refuses it, which then is not carried | //! -//! Every answer is JSON and `Cache-Control: no-store`. A grant request's body is at most -//! 1 KiB, a log post's 128 KiB. +//! A watch room (`[room] watch_source`, [`crate::watch`]) has its source and its log: +//! +//! | Request | Answer | +//! |---|---| +//! | `GET /watch/time` | `{"now_us", "t0_us"}`: the service's clock, for a page's estimate of the room clock | +//! | `GET /watch/source` | the source's bytes, of its media type | +//! | `GET /watch/challenge` | `{"challenge": }`: single-use, good for a minute (live-rooms §10.5.3) | +//! | `POST /watch/join` `{"room", "grant": , "proof": }` | the grant's principal enters, the proof over a challenge for `POST ///watch/join`: the clock signs its `join`; `{"ok", "t": }`; `401` `{"error": }` for a proof that fails | +//! | `POST /watch/post` `{"room", "events": []}` (at most 8) | each event checked as co-watch §10 has it and carried, in order: `{"ok", "carried"}`; `409` `{"error": , "carried"}` at the first refused | +//! | `GET /watch?room=&from=[&wait_ms=]` | the room's log from entry `n` (`{"room", "entries": [{"seq", "event": }], "next", "end"}`), held up to 8 s while it has nothing past `n` | +//! | `GET /watch/room` | the room as a co-watch verifier is given it (co-watch §11.1), with the latest skew statements read | +//! +//! Every answer but the source is JSON and `Cache-Control: no-store`. A grant request's body is +//! at most 1 KiB, a join's 4 KiB, a watch post's 16 KiB, a log post's 128 KiB. use crate::e2ee::Refused; use crate::epoch::{MemberState, Refusal, Role}; @@ -41,6 +53,9 @@ const MAX_BODY: usize = 1024; const MAX_MLS_BODY: usize = 128 * 1024; /// How long `GET /mls` holds a request while the log has nothing new. const MLS_WAIT: Duration = Duration::from_secs(8); +/// A watch room's join and post bodies. +const MAX_JOIN_BODY: usize = 4 * 1024; +const MAX_WATCH_BODY: usize = 16 * 1024; /// Serve `listener` until the task is dropped. pub async fn serve(svc: Arc, listener: tokio::net::TcpListener) { @@ -107,7 +122,53 @@ async fn handle(svc: Arc, peer: SocketAddr, req: Request) -> svc.mls_changed.notify_waiters(); r } - (_, "/") | (_, "/health") | (_, "/room") | (_, "/grant") | (_, "/mls") | (_, "/mls/key-package") | (_, "/mls/post") => reply(StatusCode::METHOD_NOT_ALLOWED, json!({"error": "method"})), + (Method::GET, "/watch/time") => { + let t0 = svc.state.lock().unwrap().epoch.t0_us; + reply(StatusCode::OK, json!({"now_us": crate::now_us(), "t0_us": t0})) + } + (Method::GET, "/watch/source") => watch_source(&svc), + (Method::GET, "/watch/challenge") => { + let mut st = svc.state.lock().unwrap(); + match st.epoch.watch.as_mut() { + Some(w) => reply(StatusCode::OK, json!({"challenge": hex::encode(w.challenge(crate::now_us()))})), + None => reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})), + } + } + (Method::GET, "/watch") => watch_log(&svc, req.uri().query().unwrap_or("")).await, + (Method::GET, "/watch/room") => { + let st = svc.state.lock().unwrap(); + let ep = &st.epoch; + match ep.watch.as_ref() { + Some(w) => { + let mut v = w.room_json(&ep.descriptor, &ep.grants); + v["room"] = json!(hex::encode(ep.id)); + v["skews"] = w.last_skews(); + v["refused"] = json!(w.refused); + reply(StatusCode::OK, v) + } + None => reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})), + } + } + (Method::POST, "/watch/join") => { + let host = req.headers().get("host").and_then(|v| v.to_str().ok()).unwrap_or("").to_string(); + let body = match Limited::new(req.into_body(), MAX_JOIN_BODY).collect().await { + Ok(b) => b.to_bytes(), + Err(_) => return Ok(reply(StatusCode::PAYLOAD_TOO_LARGE, json!({"error": "body"}))), + }; + watch_join(&svc, &host, &body).await + } + (Method::POST, "/watch/post") => { + let body = match Limited::new(req.into_body(), MAX_WATCH_BODY).collect().await { + Ok(b) => b.to_bytes(), + Err(_) => return Ok(reply(StatusCode::PAYLOAD_TOO_LARGE, json!({"error": "body"}))), + }; + let r = watch_post(&svc, &body); + svc.watch_changed.notify_waiters(); + r + } + (_, "/") | (_, "/health") | (_, "/room") | (_, "/grant") | (_, "/mls") | (_, "/mls/key-package") | (_, "/mls/post") | (_, "/watch") | (_, "/watch/time") | (_, "/watch/source") | (_, "/watch/challenge") | (_, "/watch/join") | (_, "/watch/post") | (_, "/watch/room") => { + reply(StatusCode::METHOD_NOT_ALLOWED, json!({"error": "method"})) + } _ => reply(StatusCode::NOT_FOUND, json!({"error": "not found"})), }) } @@ -136,7 +197,7 @@ pub fn grant(svc: &Arc, client: &str, body: &[u8]) -> Response, body: &[u8]) -> Response> { } } } + +/// A watch room's source, whole (WAI co-watch §3.5): a page checks its bytes by their SHA-256, +/// the content hash its policy names, before it presents them. +fn watch_source(svc: &Arc) -> Response> { + let src = match svc.state.lock().unwrap().epoch.watch.as_ref() { + Some(w) => w.source.clone(), + None => return reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})), + }; + Response::builder() + .status(StatusCode::OK) + .header("content-type", src.content_type.as_str()) + .header("cache-control", "no-store") + .header("x-content-type-options", "nosniff") + .body(Full::new(Bytes::from((*src.bytes).clone()))) + .expect("a response") +} + +fn hex_field(v: &Value, k: &str) -> Option> { + v[k].as_str().and_then(|h| hex::decode(h).ok()) +} + +/// A viewer enters a watch room by proving it holds its grant's key (live-rooms §10.5.3, +/// §10.5.4); the clock then signs its `join`. +async fn watch_join(svc: &Arc, host: &str, body: &[u8]) -> Response> { + let Ok(v) = serde_json::from_slice::(body) else { return reply(StatusCode::BAD_REQUEST, json!({"error": "not JSON"})) }; + let (Some(room), Some(grant), Some(proof)) = (v["room"].as_str().and_then(room_of), hex_field(&v, "grant"), hex_field(&v, "proof")) else { + return reply(StatusCode::BAD_REQUEST, json!({"error": "room, grant and proof: hexadecimal"})); + }; + let context = wai::live_room::proof_context("POST", host, &format!("{}/watch/join", svc.public_prefix)); + let (generation, principal, digest, joined) = { + let mut st = svc.state.lock().unwrap(); + if st.epoch.id != room { + return reply(StatusCode::GONE, json!({"error": "room", "room": hex::encode(st.epoch.id)})); + } + let generation = st.epoch.generation; + let Some(w) = st.epoch.watch.as_mut() else { return reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})) }; + let principal = match w.admit(&grant, &proof, &context, crate::now_us()) { + Ok(p) => p, + Err(why) => { + w.refuse(&why); + return reply(StatusCode::UNAUTHORIZED, json!({"error": why})); + } + }; + let vw = w.viewers.get_mut(&principal).expect("admitted"); + vw.heard_us = crate::now_us(); + (generation, principal, vw.digest, vw.joined.filter(|_| !vw.leaving)) + }; + if let Some(t) = joined { + return reply(StatusCode::OK, json!({"ok": true, "t": t, "again": true})); + } + match svc.emit(generation, principal, &[crate::epoch::Lifecycle::Join { grant: digest }]).await { + Ok(t) => { + tracing::info!(principal = %hex::encode(&principal[..6]), t, "a viewer joins the watch room"); + reply(StatusCode::OK, json!({"ok": true, "t": t})) + } + Err(e) => reply(StatusCode::SERVICE_UNAVAILABLE, json!({"error": e})), + } +} + +/// A viewer's events, each checked and carried in order (WAI co-watch §10). +fn watch_post(svc: &Arc, body: &[u8]) -> Response> { + let Ok(v) = serde_json::from_slice::(body) else { return reply(StatusCode::BAD_REQUEST, json!({"error": "not JSON"})) }; + let Some(room) = v["room"].as_str().and_then(room_of) else { return reply(StatusCode::BAD_REQUEST, json!({"error": "room: 64 hexadecimal digits"})) }; + let events: Option>> = v["events"].as_array().map(|a| a.iter().map(|e| e.as_str().and_then(|h| hex::decode(h).ok())).collect()).unwrap_or(None); + let Some(events) = events.filter(|e| !e.is_empty() && e.len() <= crate::watch::MAX_POST) else { + return reply(StatusCode::BAD_REQUEST, json!({"error": "events: 1 to 8, hexadecimal"})); + }; + let mut st = svc.state.lock().unwrap(); + if st.epoch.id != room { + return reply(StatusCode::GONE, json!({"error": "room", "room": hex::encode(st.epoch.id)})); + } + let t0 = st.epoch.t0_us; + let Some(w) = st.epoch.watch.as_mut() else { return reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})) }; + let now = crate::now_us(); + for (k, e) in events.iter().enumerate() { + if let Err(why) = w.post(e, now.saturating_sub(t0), now) { + w.refuse(why); + tracing::info!(reason = why, "a watch post refused"); + return reply(StatusCode::CONFLICT, json!({"error": why, "carried": k})); + } + } + reply(StatusCode::OK, json!({"ok": true, "carried": events.len(), "log": w.log.len()})) +} + +/// A watch room's log from `from`, once it holds anything past it or after [`MLS_WAIT`]. +async fn watch_log(svc: &Arc, query: &str) -> Response> { + let mut room = None; + let mut from = 0usize; + let mut wait = MLS_WAIT; + for (k, v) in query.split('&').filter_map(|kv| kv.split_once('=')) { + match k { + "room" => room = room_of(v), + "from" => from = v.parse().unwrap_or(0), + "wait_ms" => wait = v.parse().map(Duration::from_millis).unwrap_or(MLS_WAIT).min(MLS_WAIT), + _ => {} + } + } + let Some(room) = room else { return reply(StatusCode::BAD_REQUEST, json!({"error": "room: 64 hexadecimal digits"})) }; + let deadline = tokio::time::Instant::now() + wait; + loop { + let notified = svc.watch_changed.notified(); + tokio::pin!(notified); + notified.as_mut().enable(); + { + let st = svc.state.lock().unwrap(); + if st.epoch.id != room { + return reply(StatusCode::GONE, json!({"error": "room", "room": hex::encode(st.epoch.id)})); + } + let Some(w) = st.epoch.watch.as_ref() else { return reply(StatusCode::NOT_FOUND, json!({"error": "not a watch room"})) }; + if w.log.len() > from || tokio::time::Instant::now() >= deadline { + let mut v = w.entries(from); + v["room"] = json!(hex::encode(room)); + return reply(StatusCode::OK, v); + } + } + let _ = tokio::time::timeout_at(deadline, notified).await; + } +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/lib.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/lib.rs index 18ae6e07c..017009c9b 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/lib.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/lib.rs @@ -24,6 +24,7 @@ pub mod epoch; pub mod http; pub mod keys; pub mod limiter; +pub mod watch; use epoch::{Chain, Epoch, Lifecycle, MemberState, Settings}; use joule_moq::draft22::data::{SubgroupCodec, SubgroupHeader, SubgroupId, SubgroupObject}; @@ -64,6 +65,11 @@ pub struct Config { /// the service again. 0: no limit. #[serde(default)] pub max_resident_mb: u64, + /// The path prefix the front puts before the service's own paths (`/room-api` where the + /// front strips it): the target a proof of possession names (WAI live-rooms §10.5.1) is + /// the one the client addressed. + #[serde(default)] + pub public_prefix: String, } #[derive(Clone, Debug, Deserialize)] @@ -77,11 +83,31 @@ pub struct RoomConfig { pub max_grants: usize, /// Every room end-to-end encrypted (WAI confidentiality). pub e2ee: bool, + /// Every room watches this file together (WAI co-watch); empty for none. + pub watch_source: String, + /// The file's duration, in milliseconds. + pub watch_duration_ms: u32, + /// The actions every principal may control (co-watch §4.4): 15 for all of them. + pub watch_control: u8, + /// The skew window, in milliseconds: a whole number of seconds. + pub watch_window_ms: u32, } impl Default for RoomConfig { fn default() -> Self { - RoomConfig { max_publishers: 4, max_present: 16, publisher_grant_s: 1_200, viewer_grant_s: 1_800, join_wait_s: 90, max_grants: 64, e2ee: false } + RoomConfig { + max_publishers: 4, + max_present: 16, + publisher_grant_s: 1_200, + viewer_grant_s: 1_800, + join_wait_s: 90, + max_grants: 64, + e2ee: false, + watch_source: String::new(), + watch_duration_ms: 0, + watch_control: 15, + watch_window_ms: 5_000, + } } } @@ -105,9 +131,32 @@ impl Config { toml::from_str(s).map_err(|e| e.to_string()) } - pub fn settings(&self) -> Settings { + /// The rooms' settings; a watch room's source read from its file. + pub fn settings(&self) -> Result { let r = &self.room; - Settings { max_publishers: r.max_publishers, max_present: r.max_present, publisher_grant_s: r.publisher_grant_s, viewer_grant_s: r.viewer_grant_s, join_wait_s: r.join_wait_s, max_grants: r.max_grants, e2ee: r.e2ee } + let watch = if r.watch_source.is_empty() { + None + } else { + if r.e2ee { + return Err("a room is not both end-to-end encrypted and a watch room: its source is served in the clear".into()); + } + if r.watch_control > 15 || r.watch_window_ms == 0 || !r.watch_window_ms.is_multiple_of(watch::PERIOD_MS) || r.watch_window_ms / watch::PERIOD_MS > 1000 { + return Err("watch_control is 0 to 15, and watch_window_ms a whole number of seconds, at most 1000".into()); + } + Some(std::sync::Arc::new(watch::WatchSource::load(&r.watch_source, r.watch_duration_ms)?)) + }; + Ok(Settings { + max_publishers: r.max_publishers, + max_present: r.max_present, + publisher_grant_s: r.publisher_grant_s, + viewer_grant_s: r.viewer_grant_s, + join_wait_s: r.join_wait_s, + max_grants: r.max_grants, + e2ee: r.e2ee, + watch, + watch_control: r.watch_control, + watch_window_ms: r.watch_window_ms, + }) } } @@ -156,15 +205,24 @@ pub struct Service { pub changed: Notify, /// Signalled whenever an end-to-end encrypted room's log grows. pub mls_changed: Notify, + /// Signalled whenever a watch room's log grows. + pub watch_changed: Notify, + /// The path prefix the front puts before the service's paths ([`Config::public_prefix`]). + pub public_prefix: String, } impl Service { + /// The service; it panics on a configuration [`Service::try_new`] refuses. pub fn new(keys: Keys, cfg: &Config) -> Arc { - let settings = cfg.settings(); + Service::try_new(keys, cfg).expect("a configuration the service takes") + } + + pub fn try_new(keys: Keys, cfg: &Config) -> Result, String> { + let settings = cfg.settings()?; let r = &cfg.rate; let limiter = Limiter::new(Rate { burst: r.client_burst as f64, every_s: r.client_every_s as f64 }, Rate { burst: r.global_burst as f64, every_s: r.global_every_s as f64 }); let epoch = Epoch::new(&keys, settings.clone(), 1, now_us()); - Arc::new(Service { + Ok(Arc::new(Service { keys, settings, relay_url: cfg.relay_url.clone(), @@ -175,7 +233,9 @@ impl Service { next_generation: AtomicU64::new(2), changed: Notify::new(), mls_changed: Notify::new(), - }) + watch_changed: Notify::new(), + public_prefix: cfg.public_prefix.trim_end_matches('/').to_string(), + })) } fn clock_hex(&self) -> String { @@ -234,7 +294,13 @@ impl Service { } /// Sign and send lifecycle events for `subject` in the room of `generation`, in order. - pub async fn emit(&self, generation: u64, subject: [u8; 32], items: &[Lifecycle]) -> Result<(), String> { + pub async fn emit(&self, generation: u64, subject: [u8; 32], items: &[Lifecycle]) -> Result { + self.emit_after(generation, subject, items, 0).await + } + + /// [`Service::emit`], each record at room-clock `min_t` or later: a viewer's `leave` comes + /// after its last event. The `t` of the last record signed. + pub async fn emit_after(&self, generation: u64, subject: [u8; 32], items: &[Lifecycle], min_t: u64) -> Result { let mut clock = self.clock.lock().await; let client = clock.client.clone().ok_or("the clock has no session")?; let (room, t0_us) = { @@ -253,20 +319,70 @@ impl Service { clock.track = Some(Track { generation, room, t0_us, alias, _publish: publish, chain: Chain::default(), group: None, stream: None, next_object: 0 }); } let track = clock.track.as_mut().expect("made above"); + let mut last = 0; for what in items { - let t = now_us().saturating_sub(track.t0_us); + let t = now_us().saturating_sub(track.t0_us).max(min_t); let rec = track.chain.sign(&self.keys, track.room, t, subject, what); if let Err(e) = write(&client, track, &rec).await { // The track is no longer whole: the next event opens it again. clock.track = None; return Err(e); } - tracing::info!(room = %hex::encode(room), subject = %hex::encode(&subject[..6]), event = ?what, "lifecycle"); + last = track.chain.last_t; + match what { + Lifecycle::Meta(_) => tracing::info!(room = %hex::encode(room), "the clock's statement"), + _ => tracing::info!(room = %hex::encode(room), subject = %hex::encode(&subject[..6]), event = ?what, "lifecycle"), + } self.mls_lifecycle(generation, &rec, subject, what); + self.watch_record(generation, &rec, subject, what); } drop(clock); self.changed.notify_waiters(); - Ok(()) + Ok(last) + } + + /// In a watch room, every record of the clock's chain is carried on the room's log too, + /// and its viewers' presence followed (WAI co-watch). + fn watch_record(&self, generation: u64, rec: &[u8], subject: [u8; 32], what: &Lifecycle) { + let mut st = self.state.lock().unwrap(); + if st.epoch.generation != generation { + return; + } + if let Some(w) = st.epoch.watch.as_mut() { + w.clock_record(rec, subject, what); + drop(st); + self.watch_changed.notify_waiters(); + } + } + + /// The clock's part in a watch room: each window's skew statements once the window has + /// ended (co-watch §8.4), and a `leave` for each viewer that has fallen silent or whose + /// grant has ended. Runs for as long as the service does. + pub async fn run_watch(self: Arc) { + loop { + tokio::time::sleep(Duration::from_millis(250)).await; + if !self.connected.load(Ordering::Acquire) { + continue; + } + let (generation, statements, ended) = { + let mut st = self.state.lock().unwrap(); + let generation = st.epoch.generation; + let t0 = st.epoch.t0_us; + let Some(w) = st.epoch.watch.as_mut() else { continue }; + let now = now_us(); + (generation, w.due_statements(now.saturating_sub(t0)), w.ended(now)) + }; + for s in statements { + if let Err(e) = self.emit(generation, [0; 32], &[Lifecycle::Meta(watch::skew_payload(&s))]).await { + tracing::warn!(error = %e, "a skew statement could not be sent"); + } + } + for (p, why, min_t) in ended { + if let Err(e) = self.emit_after(generation, p, &[Lifecycle::Leave { reason: why }], min_t).await { + tracing::warn!(error = %e, "a viewer's leave could not be sent"); + } + } + } } /// In an end-to-end encrypted room, a lifecycle record is carried on the room's log too, diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/main.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/main.rs index 8bcdc8127..d480e70dd 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/main.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/main.rs @@ -76,7 +76,13 @@ async fn serve(cfg: Config, keys: Keys) -> ExitCode { return ExitCode::FAILURE; } }; - let svc = Service::new(keys, &cfg); + let svc = match Service::try_new(keys, &cfg) { + Ok(s) => s, + Err(e) => { + eprintln!("joule-moq-room: {e}"); + return ExitCode::FAILURE; + } + }; tracing::info!( "room service on http://{}; authority {}, clock {}; relay {}", cfg.listen, @@ -85,6 +91,9 @@ async fn serve(cfg: Config, keys: Keys) -> ExitCode { cfg.relay_url ); tokio::spawn(svc.clone().run_clock()); + if svc.settings.watch.is_some() { + tokio::spawn(svc.clone().run_watch()); + } tokio::spawn(http::serve(svc.clone(), listener)); if cfg.max_resident_mb != 0 { let max_mb = cfg.max_resident_mb; diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs new file mode 100644 index 000000000..8a618e032 --- /dev/null +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs @@ -0,0 +1,622 @@ +//! Co-watch rooms (WAI `extensions/co-watch.md`): the service's part. +//! +//! A room the service keeps with a `watch_source` watches that source together. The room's +//! authority signs a co-watch policy (`WXP1`, §3) naming the source, an object sequence of one +//! object: the file, by the SHA-256 of its bytes and its duration. The service serves the file, +//! and is the room's carrier of its viewers' events (§10): one log per room, holding every +//! record of the clock's chain (the lifecycle, viewers' presence among it, and the skew +//! statements) and every event a viewer posts, in the order the service took them. A viewer +//! enters by proving it holds its grant's key over a challenge the service issued (live-rooms +//! §10.5.3); the clock then signs its `join`, and its `leave` when it stops stating its +//! presentation or its grant ends. +//! +//! A posted event is carried only when a verifier would accept it: it reads, is the viewer's +//! next in its chain, is signed by it, is a `meta` event within its grant's policy and rate, and +//! is a control that §5 accepts or a presentation statement that §7.2 accepts. Each window, the +//! clock signs the skew statements of §8.4, computed by `wai-rs` from what the log holds, with +//! `held` the events of each viewer it has carried; a statement that arrives later changes +//! nothing it said. + +use ed25519_dalek::SigningKey; +use serde_json::{json, Value}; +use sha2::{Digest, Sha256}; +use std::collections::{BTreeMap, HashMap, VecDeque}; +use std::sync::Arc; +use wai::co_watch::{ + self as cw, may_control, read_statement, source_digest, source_duration_us, GrantChange, SampleRec, Skew, SourceObject, Statement, Stretch, TimedControl, Timeline, WatchFacts, + WatchPolicy, +}; +use wai::live_events::{kind, Event, Payload}; +use wai::live_room::{leave, Detail, Grant}; + +use crate::epoch::Lifecycle; + +/// The policy every co-watch room the service keeps states (co-watch §3.1): controls at least +/// 600 ms and at most 10 s ahead, rates from half to twice normal speed, one-second slots, a +/// 250 ms bound at the 95th percentile, samples settling for 1.5 s, and the catch-up rule's +/// 40 ms, 5 % and one second. +pub const LEAD_MS: u32 = 600; +pub const HORIZON_MS: u32 = 10_000; +pub const MIN_RATE: u32 = 500_000; +pub const MAX_RATE: u32 = 2_000_000; +pub const PERIOD_MS: u32 = 1_000; +pub const SETTLE_MS: u32 = 1_500; +pub const BOUND_US: u32 = 250_000; +pub const QUANTILE: u8 = 95; +pub const TOLERANCE_US: u32 = 40_000; +pub const NUDGE: u32 = 50_000; +pub const SEEK_US: u32 = 1_000_000; +/// A window's statements are made this long after its end, for its last statements to arrive. +pub const STATE_AFTER_US: u64 = 1_000_000; +/// A viewer that has posted nothing for this long has left (`leave` reason 4). +pub const SILENT_US: u64 = 4_000_000; +/// An event whose `t` is this far past the service's clock is refused. +pub const AHEAD_US: u64 = 5_000_000; +/// Events one post carries at most. +pub const MAX_POST: usize = 8; +/// Entries one answer of the log carries at most. +pub const PAGE: usize = 512; +/// A challenge is good for this long. +pub const CHALLENGE_US: u64 = 60_000_000; + +/// The source a co-watch room watches: one file, served whole. +pub struct WatchSource { + pub bytes: Arc>, + pub content_type: String, + pub object: SourceObject, +} + +impl std::fmt::Debug for WatchSource { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "WatchSource({} bytes, {}, {} ms)", self.bytes.len(), self.content_type, self.object.duration_ms) + } +} + +impl WatchSource { + /// The file at `path`, of `duration_ms`, at most 256 MiB. + pub fn load(path: &str, duration_ms: u32) -> Result { + if duration_ms == 0 { + return Err("watch_duration_ms must be above 0".into()); + } + let bytes = std::fs::read(path).map_err(|e| format!("watch_source {path}: {e}"))?; + if bytes.len() > 256 << 20 { + return Err(format!("watch_source {path}: more than 256 MiB")); + } + let content_type = match path.rsplit('.').next().map(str::to_ascii_lowercase).as_deref() { + Some("wav") => "audio/wav", + Some("webm") => "video/webm", + Some("mp4") | Some("m4v") => "video/mp4", + Some("ogg") | Some("oga") => "audio/ogg", + Some("mp3") => "audio/mpeg", + _ => "application/octet-stream", + } + .to_string(); + let object = SourceObject { content_hash: Sha256::digest(&bytes).into(), duration_ms }; + Ok(WatchSource { bytes: Arc::new(bytes), content_type, object }) + } +} + +/// The co-watch policy of the room `room` (co-watch §3), signed by the authority. +pub fn policy(room: [u8; 32], source: &WatchSource, window_ms: u32, authority: &SigningKey) -> WatchPolicy { + let objects = [source.object]; + WatchPolicy { + room, + prev: [0; 32], + effective: 0, + source_type: cw::source_type::OBJECTS, + source: source_digest(&objects), + duration_us: source_duration_us(&objects), + lead_ms: LEAD_MS, + horizon_ms: HORIZON_MS, + min_rate: MIN_RATE, + max_rate: MAX_RATE, + period_ms: PERIOD_MS, + window_ms, + settle_ms: SETTLE_MS, + bound_us: BOUND_US, + quantile: QUANTILE, + tolerance_us: TOLERANCE_US, + nudge: NUDGE, + seek_us: SEEK_US, + sig: [0; 64], + } + .sign(authority) +} + +/// A viewer of the room: its grant, its presence and its chain as the service carried it. +#[derive(Clone, Debug)] +pub struct Viewer { + pub grant: Grant, + pub record: Vec, + pub digest: [u8; 32], + /// Its presence: the `t` of its `join`, while present. + pub joined: Option, + /// A `leave` asked of the clock and not yet signed. + pub leaving: bool, + /// Present by its proof at `/watch/join`, and so gone once silent; a publisher is present + /// while its tracks are. + pub by_proof: bool, + pub digests: Vec<[u8; 32]>, + pub last_t: u64, + /// The service's clock (µs since 1970) at its last post or join. + pub heard_us: u64, + /// The `t` of its recent events, for its policy's rate (live-events §6.3). + recent: VecDeque, +} + +/// Why a post, or a part of one, was not carried. +pub type Refusal = &'static str; + +/// A co-watch room's state at the service. +pub struct WatchRoom { + pub room: [u8; 32], + pub t0_us: u64, + pub policy: WatchPolicy, + pub policy_bytes: Vec, + pub source: Arc, + /// Every record the room's log carries, in the order taken. + pub log: Vec>, + pub viewers: BTreeMap<[u8; 32], Viewer>, + pub controls: Vec, + pub samples: Vec, + pub stretches: Vec, + pub grant_changes: Vec, + /// The start of the next window the clock states. + pub next_from: u64, + /// Challenges issued and not consumed, with when (µs since 1970); and those consumed. + challenges: HashMap<[u8; 32], u64>, + consumed: VecDeque<[u8; 32]>, + pub refused: BTreeMap, + pub skews: Vec, +} + +impl WatchRoom { + pub fn new(room: [u8; 32], t0_us: u64, source: Arc, window_ms: u32, authority: &SigningKey) -> WatchRoom { + let policy = policy(room, &source, window_ms, authority); + WatchRoom { + room, + t0_us, + policy_bytes: policy.to_bytes(), + policy, + source, + log: Vec::new(), + viewers: BTreeMap::new(), + controls: Vec::new(), + samples: Vec::new(), + stretches: Vec::new(), + grant_changes: Vec::new(), + next_from: 0, + challenges: HashMap::new(), + consumed: VecDeque::new(), + refused: BTreeMap::new(), + skews: Vec::new(), + } + } + + pub fn window_us(&self) -> u64 { + u64::from(self.policy.window_ms) * 1000 + } + + /// A viewer's grant the room issued. + pub fn granted(&mut self, record: Vec, grant: Grant, digest: [u8; 32]) { + let p = grant.principal; + self.viewers.insert(p, Viewer { grant, record, digest, joined: None, leaving: false, by_proof: false, digests: Vec::new(), last_t: 0, heard_us: 0, recent: VecDeque::new() }); + } + + pub fn present(&self) -> usize { + self.viewers.values().filter(|v| v.joined.is_some()).count() + } + + /// A record of the clock's chain, as the clock signed it: carried, and a viewer's presence + /// followed. + pub fn clock_record(&mut self, rec: &[u8], subject: [u8; 32], what: &Lifecycle) { + self.log.push(rec.to_vec()); + let t = Event::parse(rec).map(|e| e.t).unwrap_or(0); + match what { + Lifecycle::Join { grant } => { + self.stretches.push(Stretch { principal: subject, join: t, leave: None }); + let subscribe = self.viewers.get(&subject).is_none_or(|v| v.digest != *grant || v.grant.caps.subscribe); + self.grant_changes.push(GrantChange { principal: subject, t, subscribe }); + if let Some(v) = self.viewers.get_mut(&subject) { + v.joined = Some(t); + v.leaving = false; + v.last_t = v.last_t.max(t); + } + } + Lifecycle::Leave { .. } => { + if let Some(s) = self.stretches.iter_mut().rev().find(|s| s.principal == subject && s.leave.is_none()) { + s.leave = Some(t); + } + if let Some(v) = self.viewers.get_mut(&subject) { + v.joined = None; + v.leaving = false; + } + } + _ => {} + } + } + + /// A fresh challenge (live-rooms §10.5.3), from the operating system's generator. + pub fn challenge(&mut self, now_us: u64) -> [u8; 32] { + self.challenges.retain(|_, at| now_us.saturating_sub(*at) < CHALLENGE_US); + if self.challenges.len() >= 1024 { + let oldest = self.challenges.iter().min_by_key(|(_, at)| **at).map(|(c, _)| *c); + if let Some(c) = oldest { + self.challenges.remove(&c); + } + } + let mut c = [0u8; 32]; + rand_core_06::RngCore::fill_bytes(&mut rand_core_06::OsRng, &mut c); + self.challenges.insert(c, now_us); + c + } + + /// The viewer that presents `grant` with `proof` for the request `context` (live-rooms + /// §10.5.4), its challenge consumed: its principal. + pub fn admit(&mut self, grant: &[u8], proof: &[u8], context: &str, now_us: u64) -> Result<[u8; 32], String> { + let digest: [u8; 32] = Sha256::digest(grant.get(..grant.len().saturating_sub(64)).unwrap_or(&[])).into(); + let v = self.viewers.values().find(|v| v.record == grant && v.digest == digest).ok_or("grant_unknown")?; + let p = wai::live_room::Proof::read(proof).map_err(|r| r.code().to_string())?; + let consumed: Vec<[u8; 32]> = self.consumed.iter().copied().collect(); + let fresh = self.challenges.get(&p.challenge).is_some_and(|at| now_us.saturating_sub(*at) < CHALLENGE_US); + let held = if fresh { p.challenge } else { [0; 32] }; + wai::live_room::check_proof(&v.digest, &v.grant.principal, Some(proof), &held, &consumed, context).map_err(|r| r.code().to_string())?; + let principal = v.grant.principal; + self.viewers.get_mut(&principal).expect("found above").by_proof = true; + self.challenges.remove(&p.challenge); + self.consumed.push_back(p.challenge); + if self.consumed.len() > 1024 { + self.consumed.pop_front(); + } + Ok(principal) + } + + /// One posted event, at room-clock `now_t`: carried, or why not. A record carried before + /// is accepted again and not carried twice. + pub fn post(&mut self, rec: &[u8], now_t: u64, now_us: u64) -> Result<(), Refusal> { + let ev = Event::parse(rec).map_err(|r| r.code())?; + if ev.room != self.room { + return Err("wrong_room"); + } + let digest = ev.digest(); + let v = self.viewers.get(&ev.principal).ok_or("not_present")?; + if (ev.seq as usize) < v.digests.len() { + return if v.digests[ev.seq as usize] == digest { Ok(()) } else { Err("seq_replay") }; + } + let joined = v.joined.filter(|_| !v.leaving).ok_or("not_present")?; + ev.verify_signature().map_err(|r| r.code())?; + if ev.seq as usize != v.digests.len() { + return Err("delivery_gap"); + } + if ev.prev != v.digests.last().copied().unwrap_or([0; 32]) { + return Err("chain_broken"); + } + if ev.t < v.last_t || ev.t < joined { + return Err("time_reversed"); + } + if ev.t > now_t + AHEAD_US { + return Err("ahead"); + } + if !v.grant.covers(self.t0_us, ev.t) { + return Err("outside_grant_window"); + } + let pol = v.grant.policy; + if ev.kind != kind::META || !pol.permits(kind::META) { + return Err("kind_not_permitted"); + } + if ev.payload.len() > usize::from(pol.max_payload) { + return Err("payload_too_large"); + } + let in_window = v.recent.iter().filter(|&&x| ev.t - x < pol.window_us).count() as u64; + if in_window + 1 > u64::from(pol.max_events) { + return Err("rate_exceeded"); + } + let p = &self.policy; + match read_statement(&ev.payload) { + None => return Err("not_a_statement"), + Some(Err(r)) => return Err(r.code()), + Some(Ok(Statement::Control(c))) => { + if !may_control(&v.grant, c.action) { + return Err("control_not_permitted"); + } + if c.at < ev.t + u64::from(p.lead_ms) * 1000 { + return Err("control_not_ahead"); + } + if c.at > ev.t + u64::from(p.horizon_ms) * 1000 { + return Err("control_beyond_horizon"); + } + let ok = match c.action { + cw::action::SEEK => c.arg <= p.duration_us, + cw::action::RATE => c.arg >= u64::from(p.min_rate) && c.arg <= u64::from(p.max_rate), + _ => true, + }; + if !ok { + return Err("control_out_of_range"); + } + self.controls.push(TimedControl { control: c, t: ev.t, digest }); + } + Some(Ok(Statement::Presentation(s))) => { + if s.room != self.room { + return Err("wrong_room"); + } + if s.player != ev.principal { + return Err("presentation_wrong_key"); + } + s.verify().map_err(|r| r.code())?; + if s.at > ev.t { + return Err("presentation_ahead"); + } + if s.source != p.source { + return Err("presentation_wrong_source"); + } + self.samples.push(SampleRec { principal: ev.principal, seq: ev.seq, at: s.at, position: s.position }); + } + Some(Ok(Statement::Skew(_))) => return Err("cw_not_permitted"), + } + let v = self.viewers.get_mut(&ev.principal).expect("found above"); + v.digests.push(digest); + v.last_t = ev.t; + v.heard_us = now_us; + v.recent.push_back(ev.t); + while v.recent.front().is_some_and(|&x| ev.t - x >= pol.window_us) { + v.recent.pop_front(); + } + self.log.push(rec.to_vec()); + Ok(()) + } + + /// Count a refusal by its reason. + pub fn refuse(&mut self, why: &str) { + *self.refused.entry(why.to_string()).or_default() += 1; + } + + /// What the skew statements are computed from (co-watch §8). + pub fn facts(&self) -> WatchFacts { + WatchFacts { + timeline: Timeline::build(std::slice::from_ref(&self.policy), &self.controls), + stretches: self.stretches.clone(), + grants: self.grant_changes.clone(), + samples: self.samples.clone(), + } + } + + /// The skew statements of every window that ended at least [`STATE_AFTER_US`] before + /// `now_t` and was not yet stated, in order: each as the clock signs it. + pub fn due_statements(&mut self, now_t: u64) -> Vec { + let w = self.window_us(); + let mut out = Vec::new(); + while self.next_from + w + STATE_AFTER_US <= now_t { + let (from, to) = (self.next_from, self.next_from + w); + self.next_from = to; + if self.present() == 0 && !self.stretches.iter().any(|s| s.leave.is_none_or(|l| l > from) && s.join < to) { + continue; + } + let held: BTreeMap<[u8; 32], u64> = self.viewers.iter().map(|(p, v)| (*p, v.digests.len() as u64)).collect(); + let st = self.facts().statements(from, to, &held); + self.skews.extend(st.iter().cloned()); + out.extend(st); + } + out + } + + /// The viewers whose presence has ended at `now_us` (µs since 1970): silent too long, or + /// their grant over. Each with its `leave` reason and the least `t` the `leave` may have, + /// after the viewer's last event. + pub fn ended(&mut self, now_us: u64) -> Vec<([u8; 32], u8, u64)> { + let now_s = now_us / 1_000_000; + let mut out = Vec::new(); + for (p, v) in self.viewers.iter_mut() { + if v.joined.is_none() || v.leaving || !v.by_proof { + continue; + } + let why = if now_s >= v.grant.exp { + leave::GRANT_ENDED + } else if now_us.saturating_sub(v.heard_us) > SILENT_US { + leave::CONNECTION_LOST + } else { + continue; + }; + v.leaving = true; + out.push((*p, why, v.last_t + 1)); + } + out + } + + /// The log from `from`, at most [`PAGE`] entries. + pub fn entries(&self, from: usize) -> Value { + let end = self.log.len().min(from.saturating_add(PAGE)); + let items: Vec = (from.min(end)..end).map(|i| json!({"seq": i, "event": hex::encode(&self.log[i])})).collect(); + json!({"entries": items, "next": end, "end": self.log.len()}) + } + + /// The room as a co-watch verifier is given it (co-watch §11.1), in the corpus's form: + /// the chains as the log carried them, by principal in the order each first appears. + pub fn room_json(&self, descriptor: &[u8], grants: &[Vec]) -> Value { + let mut order: Vec<[u8; 32]> = Vec::new(); + let mut chains: BTreeMap<[u8; 32], Vec> = BTreeMap::new(); + for r in &self.log { + let Ok(e) = Event::parse(r) else { continue }; + if !chains.contains_key(&e.principal) { + order.push(e.principal); + } + chains.entry(e.principal).or_default().push(hex::encode(r)); + } + json!({ + "descriptor": hex::encode(descriptor), + "grants": grants.iter().map(hex::encode).collect::>(), + "key_log": null, + "chains": order.iter().map(|p| chains[p].clone()).collect::>(), + "policies": [hex::encode(&self.policy_bytes)], + "sources": [[{"content_hash": hex::encode(self.source.object.content_hash), "duration_ms": self.source.object.duration_ms}]], + }) + } + + /// The room's co-watch part, as a page reads it before it enters. + pub fn view(&self) -> Value { + json!({ + "policy": hex::encode(&self.policy_bytes), + "source": {"path": "/watch/source", "content_type": self.source.content_type, "objects": [{"content_hash": hex::encode(self.source.object.content_hash), "duration_ms": self.source.object.duration_ms}]}, + "log": self.log.len(), + "present": self.present(), + }) + } + + /// The latest skew statements, read, for the service's own state. + pub fn last_skews(&self) -> Value { + let last_from = self.skews.last().map(|s| s.from); + Value::Array( + self.skews + .iter() + .filter(|s| Some(s.from) == last_from) + .map(|s| { + json!({"from": s.from, "to": s.to, "viewers": s.viewers.iter().map(|v| json!({"principal": hex::encode(v.principal), "verdict": cw::verdict_name(v.verdict), "pq": v.pq, "counted": v.counted, "due": v.due})).collect::>()}) + }) + .collect(), + ) + } +} + +/// The payload a clock's `meta` record carries: a skew statement. +pub fn skew_payload(s: &Skew) -> Vec { + Statement::Skew(s.clone()).encode() +} + +/// A lifecycle detail's kind and payload for the clock (used by [`crate::epoch::Chain`]). +pub fn lifecycle_payload(subject: [u8; 32], d: &Detail) -> (u8, Vec) { + let k = d.kind(); + (k, Payload::Lifecycle { kind: k, subject, detail: d.encode() }.encode()) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::epoch::{Chain, Epoch, Role, Settings}; + use crate::keys::Keys; + use wai::co_watch::{action, state, Control, Presentation}; + + fn source() -> Arc { + let bytes = vec![7u8; 1000]; + Arc::new(WatchSource { object: SourceObject { content_hash: Sha256::digest(&bytes).into(), duration_ms: 60_000 }, bytes: Arc::new(bytes), content_type: "audio/wav".into() }) + } + + fn settings(control: u8) -> Settings { + Settings { + max_publishers: 2, + max_present: 16, + publisher_grant_s: 600, + viewer_grant_s: 900, + join_wait_s: 60, + max_grants: 16, + e2ee: false, + watch: Some(source()), + watch_control: control, + watch_window_ms: 5_000, + } + } + + struct Page { + key: SigningKey, + seq: u64, + prev: [u8; 32], + } + + impl Page { + fn event(&mut self, room: [u8; 32], t: u64, payload: Vec) -> Vec { + let e = Event::sign(&self.key, room, self.seq, self.prev, t, None, kind::META, payload); + self.seq += 1; + self.prev = e.digest(); + e.to_bytes() + } + } + + /// A watch room as the service keeps it: two viewers enter by proof, post controls and + /// statements the service checks as §5 and §7.2 do, and the clock's skew statement of a + /// window verifies with every viewer's entry, as co-watch §11 verifies a room. + #[test] + fn a_watch_room_carries_what_verifies_and_states_its_skew() { + let keys = Keys::generate(); + let now_s = 1_800_000_000u64; + let t0 = now_s * 1_000_000; + let mut e = Epoch::new(&keys, settings(3), 1, t0); + let k = |i: u8| SigningKey::from_bytes(&[i; 32]); + let (a, b) = (k(1), k(2)); + e.grant(&keys, a.verifying_key().to_bytes(), Role::Viewer, now_s).unwrap(); + e.grant(&keys, b.verifying_key().to_bytes(), Role::Viewer, now_s).unwrap(); + let room = e.id; + let mut chain = Chain::default(); + let s = 1_000_000u64; + { + let w = e.watch.as_mut().expect("a watch room"); + // Each viewer proves its key over a challenge for the request it makes. + for v in [&a, &b] { + let rec = w.viewers[&v.verifying_key().to_bytes()].record.clone(); + let c = w.challenge(t0); + let digest: [u8; 32] = Sha256::digest(&rec[..rec.len() - 64]).into(); + let ctx = "POST //room.test/watch/join"; + let proof = wai::live_room::Proof::sign(digest, v, c, ctx).to_bytes(); + assert_eq!(w.admit(&rec, &proof, ctx, t0), Ok(v.verifying_key().to_bytes())); + assert!(w.admit(&rec, &proof, ctx, t0).is_err(), "a proof is good once"); + } + } + for v in [&a, &b] { + let p = v.verifying_key().to_bytes(); + let g = e.watch.as_ref().unwrap().viewers[&p].digest; + let what = Lifecycle::Join { grant: g }; + let rec = chain.sign(&keys, room, s, p, &what); + e.watch.as_mut().unwrap().clock_record(&rec, p, &what); + } + let w = e.watch.as_mut().unwrap(); + let src = w.policy.source; + let mut pa = Page { key: a.clone(), seq: 0, prev: [0; 32] }; + let mut pb = Page { key: b.clone(), seq: 0, prev: [0; 32] }; + // A control from a viewer whose watch_control (3) allows play: carried; a seek it + // does not allow, and a play in the past, are not. + let play = Control { action: action::PLAY, at: 2 * s, arg: 0 }.encode(); + let r = pa.event(room, 1_200_000, play); + assert_eq!(w.post(&r, 1_200_000, t0), Ok(())); + assert_eq!(w.post(&r, 1_200_000, t0), Ok(()), "a record carried before is not carried twice"); + let mut probe = Page { key: a.clone(), seq: pa.seq, prev: pa.prev }; + assert_eq!(w.post(&probe.event(room, 1_300_000, Control { action: action::SEEK, at: 2 * s, arg: 5 }.encode()), 1_300_000, t0), Err("control_not_permitted")); + let mut probe = Page { key: a.clone(), seq: pa.seq, prev: pa.prev }; + assert_eq!(w.post(&probe.event(room, 1_300_000, Control { action: action::PAUSE, at: s, arg: 0 }.encode()), 1_300_000, t0), Err("control_not_ahead")); + // A statement made by another key is refused. + let mut probe = Page { key: b.clone(), seq: pb.seq, prev: pb.prev }; + let lifted = Presentation::sign(&a, room, src, s, 0, state::PAUSED, 1_000_000).encode(); + assert_eq!(w.post(&probe.event(room, 1_300_000, lifted), 1_300_000, t0), Err("presentation_wrong_key")); + // Both state their presentation twice a slot to 10 s, close to the room, from after + // the control. + let mut x = 1_300_000u64; + while x < 10 * s { + for (page, key, err) in [(&mut pa, &a, 10_000i64), (&mut pb, &b, -15_000)] { + let pos = w.facts().timeline.position_at(x) as i64 + err; + let st = Presentation::sign(key, room, src, x, pos.max(0) as u64, state::PLAYING, 1_000_000).encode(); + let rec = page.event(room, x + 20_000, st); + assert_eq!(w.post(&rec, x + 20_000, t0), Ok(())); + } + x += 500_000; + } + // The clock states the windows that have ended: in sync, both. + let st = w.due_statements(11 * s); + assert_eq!(st.len(), 2, "the windows to 5 s and to 10 s"); + let last = &st[1]; + assert!(last.viewers.iter().all(|v| v.verdict == cw::verdict::IN_SYNC), "{last:?}"); + for sk in &st { + let rec = chain.sign(&keys, room, 11 * s, [0; 32], &Lifecycle::Meta(skew_payload(sk))); + w.clock_record(&rec, [0; 32], &Lifecycle::Meta(skew_payload(sk))); + } + // The room the log carries verifies as co-watch §11 verifies it. + let w = e.watch.as_ref().unwrap(); + let room_json = w.room_json(&e.descriptor, &e.grants); + let chains: Vec>> = room_json["chains"].as_array().unwrap().iter().map(|c| c.as_array().unwrap().iter().map(|h| hex::decode(h.as_str().unwrap()).unwrap()).collect()).collect(); + let run = cw::verify(&cw::Input { descriptor: &e.descriptor, grants: &e.grants, head: None, chains: &chains, policies: std::slice::from_ref(&w.policy_bytes), sources: &[Some(vec![w.source.object])] }); + assert_eq!(run.outcome, cw::Outcome::Accept); + assert_eq!(run.skews.len(), 2); + assert!(run.skews.iter().all(|s| s.recomputed.is_some())); + // A viewer silent for longer than SILENT_US has left. + let mut w = e.watch.take().unwrap(); + let ended = w.ended(t0 + 20 * s); + assert_eq!(ended.len(), 2); + assert!(ended.iter().all(|(_, why, _)| *why == leave::CONNECTION_LOST)); + assert!(w.ended(t0 + 21 * s).is_empty(), "a leave is asked once"); + } +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js new file mode 100644 index 000000000..3933d2ad7 --- /dev/null +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js @@ -0,0 +1,513 @@ +// Watching together in a room (WAI extensions/co-watch.md), in a page. +// +// A watch room's service serves the source and carries its viewers' events in a log +// (co-watch §10). This module is the page's part, in two halves: +// +// - the rules, with nothing of the page: the policy read (§3.1), controls and presentation +// statements written byte for byte (§5.1, §7.1), statements read (§4.2), the controlled +// position (§5.4, §6), the checks a control meets before a player applies it (§5.2, §5.3), +// the catch-up rule (§9), and the clock estimate (§7.3). Its tests (cowatch.test.mjs) run +// them against the corpus wai/live-conformance/cowatch/; +// - CoWatch, the player: it enters the room by proving its grant's key over the service's +// challenge (live-rooms §10.5.3), follows the log, applies each control at its instant on +// its estimate of the room clock, keeps a media element at the controlled position by the +// catch-up rule, signs a presentation statement twice a slot under the page's key, and shows +// the room's sync: its own error, and each viewer's verdict from the clock's last skew +// statement. +// +// Everything here is the platform's: WebCrypto's SHA-256 and Ed25519, an HTMLMediaElement. + +const subtle = globalThis.crypto.subtle; +const enc = new TextEncoder(); + +export const NORMAL = 1000000; +export const ACTION = { play: 1, pause: 2, seek: 3, rate: 4 }; +export const ACTION_NAME = { 1: "play", 2: "pause", 3: "seek", 4: "rate" }; +export const STATE = { playing: 1, paused: 2, stalled: 3, ended: 4 }; +export const VERDICT = { 1: "in_sync", 2: "out_of_sync", 3: "unknown" }; +const MAGIC = { policy: "WXP1", control: "WXC1", presentation: "WXS1", skew: "WXK1" }; +const PRESENTATION_DOMAIN = enc.encode("wai:co-watch-presentation\x01"); +const PROOF_DOMAIN = enc.encode("wai:live-room-proof\x01"); +const META = 0x01; + +export const hex = (b) => Array.from(b, (x) => x.toString(16).padStart(2, "0")).join(""); +export const unhex = (h) => new Uint8Array((h.match(/../g) || []).map((x) => parseInt(x, 16))); + +export function concat(...parts) { + const n = parts.reduce((a, p) => a + p.length, 0); + const out = new Uint8Array(n); + let o = 0; + for (const p of parts) { out.set(p, o); o += p.length; } + return out; +} + +export async function sha256(...parts) { + return new Uint8Array(await subtle.digest("SHA-256", concat(...parts))); +} + +const le = (n, bytes) => { + const out = new Uint8Array(bytes); + let v = BigInt(n); + for (let i = 0; i < bytes; i++) { out[i] = Number(v & 0xffn); v >>= 8n; } + return out; +}; + +class Rd { + constructor(b, p = 0) { this.b = b; this.p = p; } + take(n) { if (this.p + n > this.b.length) throw new Error("short"); const s = this.b.subarray(this.p, this.p + n); this.p += n; return s; } + u8() { return this.take(1)[0]; } + uint(n) { const s = this.take(n); let v = 0n; for (let i = n - 1; i >= 0; i--) v = (v << 8n) | BigInt(s[i]); return v; } + u16() { return Number(this.uint(2)); } + u32() { return Number(this.uint(4)); } + u64() { return Number(this.uint(8)); } // every instant, position and rate here is below 2^53 + done() { return this.p === this.b.length; } +} + +// ---------------------------------------------------------------- §3 the policy + +/** A co-watch policy's fields (§3.1); its signature is the room's to check. */ +export function readPolicy(b) { + if (new TextDecoder().decode(b.subarray(0, 4)) !== MAGIC.policy || b[4] !== 1) throw new Error("not a WXP1 policy"); + const r = new Rd(b, 5); + const p = { room: hex(r.take(32)), prev: hex(r.take(32)), effective: r.u64(), source_type: r.u8(), source: hex(r.take(32)), duration_us: r.u64() }; + for (const k of ["lead_ms", "horizon_ms", "min_rate", "max_rate", "period_ms", "window_ms", "settle_ms", "bound_us"]) p[k] = r.u32(); + p.quantile = r.u8(); + for (const k of ["tolerance_us", "nudge", "seek_us"]) p[k] = r.u32(); + r.take(64); + if (!r.done()) throw new Error("bytes after the policy"); + return p; +} + +/** The policy in effect at `t` (§3.4): the last whose `effective` is at or below it. */ +export function policyAt(policies, t) { + let k = null; + policies.forEach((p, i) => { if (p.effective <= t) k = i; }); + return k; +} + +/** An object sequence's digest (§3.5). */ +export async function sourceDigest(objects) { + return sha256(enc.encode("wai:co-watch-source\x01"), le(objects.length, 4), ...objects.flatMap((o) => [unhex(o.content_hash), le(o.duration_ms, 4)])); +} + +// ---------------------------------------------------------------- §5, §7 statements + +/** A control (§5.1), 22 bytes. */ +export function controlPayload(c) { + return concat(enc.encode(MAGIC.control), Uint8Array.of(1, c.action), le(c.at, 8), le(c.arg, 8)); +} + +/** A presentation statement's record from `magic` through `rate` (§7.1). */ +export function presentationBody(p) { + return concat(enc.encode(MAGIC.presentation), Uint8Array.of(1), unhex(p.room), unhex(p.player), unhex(p.source), le(p.at, 8), le(p.position, 8), Uint8Array.of(p.state), le(p.rate, 4)); +} + +/** The statement, signed with Ed25519 under the player's key (§7.1): 186 bytes. */ +export async function signPresentation(p, privateKey) { + const body = presentationBody(p); + const sig = new Uint8Array(await subtle.sign({ name: "Ed25519" }, privateKey, concat(PRESENTATION_DOMAIN, body))); + return concat(body, sig); +} + +/** WebCrypto's key for a 32-byte Ed25519 seed (RFC 8410's PKCS #8 form), and its public key. */ +export async function keyFromSeed(seed) { + const pkcs8 = concat(Uint8Array.of(0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x04, 0x22, 0x04, 0x20), seed); + const privateKey = await subtle.importKey("pkcs8", pkcs8, { name: "Ed25519" }, true, ["sign"]); + const jwk = await subtle.exportKey("jwk", privateKey); + const publicKey = Uint8Array.from(atob(jwk.x.replace(/-/g, "+").replace(/_/g, "/")), (c) => c.charCodeAt(0)); + return { privateKey, publicKey }; +} + +/** A statement of this extension (§4.1, §4.2) read, or null for another `meta` payload; a + * statement that does not read is `{ kind: "malformed" }`. */ +export function readStatement(payload) { + const magic = new TextDecoder().decode(payload.subarray(0, 4)); + if (![MAGIC.control, MAGIC.presentation, MAGIC.skew].includes(magic)) return null; + try { + if (payload[4] !== 1) throw new Error("version"); + const r = new Rd(payload, 5); + let s; + if (magic === MAGIC.control) { + s = { kind: "control", action: r.u8(), at: r.u64(), arg: r.u64() }; + const ok = s.action === 1 || s.action === 2 ? s.arg === 0 : s.action === 3 ? true : s.action === 4 ? s.arg >= 1 && s.arg <= 0xffffffff : false; + if (!ok) throw new Error("arg"); + } else if (magic === MAGIC.presentation) { + s = { kind: "presentation", room: hex(r.take(32)), player: hex(r.take(32)), source: hex(r.take(32)), at: r.u64(), position: r.u64(), state: r.u8(), rate: r.u32() }; + s.sig = r.take(64); + if (!(s.state in { 1: 1, 2: 1, 3: 1, 4: 1 }) || s.rate === 0) throw new Error("state"); + } else { + s = { kind: "skew", from: r.u64(), to: r.u64(), bound_us: r.u32(), quantile: r.u8(), viewers: [], pairs: [] }; + const nv = r.u8(); + for (let i = 0; i < nv; i++) { + s.viewers.push({ principal: hex(r.take(32)), held: r.u64(), due: r.u16(), samples: r.u16(), counted: r.u16(), p50: r.u32(), pq: r.u32(), max: r.u32(), verdict: VERDICT[r.u8()] }); + } + const np = r.u8(); + for (let i = 0; i < np; i++) s.pairs.push({ a: r.u8(), b: r.u8(), n: r.u16(), p50: r.u32(), pq: r.u32(), max: r.u32(), verdict: VERDICT[r.u8()] }); + } + if (!r.done()) throw new Error("bytes after"); + return s; + } catch { + return { kind: "malformed" }; + } +} + +/** A WEV1 record's fields (live-events §3.1), read as far as this module needs them. */ +export function readEvent(b) { + const r = new Rd(b, 5); + const ev = { room: hex(r.take(32)), principal: hex(r.take(32)), seq: r.u64(), prev: hex(r.take(32)), t: r.u64() }; + if (r.u8() === 1) r.take(48); + ev.kind = r.u8(); + ev.payload = r.take(r.u16()); + ev.body = b.subarray(0, r.p); + ev.sig = r.take(64); + return ev; +} + +// ---------------------------------------------------------------- §5.4, §6 the controlled position + +function positionOf(st, x, duration) { + if (!st.playing) return st.pos; + const p = st.pos + Number((BigInt(Math.max(0, x - st.anchor)) * BigInt(st.rate)) / 1000000n); + return Math.min(duration, p); +} + +/** The controlled position over the room clock (§6), from the policies and the accepted + * controls, each `{ at, t, digest (hex), action, arg }`. */ +export class Timeline { + constructor(policies, controls) { + this.policies = policies; + this.starts = []; + policies.forEach((p, i) => { + if (i === 0 || p.source_type !== policies[i - 1].source_type || p.source !== policies[i - 1].source) this.starts.push(p.effective); + }); + const key = (c) => [c.at, c.t, c.digest]; + this.controls = [...controls].sort((a, b) => { + const [x, y] = [key(a), key(b)]; + for (let i = 0; i < 3; i++) if (x[i] !== y[i]) return x[i] < y[i] ? -1 : 1; + return 0; + }); + const aspect = { 1: 0, 2: 0, 3: 1, 4: 2 }; + this.overridden = new Set(); + this.controls.forEach((c, i) => { + for (const d of this.controls.slice(i + 1)) { + if (d.at !== c.at) break; + if (aspect[d.action] === aspect[c.action]) { this.overridden.add(c.digest); break; } + } + }); + const events = [...this.starts.map((s) => ({ x: s, start: true })), ...this.controls.map((c) => ({ x: c.at, c }))]; + events.sort((a, b) => a.x - b.x || (a.start ? 0 : 1) - (b.start ? 0 : 1)); + this.points = []; + let st = null; + for (const e of events) { + if (e.start) st = { playing: false, rate: NORMAL, anchor: e.x, pos: 0 }; + else if (st) { + st = { ...st, pos: positionOf(st, e.x, this.durationAt(e.x)), anchor: e.x }; + if (e.c.action === 1) st.playing = true; + else if (e.c.action === 2) st.playing = false; + else if (e.c.action === 3) st.pos = e.c.arg; + else st.rate = e.c.arg; + } + if (st) this.points.push([e.x, st]); + } + } + + durationAt(x) { + const k = policyAt(this.policies, x); + return k == null ? 0 : this.policies[k].duration_us; + } + + stateAt(x) { + let st = null; + for (const [at, s] of this.points) if (at <= x) st = s; + return st; + } + + positionAt(x) { + const st = this.stateAt(x); + return st ? positionOf(st, x, this.durationAt(x)) : 0; + } +} + +/** Why a control is not applied (§5.2, §5.3), or null: `mayControl(action)` says whether its + * author may send it, under the policy in effect at its `t`. */ +export function controlRefusal(policies, t, c, mayControl) { + const k = policyAt(policies, t); + if (k == null) return "cw_no_policy"; + const p = policies[k]; + if (!mayControl(c.action)) return "control_not_permitted"; + if (c.at < t + p.lead_ms * 1000) return "control_not_ahead"; + if (c.at > t + p.horizon_ms * 1000) return "control_beyond_horizon"; + const q = policies[policyAt(policies, c.at)]; + if ((c.action === 3 && c.arg > q.duration_us) || (c.action === 4 && (c.arg < q.min_rate || c.arg > q.max_rate))) return "control_out_of_range"; + return null; +} + +// ---------------------------------------------------------------- §9 catch-up + +/** The correction the catch-up rule gives (§9). */ +export function catchUp(p, playing, rate, controlled, duration, presented) { + const e = presented - controlled; + const mag = Math.abs(e); + if (!playing || controlled >= duration) return mag > p.tolerance_us ? { action: "seek", value: controlled } : { action: "hold" }; + if (mag <= p.tolerance_us) return { action: "rate", value: rate }; + if (mag > p.seek_us) return { action: "seek", value: controlled }; + const r = e > 0 ? rate - p.nudge : rate + p.nudge; + return { action: "rate", value: Math.max(p.min_rate, Math.min(p.max_rate, r)) }; +} + +// ---------------------------------------------------------------- §7.3 the clock + +/** The offset of the service's clock from this page's, in µs, from round trips each + * `{ sent, got, server }` (this page's ms at sending and receiving, the server's µs): the + * answer of least round trip, at its midpoint (§7.3). */ +export function clockOffset(samples) { + const best = samples.reduce((a, s) => (!a || s.got - s.sent < a.got - a.sent ? s : a), null); + return Math.round(best.server - ((best.sent + best.got) / 2) * 1000); +} + +// ---------------------------------------------------------------- the player + +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); + +// A slot is stated twice (co-watch §7.3), so timer jitter leaves none empty. +const STATES_PER_SLOT = 2; +// Statements one post carries at most: a front may hold a request's body to a few KiB. +const POST_EVENTS = 4; + +export class CoWatch { + // o: { api (path, body) -> {status, body}, wai, room, t0, seed (Uint8Array), principal (hex), + // grant (hex), grantDigest (hex), media (HTMLMediaElement), policies (hex), objects, + // sourceUrl, mayControl (principal, action) -> bool, target (the join's proof target, + // "//authority/path"), log, onChange } + constructor(o) { + Object.assign(this, o); + this.policyList = o.policies.map((h) => readPolicy(unhex(h))); + this.policy = this.policyList[0]; + this.offset = 0; + this.at = 0; // the next entry of the log + this.controls = []; + this.timeline = new Timeline(this.policyList, []); + this.seq = 0; + this.prev = "00".repeat(32); + this.lastT = 0; + this.joinT = null; + this.outbox = []; + this.stopped = null; + this.skews = []; + this.others = {}; // principal -> its last statement: at, position, error + this.stats = { log: 0, controls: 0, applied: 0, refused: {}, statements: 0, posted: 0, post_refused: {}, seeks: 0, nudges: 0, verified_source: false, errors: [] }; + this.onChange = o.onChange || (() => {}); + } + + /** The room clock now, on this page's estimate (§7.3). */ + now() { + return Math.max(0, Math.round(Date.now() * 1000 + this.offset - this.t0)); + } + + async estimateClock() { + const samples = []; + for (let i = 0; i < 5; i++) { + const sent = Date.now(); + const r = await this.api("/watch/time"); + const got = Date.now(); + if (r.status === 200) samples.push({ sent, got, server: r.body.now_us }); + } + if (samples.length) this.offset = clockOffset(samples); + this.stats.offset_us = this.offset; + } + + /** The source, fetched whole and checked by its content hash (§3.5), as the media's own. */ + async loadSource() { + const r = await fetch(this.sourceUrl, { cache: "no-store" }); + const bytes = new Uint8Array(await r.arrayBuffer()); + const h = hex(await sha256(bytes)); + const obj = this.objects[0]; + if (h !== obj.content_hash) throw new Error(`the source's bytes are not the object the policy names: ${h.slice(0, 16)}…`); + if (hex(await sourceDigest(this.objects)) !== this.policy.source) throw new Error("the source's objects are not the policy's source"); + this.stats.verified_source = true; + this.media.src = URL.createObjectURL(new Blob([bytes], { type: r.headers.get("content-type") || "application/octet-stream" })); + this.media.preload = "auto"; + await new Promise((ok, bad) => { + if (this.media.readyState >= 1) return ok(); + this.media.addEventListener("loadedmetadata", ok, { once: true }); + this.media.addEventListener("error", () => bad(new Error("the source does not play here")), { once: true }); + }); + } + + /** Enter: a proof of the grant's key over the service's challenge, for the request's own + * method and target (live-rooms §10.5.1, §10.5.3); the clock then signs this page's `join`. */ + async join() { + const c = await this.api("/watch/challenge"); + if (c.status !== 200) throw new Error(`no challenge: ${c.status}`); + const grant = unhex(this.grant); + const digest = await sha256(grant.subarray(0, grant.length - 64)); + const context = enc.encode(`POST ${this.target}`); + const key = await keyFromSeed(this.seed); + const body = concat(enc.encode("WRP1"), Uint8Array.of(1), digest, unhex(this.principal), unhex(c.body.challenge), le(context.length, 2), context); + const sig = new Uint8Array(await subtle.sign({ name: "Ed25519" }, key.privateKey, concat(PROOF_DOMAIN, body))); + const r = await this.api("/watch/join", { room: this.room, grant: this.grant, proof: hex(concat(body, sig)) }); + if (r.status !== 200) throw new Error(`the room refused the join: ${r.status} ${r.body && r.body.error}`); + this.joinT = r.body.t; + this.key = key; + this.log(`co-watch: joined at room clock ${r.body.t}`); + } + + /** A `meta` event of this page's chain, signed (live-events §3), at `t`. */ + event(t, payload) { + t = Math.max(t, this.lastT, this.joinT || 0); + const rec = this.wai.eventSign(this.seed, unhex(this.room), BigInt(this.seq), unhex(this.prev), BigInt(t), META, payload); + const v = JSON.parse(this.wai.eventRead(rec)); + this.seq++; + this.prev = v.digest; + this.lastT = t; + return rec; + } + + /** Ask the room to `action` (ACTION) with `arg`, at the policy's lead from now (§5.3). */ + control(action, arg = 0) { + const t = this.now(); + const at = t + this.policy.lead_ms * 1000 + 50000; + this.outbox.push(this.event(t, controlPayload({ action, at, arg }))); + this.flush(); + return at; + } + + async flush() { + if (this.posting || !this.outbox.length) return; + this.posting = true; + try { + while (this.outbox.length) { + const batch = this.outbox.slice(0, POST_EVENTS); + const r = await this.api("/watch/post", { room: this.room, events: batch.map(hex) }); + if (r.status === 200) { + this.outbox.splice(0, batch.length); + this.stats.posted += batch.length; + this.rejoined = false; + } else if (r.status === 409 && r.body && r.body.error === "not_present" && !this.rejoined) { + // The room took this page for gone (it was silent too long): it enters again, and + // its chain goes on where it was. + this.outbox.splice(0, r.body.carried || 0); + this.rejoined = true; + await this.join(); + } else if (r.status === 409) { + // Those before it were carried; this one never will be, and the chain cannot go + // on past it: the page stops stating rather than leave a gap it cannot fill. + const why = r.body.error; + this.stats.post_refused[why] = (this.stats.post_refused[why] || 0) + 1; + this.outbox.splice(0, (r.body.carried || 0) + 1); + this.stop(`the room refused an event: ${why}`); + break; + } else { + await sleep(500); + } + } + } finally { + this.posting = false; + } + } + + stop(why) { + this.stopped = why; + this.stats.errors.push(why); + this.log(`co-watch: ${why}`); + } + + /** Follow the room's log, each record checked before anything of it is applied. */ + async follow(alive) { + while (alive() && !this.stopped) { + let r; + try { r = await this.api(`/watch?room=${this.room}&from=${this.at}`); } catch { await sleep(1000); continue; } + if (r.status === 410) { this.stop("the room was replaced"); break; } + if (r.status !== 200 || !r.body) { await sleep(1000); continue; } + let changed = false; + for (const e of r.body.entries) { + if (e.seq !== this.at) { this.stop(`the log skipped from ${this.at} to ${e.seq}`); return; } + changed = (await this.onRecord(unhex(e.event))) || changed; + this.at++; + this.stats.log++; + } + if (changed) this.timeline = new Timeline(this.policyList, this.controls); + this.onChange(); + } + } + + refuse(why) { + this.stats.refused[why] = (this.stats.refused[why] || 0) + 1; + } + + async onRecord(bytes) { + const v = JSON.parse(this.wai.eventRead(bytes)); + if (!v.ok) { this.refuse(v.reason); return false; } + if (v.room !== this.room) { this.refuse("wrong_room"); return false; } + if (v.kind !== META) return false; + const s = readStatement(readEvent(bytes).payload); + if (!s) return false; + if (s.kind === "malformed") { this.refuse("cw_statement_malformed"); return false; } + if (s.kind === "control") { + this.stats.controls++; + const why = controlRefusal(this.policyList, v.t, s, (a) => this.mayControl(v.principal, a)); + if (why) { this.refuse(why); return false; } + this.controls.push({ at: s.at, t: v.t, digest: v.digest, action: s.action, arg: s.arg, author: v.principal }); + return true; + } + if (s.kind === "skew") { + this.skews.push(s); + if (this.skews.length > 64) this.skews.shift(); + return false; + } + if (s.player !== v.principal) { this.refuse("presentation_wrong_key"); return false; } + this.others[v.principal] = { at: s.at, position: s.position, error: s.position - this.timeline.positionAt(s.at), state: s.state }; + return false; + } + + /** Keep the media at the controlled position (§9) and state what it presents (§7.3). */ + async run(alive) { + const per = (this.policy.period_ms * 1000) / STATES_PER_SLOT; + let next = 0; + while (alive() && !this.stopped) { + const x = this.now(); + const st = this.timeline.stateAt(x); + const duration = this.timeline.durationAt(x); + const controlled = this.timeline.positionAt(x); + const presented = Math.round(this.media.currentTime * 1e6); + if (st) { + if (st.playing && controlled < duration && this.media.paused) this.media.play().catch(() => {}); + if ((!st.playing || controlled >= duration) && !this.media.paused) this.media.pause(); + const c = catchUp(this.policy, st.playing, st.rate, controlled, duration, presented); + if (c.action === "seek") { this.media.currentTime = c.value / 1e6; this.stats.seeks++; } + else if (c.action === "rate") { + if (c.value !== st.rate) this.stats.nudges++; + if (Math.abs(this.media.playbackRate - c.value / 1e6) > 1e-6) this.media.playbackRate = c.value / 1e6; + } + this.error = presented - controlled; + this.controlled = controlled; + } + if (x >= next && this.key) { + next = x + per; + const ended = this.media.ended || (st && controlled >= duration); + const state = this.media.readyState < 3 && !this.media.paused ? STATE.stalled : ended ? STATE.ended : this.media.paused ? STATE.paused : STATE.playing; + const pos = Math.round(this.media.currentTime * 1e6); + const body = { room: this.room, player: this.principal, source: this.policy.source, at: x, position: pos, state, rate: Math.max(1, Math.round(this.media.playbackRate * 1e6)) }; + this.outbox.push(this.event(x, await signPresentation(body, this.key.privateKey))); + this.stats.statements++; + this.flush(); + } + this.onChange(); + await sleep(50); + } + } + + /** What a test reads, and what the page shows. */ + snapshot() { + const last = this.skews.length ? this.skews[this.skews.length - 1] : null; + const lastWindow = last ? this.skews.filter((s) => s.from === last.from) : []; + return { + joined: this.joinT, at: this.at, offset_us: this.offset, controls: this.controls.length, + overridden: this.controls.filter((c) => this.timeline.overridden.has(c.digest)).length, + controlled: this.controlled ?? null, error_us: this.error ?? null, + playing: !this.media.paused, rate: this.media.playbackRate, current_time: this.media.currentTime, + skews: this.skews.length, last_window: lastWindow.length ? { from: lastWindow[0].from, to: lastWindow[0].to, bound_us: lastWindow[0].bound_us, viewers: lastWindow.flatMap((s) => s.viewers), pairs: lastWindow.flatMap((s) => s.pairs) } : null, + others: this.others, stopped: this.stopped, ...this.stats, + }; + } +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.test.mjs b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.test.mjs new file mode 100644 index 000000000..90041a018 --- /dev/null +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.test.mjs @@ -0,0 +1,119 @@ +// The browser client's co-watch module (cowatch.js), against the corpus +// wai/live-conformance/cowatch/ (`node --test web/room/cowatch.test.mjs`): every catch-up case +// its correction (co-watch §9); each accepted room's controlled position recomputed from its +// policies and controls (§5.4, §6), as the corpus states it at every change and at every +// statement; its controls written byte for byte (§5.1); and its presentation statements +// written and signed byte for byte (§7.1), each at the rate the catch-up rule gives (§9). +import test from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import * as cw from "./cowatch.js"; + +const doc = JSON.parse(readFileSync(new URL("../../../../../../wai/live-conformance/cowatch/vectors.json", import.meta.url), "utf8")); +const vector = (name) => doc.vectors.find((v) => v.name === name); +const ACCEPTED = ["watch_party", "next_episode", "drift"]; + +/** The corpus's key `i`: SHA-256 of its label, a zero byte and `i` (its README). */ +const key = async (i) => cw.keyFromSeed(await cw.sha256(new TextEncoder().encode("wai:co-watch/corpus/key\x00"), Uint8Array.of(i))); +const INDEX = { authority: 0, clock: 1, host: 2, guest: 3, late: 4, fourth: 5 }; + +/** Every record of a vector, by its digest. */ +async function records(v) { + const out = new Map(); + for (const chain of v.chains) { + for (const h of chain) { + const b = cw.unhex(h); + const ev = cw.readEvent(b); + out.set(cw.hex(await cw.sha256(ev.body)), ev); + } + } + return out; +} + +const timelineOf = (v) => + new cw.Timeline(v.policies.map((h) => cw.readPolicy(cw.unhex(h))), v.controls.map((c) => ({ at: c.at, t: c.t, digest: c.digest, action: cw.ACTION[c.action], arg: c.arg }))); + +test("every catch-up case gets the corpus's correction", () => { + const { params, cases } = doc.catch_up; + assert.ok(cases.length > 0); + for (const c of cases) assert.deepEqual(cw.catchUp(params, c.playing, c.rate, c.controlled, c.duration, c.presented), c.correction, c.about); +}); + +test("the controlled position of each accepted room is the corpus's", () => { + for (const name of ACCEPTED) { + const v = vector(name); + const tl = timelineOf(v); + assert.deepEqual(tl.points.map(([x, s]) => ({ at: x, playing: s.playing, rate: s.rate, position: s.pos })), v.timeline, name); + for (const c of v.controls) assert.equal(!tl.overridden.has(c.digest), c.applied, `${name}: ${c.digest.slice(0, 8)}`); + for (const p of v.presentations) assert.equal(tl.positionAt(p.at), p.controlled, `${name}: the statement at ${p.at}`); + } +}); + +test("each accepted room's controls are written byte for byte", async () => { + for (const name of ACCEPTED) { + const v = vector(name); + const recs = await records(v); + for (const c of v.controls) { + const ev = recs.get(c.digest); + assert.ok(ev, `${name}: a control's record`); + assert.deepEqual(cw.controlPayload({ action: cw.ACTION[c.action], at: c.at, arg: c.arg }), ev.payload, `${name}: ${c.action} at ${c.at}`); + assert.deepEqual(cw.readStatement(ev.payload), { kind: "control", action: cw.ACTION[c.action], at: c.at, arg: c.arg }); + } + } +}); + +test("each accepted room's presentation statements are written and signed byte for byte, at the catch-up rule's rate", async () => { + const keys = {}; + for (const [n, i] of Object.entries(INDEX)) keys[doc.principals[n]] = await key(i); + for (const name of ACCEPTED) { + const v = vector(name); + const recs = await records(v); + const policies = v.policies.map((h) => cw.readPolicy(cw.unhex(h))); + const tl = timelineOf(v); + for (const p of v.presentations) { + const ev = recs.get(p.digest); + const pol = policies[cw.policyAt(policies, p.at)]; + const st = tl.stateAt(p.at); + const duration = tl.durationAt(p.at); + // The player states its own rate: the controlled one, or the catch-up rule's (§9). + let rate = st.rate; + if (st.playing && p.controlled < duration) { + const c = cw.catchUp(pol, true, st.rate, p.controlled, duration, p.position); + if (c.action === "rate") rate = c.value; + } + const state = !st.playing ? cw.STATE.paused : p.controlled >= duration ? cw.STATE.ended : cw.STATE.playing; + assert.equal(state, cw.STATE[p.state], `${name}: the state at ${p.at}`); + const k = keys[p.player]; + assert.equal(cw.hex(k.publicKey), p.player); + const mine = await cw.signPresentation({ room: v.room, player: p.player, source: pol.source, at: p.at, position: p.position, state, rate }, k.privateKey); + assert.deepEqual(mine, ev.payload, `${name}: the statement of ${p.player.slice(0, 8)} at ${p.at}`); + } + } +}); + +test("skew statements read back with their verdicts", async () => { + const v = vector("drift"); + const recs = await records(v); + for (const s of v.skews) { + const st = cw.readStatement(recs.get(s.digest).payload); + assert.equal(st.kind, "skew"); + assert.deepEqual(st.viewers.map((x) => [x.principal, x.verdict, x.pq]), s.viewers.map((x) => [x.principal, x.verdict, x.pq])); + } +}); + +test("a control the room would refuse is not applied", () => { + const v = vector("watch_party"); + const policies = v.policies.map((h) => cw.readPolicy(cw.unhex(h))); + const yes = () => true; + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 2, at: 4_000_000, arg: 0 }, yes), "control_not_ahead"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 2, at: 5_100_000, arg: 0 }, yes), "control_not_ahead"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 2, at: 16_000_000, arg: 0 }, yes), "control_beyond_horizon"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 3, at: 6_000_000, arg: policies[0].duration_us + 1 }, yes), "control_out_of_range"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 4, at: 6_000_000, arg: 3_000_000 }, yes), "control_out_of_range"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 2, at: 6_000_000, arg: 0 }, () => false), "control_not_permitted"); + assert.equal(cw.controlRefusal(policies, 5_000_000, { action: 2, at: 6_000_000, arg: 0 }, yes), null); +}); + +test("the clock's offset is taken from the least round trip", () => { + assert.equal(cw.clockOffset([{ sent: 1000, got: 1100, server: 5_000_000 }, { sent: 2000, got: 2010, server: 7_000_000 }]), 7_000_000 - 2_005_000); +}); -- 2.54.0 (Apple Git-157) From 567a58d40478f1c766fce96d3627cdb2ef1926f6 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:31:07 -0400 Subject: [PATCH 05/16] joule-moq-web: the room page's co-watch mode and its end-to-end scenario; joule-moq-room: a watch room over HTTP and the relay The page fetches a watch room's source and checks it by its content hash, enters the room's co-watch log by a proof of its key, applies each control at its instant, keeps the source at the controlled position by the catch-up rule, states what it presents and shows the room's sync. e2e scenario cowatch: three viewers, a play, a pause, a seek, a late joiner, the clock's skew statements in sync within the bound, and the room verified by co_watch_verify.py. The room service's test drives a watch room against a relay on loopback. Co-Authored-By: Claude Opus 5.5 --- .../crates/joule-moq-room/src/watch.rs | 6 +- .../joule-moq-room/tests/room_service.rs | 179 ++++++++++++++++++ .../crates/joule-moq-web/e2e/lib.mjs | 24 ++- .../crates/joule-moq-web/e2e/room.e2e.mjs | 130 ++++++++++++- .../crates/joule-moq-web/e2e/run.sh | 4 +- .../crates/joule-moq-web/web/room/app.js | 85 ++++++++- .../crates/joule-moq-web/web/room/index.html | 15 ++ 7 files changed, 430 insertions(+), 13 deletions(-) diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs b/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs index 8a618e032..cb0db0f15 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/src/watch.rs @@ -47,7 +47,7 @@ pub const TOLERANCE_US: u32 = 40_000; pub const NUDGE: u32 = 50_000; pub const SEEK_US: u32 = 1_000_000; /// A window's statements are made this long after its end, for its last statements to arrive. -pub const STATE_AFTER_US: u64 = 1_000_000; +pub const STATE_AFTER_US: u64 = 2_000_000; /// A viewer that has posted nothing for this long has left (`leave` reason 4). pub const SILENT_US: u64 = 4_000_000; /// An event whose `t` is this far past the service's clock is refused. @@ -596,12 +596,12 @@ mod tests { x += 500_000; } // The clock states the windows that have ended: in sync, both. - let st = w.due_statements(11 * s); + let st = w.due_statements(12 * s); assert_eq!(st.len(), 2, "the windows to 5 s and to 10 s"); let last = &st[1]; assert!(last.viewers.iter().all(|v| v.verdict == cw::verdict::IN_SYNC), "{last:?}"); for sk in &st { - let rec = chain.sign(&keys, room, 11 * s, [0; 32], &Lifecycle::Meta(skew_payload(sk))); + let rec = chain.sign(&keys, room, 12 * s, [0; 32], &Lifecycle::Meta(skew_payload(sk))); w.clock_record(&rec, [0; 32], &Lifecycle::Meta(skew_payload(sk))); } // The room the log carries verifies as co-watch §11 verifies it. diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/tests/room_service.rs b/joule-code/joule-code-rs/crates/joule-moq-room/tests/room_service.rs index 661ec1fd5..69f0abc42 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/tests/room_service.rs +++ b/joule-code/joule-code-rs/crates/joule-moq-room/tests/room_service.rs @@ -422,3 +422,182 @@ async fn run_e2ee() { } server.shutdown().await; } + +/// A raw GET: the status and the body's bytes. +async fn get_bytes(addr: std::net::SocketAddr, path: &str) -> (u16, Vec) { + let mut s = tokio::net::TcpStream::connect(addr).await.unwrap(); + s.write_all(format!("GET {path} HTTP/1.1\r\nHost: room.test\r\nConnection: close\r\n\r\n").as_bytes()).await.unwrap(); + let mut out = Vec::new(); + timeout(STEP, s.read_to_end(&mut out)).await.expect("an answer in time").unwrap(); + let at = out.windows(4).position(|w| w == b"\r\n\r\n").expect("a response") + 4; + let head = String::from_utf8_lossy(&out[..at]).to_string(); + (head.split(' ').nth(1).unwrap().parse().unwrap(), out[at..].to_vec()) +} + +/// A watch room (WAI co-watch) against a relay on loopback: its source served and named by its +/// policy; viewers admitted by a proof of their key for the request they make, a proof over +/// another target or presented again refused; their controls and presentation statements carried +/// when co-watch §5 and §7.2 accept them, and one that does not refused; the clock's skew +/// statements of each window, and a viewer's leave once it falls silent; and the room the log +/// carries verifies as co-watch §11 verifies it. +#[tokio::test(flavor = "multi_thread", worker_threads = 4)] +async fn a_watch_room_carries_its_viewers_and_states_their_skew() { + timeout(Duration::from_secs(120), run_watch()).await.expect("the test finishes in time"); +} + +async fn run_watch() { + use wai::co_watch::{self as cw, action, state, Control, Presentation}; + let keys = Keys::generate(); + let server = relay(&keys).await; + let dir = std::env::temp_dir().join(format!("joule-moq-room-watch-{}", std::process::id())); + std::fs::create_dir_all(&dir).unwrap(); + let file = dir.join("source.wav"); + let bytes: Vec = (0..4096u32).map(|i| (i % 251) as u8).collect(); + std::fs::write(&file, &bytes).unwrap(); + let cfg = Config::from_toml(&format!( + "listen = \"127.0.0.1:0\"\nkeys = \"/nonexistent\"\nrelay_url = \"ws://{}{}\"\npublic_prefix = \"/room-api\"\n[room]\nwatch_source = \"{}\"\nwatch_duration_ms = 60000\nwatch_window_ms = 2000\n", + server.websocket_addr.unwrap(), + server.relay().config().path, + file.display() + )) + .unwrap(); + let svc = Service::new(Keys::from_toml(&keys.to_toml()).unwrap(), &cfg); + let listener = tokio::net::TcpListener::bind(cfg.listen).await.unwrap(); + let addr = listener.local_addr().unwrap(); + tokio::spawn(svc.clone().run_clock()); + tokio::spawn(svc.clone().run_watch()); + tokio::spawn(http::serve(svc.clone(), listener)); + timeout(STEP, async { + while !svc.connected.load(Ordering::Acquire) { + tokio::time::sleep(Duration::from_millis(50)).await; + } + }) + .await + .expect("the clock's session opens"); + + // The room names its source by the policy; the service serves those bytes. + let (_, r) = call(addr, "GET", "/room", None, "10.0.1.9").await; + let policy_bytes = hex::decode(r["watch"]["policy"].as_str().expect("a watch room")).unwrap(); + let policy = cw::WatchPolicy::parse(&policy_bytes).unwrap(); + let (st, served) = get_bytes(addr, "/watch/source").await; + assert_eq!((st, served.len()), (200, bytes.len())); + let object = cw::SourceObject { content_hash: Sha256::digest(&served).into(), duration_ms: 60_000 }; + assert_eq!(policy.source, cw::source_digest(&[object]), "the served bytes are the policy's source"); + + // Two viewers are granted, each with every action (watch_control 15). + let (a, b) = (key(0x51), key(0x52)); + let mut grants = Vec::new(); + for (k, ip) in [(&a, "10.0.1.1"), (&b, "10.0.1.2")] { + let (st, g) = ask(addr, k, "viewer", ip).await; + assert_eq!(st, 200, "{g}"); + grants.push(hex::decode(g["grant"].as_str().unwrap()).unwrap()); + } + let room = r["room"].as_str().unwrap().to_string(); + let room_id: [u8; 32] = hex::decode(&room).unwrap().try_into().unwrap(); + let t0 = r["t0_us"].as_u64().unwrap(); + let digest = |g: &[u8]| -> [u8; 32] { Sha256::digest(&g[..g.len() - 64]).into() }; + let join = |k: SigningKey, g: Vec, target: &'static str| { + let room = room.clone(); + async move { + let (_, c) = call(addr, "GET", "/watch/challenge", None, "10.0.1.9").await; + let c: [u8; 32] = hex::decode(c["challenge"].as_str().unwrap()).unwrap().try_into().unwrap(); + let proof = wai::live_room::Proof::sign(digest(&g), &k, c, &format!("POST {target}")).to_bytes(); + let body = serde_json::json!({"room": room, "grant": hex::encode(&g), "proof": hex::encode(&proof)}); + let first = call(addr, "POST", "/watch/join", Some(&body), "10.0.1.9").await; + let again = call(addr, "POST", "/watch/join", Some(&body), "10.0.1.9").await; + (first, again) + } + }; + // A proof made for another target is refused. + let ((st, e), _) = join(a.clone(), grants[0].clone(), "//room.test/watch/join").await; + assert_eq!((st, e["error"].as_str()), (401, Some("pop_wrong_context")), "the client addressed the service under its prefix"); + let mut joined = Vec::new(); + for (k, g) in [(&a, &grants[0]), (&b, &grants[1])] { + let ((st, j), (st2, j2)) = join((*k).clone(), g.clone(), "//room.test/room-api/watch/join").await; + assert_eq!(st, 200, "{j}"); + assert_eq!((st2, j2["error"].as_str()), (401, Some("pop_replayed")), "a proof is good once"); + joined.push(j["t"].as_u64().unwrap()); + } + + // Each viewer's chain, posted as a page posts it. + struct Page { + k: SigningKey, + seq: u64, + prev: [u8; 32], + } + let now_t = || (std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_micros() as u64).saturating_sub(t0); + let post = |p: &mut Page, t: u64, payload: Vec| { + let e = wai::live_events::Event::sign(&p.k, room_id, p.seq, p.prev, t, None, wai::live_events::kind::META, payload); + let body = serde_json::json!({"room": room, "events": [hex::encode(e.to_bytes())]}); + (e, body) + }; + let mut pages = [Page { k: a.clone(), seq: 0, prev: [0; 32] }, Page { k: b.clone(), seq: 0, prev: [0; 32] }]; + // A control in the past is refused, and the chain does not move. + let t = now_t().max(joined[0]); + let (_, body) = post(&mut pages[0], t, Control { action: action::PLAY, at: t.saturating_sub(1), arg: 0 }.encode()); + let (st, e) = call(addr, "POST", "/watch/post", Some(&body), "10.0.1.1").await; + assert_eq!((st, e["error"].as_str()), (409, Some("control_not_ahead"))); + // Viewer a plays the source 700 ms ahead. + let play_at = t + 700_000; + let (ev, body) = post(&mut pages[0], t, Control { action: action::PLAY, at: play_at, arg: 0 }.encode()); + let (st, e) = call(addr, "POST", "/watch/post", Some(&body), "10.0.1.1").await; + assert_eq!(st, 200, "{e}"); + pages[0].seq += 1; + pages[0].prev = ev.digest(); + // Both state their presentation every quarter second for five windows, near the room. + let end = now_t() + 10_000_000; + let mut k = 0i64; + while now_t() < end { + for (i, p) in pages.iter_mut().enumerate() { + let x = now_t().max(joined[i]); + let controlled = x.saturating_sub(play_at).min(60_000_000) * u64::from(x >= play_at); + let err = [12_000i64, -9_000, 20_000, -14_000][((k + i as i64) % 4) as usize]; + let pos = (controlled as i64 + err).max(0) as u64; + let s = Presentation::sign(&p.k, room_id, policy.source, x, pos, if x >= play_at { state::PLAYING } else { state::PAUSED }, 1_000_000); + let (ev, body) = post(p, x, s.encode()); + let (st, e) = call(addr, "POST", "/watch/post", Some(&body), "10.0.1.1").await; + assert_eq!(st, 200, "{e}"); + p.seq += 1; + p.prev = ev.digest(); + } + k += 1; + tokio::time::sleep(Duration::from_millis(250)).await; + } + // The clock states each window that ended; then, silent, both viewers leave. + let room_now = timeout(Duration::from_secs(30), async { + loop { + let (_, v) = call(addr, "GET", "/watch/room", None, "10.0.1.9").await; + let leaves = v["chains"][0].as_array().unwrap().iter().filter(|h| wai::live_events::Event::parse(&hex::decode(h.as_str().unwrap()).unwrap()).unwrap().kind == wai::live_events::kind::LEAVE).count(); + if leaves == 2 { + return v; + } + tokio::time::sleep(Duration::from_millis(250)).await; + } + }) + .await + .expect("the clock records both leaving"); + let hexes = |v: &Value| -> Vec> { v.as_array().unwrap().iter().map(|h| hex::decode(h.as_str().unwrap()).unwrap()).collect() }; + let chains: Vec>> = room_now["chains"].as_array().unwrap().iter().map(hexes).collect(); + let run = cw::verify(&cw::Input { + descriptor: &hex::decode(room_now["descriptor"].as_str().unwrap()).unwrap(), + grants: &hexes(&room_now["grants"]), + head: None, + chains: &chains, + policies: &hexes(&room_now["policies"]), + sources: &[Some(vec![object])], + }); + assert_eq!(run.outcome, cw::Outcome::Accept); + assert!(run.skews.len() >= 4, "the clock states every window: {}", run.skews.len()); + let checked: Vec<_> = run.skews.iter().filter_map(|s| s.recomputed.as_ref()).collect(); + assert_eq!(checked.len(), run.skews.len()); + // Every window both were present for whole, after the play settled, is stated in sync. + let settled = play_at + u64::from(policy.settle_ms) * 1000; + let full: Vec<_> = run.skews.iter().filter(|s| s.from >= settled && s.to <= end).collect(); + assert!(!full.is_empty(), "a window after the play settled"); + for s in full { + let (v, p) = s.recomputed.as_ref().unwrap(); + assert!(v.len() == 2 && v.iter().all(|x| x.verdict == cw::verdict::IN_SYNC) && p.iter().all(|x| x.verdict == cw::verdict::IN_SYNC), "{s:?}"); + } + assert_eq!(room_now["refused"]["control_not_ahead"].as_u64(), Some(1)); + let _ = std::fs::remove_dir_all(&dir); +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/lib.mjs b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/lib.mjs index ab8e0e309..14f4023ac 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/lib.mjs +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/lib.mjs @@ -179,10 +179,12 @@ export function roomKeys(bin, dir) { return { keys, lines, authority: lines.match(/^# authority ([0-9a-f]{64})/m)[1], clock: lines.match(/^# clock\s+([0-9a-f]{64})/m)[1] }; } -export async function startRoomService(bin, { keys, relayWs, room = {}, rate = {} }, dir) { +export async function startRoomService(bin, { keys, relayWs, room = {}, rate = {}, top = {} }, dir) { const port = await freePort(); const toml = path.join(dir, "room.toml"); - let t = `listen = "127.0.0.1:${port}"\nkeys = ${JSON.stringify(keys)}\nrelay_url = ${JSON.stringify(relayWs)}\n\n[room]\n`; + let t = `listen = "127.0.0.1:${port}"\nkeys = ${JSON.stringify(keys)}\nrelay_url = ${JSON.stringify(relayWs)}\n`; + for (const [k, v] of Object.entries(top)) t += `${k} = ${v}\n`; + t += "\n[room]\n"; for (const [k, v] of Object.entries(room)) t += `${k} = ${v}\n`; t += "\n[rate]\n"; for (const [k, v] of Object.entries(rate)) t += `${k} = ${v}\n`; @@ -262,3 +264,21 @@ export function serveSameOrigin(root, { service, relayPort }) { }))); }); } + +// A WAV file (PCM, 16-bit, mono) of `seconds` at `rate` Hz: a tone that steps in pitch each +// second, so any stretch of it is told from another by ear. The source a watch room's +// scenario watches. +export function writeWav(file, seconds, rate = 8000) { + const n = seconds * rate; + const b = Buffer.alloc(44 + n * 2); + b.write("RIFF", 0); b.writeUInt32LE(36 + n * 2, 4); b.write("WAVE", 8); + b.write("fmt ", 12); b.writeUInt32LE(16, 16); b.writeUInt16LE(1, 20); b.writeUInt16LE(1, 22); + b.writeUInt32LE(rate, 24); b.writeUInt32LE(rate * 2, 28); b.writeUInt16LE(2, 32); b.writeUInt16LE(16, 34); + b.write("data", 36); b.writeUInt32LE(n * 2, 40); + for (let i = 0; i < n; i++) { + const f = 220 + 20 * (Math.floor(i / rate) % 12); + b.writeInt16LE(Math.round(6000 * Math.sin((2 * Math.PI * f * i) / rate)), 44 + i * 2); + } + fs.writeFileSync(file, b); + return { bytes: b.length, duration_ms: seconds * 1000 }; +} diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs index 4a37bcf01..fca6401a2 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs @@ -4,7 +4,7 @@ // // node e2e/room.e2e.mjs --relay --wai --web // --corpus [--browser ] -// [--only compose,webtransport,websocket,goaway,dvr,service,e2ee] [--runs N] [--between ] +// [--only compose,webtransport,websocket,goaway,dvr,service,e2ee,cowatch] [--runs N] [--between ] // [--out ] [--room ] [--base ] [--seek on|off] // // Scenarios: @@ -52,7 +52,17 @@ // on the wire is refused bad_tag, a late joiner opens nothing sealed before // its join, a member that stops publishing is removed and opens no later // epoch while still receiving, an object it sealed before is refused -// sender_removed, and the relay's DVR store keeps nothing of the room. +// sender_removed, and the relay's DVR store keeps nothing of the room; +// cowatch a watch room (WAI co-watch) kept by a room service: three viewers, each +// page fetching the source and checking it by the content hash the room's +// policy names, entering the room's co-watch log by a proof of its key; one +// plays, one pauses, one seeks, each control applied by every page at its +// instant; a viewer joins late and is brought to the room's position; every +// page states what it presents twice a slot, and the room clock's skew +// statements measure them: in the last windows every viewer and every pair is +// in sync within the policy's bound, as each page shows; and the room, read +// back from the service, verifies by co_watch_verify.py, the corpus's second +// implementation, every skew statement recomputed. // // With `--base ` the service scenario runs against a deployment (the page at // /room/, its service and relay behind the same origin): nothing is started here, @@ -64,7 +74,8 @@ import fs from "node:fs"; import path from "node:path"; import { createRequire } from "node:module"; -import { serve, serveSameOrigin, startRelay, roomKeys, startRoomService, makeFixture, hostFrame, browserArgs, memguardedBrowser, killStrays, tmpdir, until, sleep } from "./lib.mjs"; +import { execFileSync } from "node:child_process"; +import { serve, serveSameOrigin, startRelay, roomKeys, startRoomService, makeFixture, hostFrame, browserArgs, memguardedBrowser, killStrays, tmpdir, until, sleep, writeWav } from "./lib.mjs"; const args = Object.fromEntries(process.argv.slice(2).reduce((a, x, i, all) => (x.startsWith("--") ? [...a, [x.slice(2), all[i + 1] && !all[i + 1].startsWith("--") ? all[i + 1] : "1"]] : a), [])); const need = (k) => { if (!args[k]) { console.error(`room e2e: --${k} is required`); process.exit(2); } return path.resolve(args[k]); }; @@ -72,7 +83,7 @@ const BASE = args.base ? args.base.replace(/\/$/, "") : null; const WAI = need("wai"); const [RELAY, WEB, CORPUS] = BASE ? [null, null, null] : [need("relay"), need("web"), need("corpus")]; const ROOM = args.room ? path.resolve(args.room) : null; -const ONLY = (args.only || (BASE ? "service" : `compose,webtransport,websocket,goaway,dvr${ROOM ? ",service,e2ee" : ""}`)).split(","); +const ONLY = (args.only || (BASE ? "service" : `compose,webtransport,websocket,goaway,dvr${ROOM ? ",service,e2ee,cowatch" : ""}`)).split(","); const RUNS = Number(args.runs || 1); // `--seek on|off`: the service scenario's seek back into the relay's DVR window. On by default // on loopback, where the relay this starts keeps a window; off by default against a @@ -881,6 +892,115 @@ async function scenarioE2ee(run) { } } +// ------------------------------------------------------------------------------- co-watch + +// A watch room (WAI co-watch) kept by a room service, three viewers in one browser each. +async function scenarioCowatch(run) { + const label = "cowatch"; + const dir = path.join(OUT, `run${run}-cowatch`); + fs.mkdirSync(dir, { recursive: true }); + if (!ROOM) throw new Error("--room is needed for the cowatch scenario"); + const k = roomKeys(ROOM, dir); + const source = path.join(dir, "programme.wav"); + const wav = writeWav(source, 120); + const relay = await startRelay(RELAY, { no_quic: true, auth: true, door: [], extra: k.lines, summary_out: path.join(dir, "summaries.jsonl"), limits: { max_session_ms: 600000 } }, dir, "relay"); + const svc = await startRoomService(ROOM, { + keys: k.keys, relayWs: relay.wsUrl, + room: { watch_source: JSON.stringify(source), watch_duration_ms: wav.duration_ms, watch_control: 15, watch_window_ms: 5000 }, + top: { public_prefix: JSON.stringify("/room-api") }, + }, dir); + const srv = await serveSameOrigin(WEB, { service: svc.url, relayPort: relay.ws }); + const base = `${srv.url}/room/?service=/room-api`; + const browser = await launch(dir); + const pages = []; + const snap = async (p) => { const s = await p.snap(); if (s.errors.length) throw new Error(`${p.name}: ${s.errors[0]}`); return s; }; + // Each viewer a page of its own: three players, each with its own media element and clock. + const enter = async (name) => { + const p = await page(browser, base, name, dir); + pages.push(p); + await until(`${name}'s page ready`, STEP, () => p.evaluate(() => window.roomTest && window.roomTest.state && window.roomTest.state.phase === "idle"), 200); + await p.click("#watch"); + await waitPhase(p, "watching"); + const s = await until(`${name} joins the watch room`, STEP, async () => { const x = await snap(p); return x.cowatch && x.cowatch.joined != null && x; }, 200); + return { p, s }; + }; + const cws = async () => Promise.all(pages.map(async (p) => [p.name, (await snap(p)).cowatch])); + // Every page holds `n` controls and agrees with the room within the bound. + const together = async (what, n, playing) => until(what, STEP, async () => { + const all = await cws(); + const ok = all.every(([, c]) => c.controls >= n && c.playing === playing && c.error_us != null && Math.abs(c.error_us) <= BOUND_US && !c.stopped); + return ok && all; + }, 250); + const BOUND_US = 250000; + try { + const A = await enter("ada"); + const B = await enter("ben"); + check(`${label}: each page fetched the source and checked it by the content hash the room's policy names`, A.s.cowatch.verified_source && B.s.cowatch.verified_source, `${wav.bytes} bytes, ${wav.duration_ms} ms`); + check(`${label}: each page entered the room's co-watch log by a proof of its key, and its clock is estimated against the room's`, A.s.cowatch.joined > 0 && B.s.cowatch.joined > 0, `joined at ${A.s.cowatch.joined} and ${B.s.cowatch.joined} µs of room clock; offsets ${A.s.cowatch.offset_us} and ${B.s.cowatch.offset_us} µs`); + // Ada plays: every page applies it at its instant. + const playAt = await A.p.evaluate(() => window.roomTest.watchControl("play")); + const t1 = await together(`${label}: both play from Ada's control`, 1, true); + check(`${label}: a play, sent ahead of its instant, starts both players together`, true, t1.map(([n, c]) => `${n} ${(c.error_us / 1000).toFixed(1)} ms`).join(", ") + `; effective at ${playAt}`); + await sleep(4000); + // Ben pauses. + await B.p.evaluate(() => window.roomTest.watchControl("pause")); + const t2 = await together(`${label}: both pause on Ben's control`, 2, false); + const pos2 = t2.map(([, c]) => c.current_time); + check(`${label}: a pause stops both players at one position`, Math.abs(pos2[0] - pos2[1]) * 1e6 <= BOUND_US, pos2.map((x) => x.toFixed(3)).join(" s, ") + " s"); + await sleep(1500); + await A.p.evaluate(() => window.roomTest.watchControl("play")); + await together(`${label}: both play again`, 3, true); + // Ben seeks to 60 s. + await B.p.evaluate(() => window.roomTest.watchControl("seek", 60e6)); + const t4 = await together(`${label}: both go to 60 s on Ben's seek`, 4, true); + check(`${label}: a seek takes every player to the position it names`, t4.every(([, c]) => c.current_time >= 59.5 && c.current_time < 75), t4.map(([n, c]) => `${n} at ${c.current_time.toFixed(2)} s`).join(", ")); + await sleep(3000); + // Cleo joins late, and is brought to where the room is. + const C = await enter("cleo"); + const t5 = await together(`${label}: the late joiner is brought to the room's position`, 4, true); + const late = t5.find(([n]) => n === "cleo")[1]; + check(`${label}: a viewer that joins late reads the room's controls and seeks to the room's position`, late.seeks >= 1 && late.current_time >= 60, `cleo at ${late.current_time.toFixed(2)} s, ${(late.error_us / 1000).toFixed(1)} ms from the room, after ${late.seeks} seek(s)`); + // Two windows with all three present and nothing changing, then their skew statements. + const joinedC = C.s.cowatch.joined; + const target = Math.ceil((joinedC + 2_000_000) / 5_000_000) * 5_000_000 + 10_000_000; + const final = await until(`${label}: the clock states the windows after the late joiner settled`, STEP * 2, async () => { + const r = await fetch(`${srv.url}/room-api/watch/room`).then((x) => x.json()); + const lw = r.skews && r.skews.length && r.skews[0]; + return lw && lw.to >= target && r; + }, 500); + const lastWindow = final.skews; + const vs = lastWindow.flatMap((s) => s.viewers); + check(`${label}: the room clock's last window states all three viewers in sync within the bound`, vs.length === 3 && vs.every((v) => v.verdict === "in_sync" && v.pq <= BOUND_US && v.counted > 0 && v.counted === v.due), + vs.map((v) => `${v.principal.slice(0, 8)} ${v.verdict} p95 ${(v.pq / 1000).toFixed(1)} ms (${v.counted}/${v.due})`).join(", ")); + check(`${label}: the service carried every event the pages posted`, Object.keys(final.refused || {}).length === 0, JSON.stringify(final.refused)); + const shown = await until(`${label}: each page shows the room in sync`, STEP, async () => { + const all = await cws(); + return all.every(([, c]) => c.last_window && c.last_window.to >= target && c.dom && /in sync/.test(c.dom)) && all; + }, 500); + check(`${label}: each page shows its own offset and the room's verdicts`, shown.every(([, c]) => /^You: [+−]\d+ ms from the room · Room: all 3 in sync within 250 ms$/.test(c.dom)), shown.map(([n, c]) => `${n}: "${c.dom}"`).join("; ")); + const all = await cws(); + check(`${label}: no page refused a record of the log or had an event refused`, all.every(([, c]) => Object.keys(c.refused).length === 0 && Object.keys(c.post_refused).length === 0 && !c.stopped), + all.map(([n, c]) => `${n}: ${c.statements} statements, ${c.posted} carried, ${c.nudges} nudged, ${c.seeks} seeks`).join("; ")); + // The room as the service carried it, verified from the extension's text alone. + const roomFile = path.join(dir, "watch-room.json"); + fs.writeFileSync(roomFile, JSON.stringify(final)); + const verifier = path.resolve(WEB, "../../../../../wai/live-conformance/co_watch_verify.py"); + const v = JSON.parse(execFileSync("python3", ["-I", verifier, "--room", roomFile], { maxBuffer: 64 << 20 }).toString()); + const checked = v.skews || []; + const tail = checked.filter((x) => x.from >= target - 10_000_000 && x.viewers !== "unchecked"); + check(`${label}: the room verifies by co_watch_verify.py, every skew statement recomputed, the controls applied in their order`, + v.outcome === "accept" && checked.length > 0 && checked.every((x) => x.viewers !== "unchecked") && v.controls.length === 4 && tail.length > 0 && tail.every((x) => x.viewers.every((y) => y.verdict === "in_sync")), + `${v.outcome}${v.reason ? ` ${v.reason} at ${JSON.stringify(v.at)}` : ""}: ${checked.length} skew statements, ${v.presentations ? v.presentations.length : 0} presentation statements, ${v.controls ? v.controls.length : 0} controls`); + } finally { + for (const p of pages) p.dump(); + await browser.close().catch(() => {}); + await srv.close(); + await svc.stop(); + await relay.stop(); + killStrays(); + } +} + // ------------------------------------------------------------------------------------- main let passedRuns = 0; @@ -893,7 +1013,7 @@ for (let run = 1; run <= RUNS; run++) { const before = failed; const t = Date.now(); console.log(`== run ${run} of ${RUNS}`); - for (const [name, f] of [["compose", scenarioCompose], ["webtransport", (r) => scenarioRoom(r, "webtransport")], ["websocket", (r) => scenarioRoom(r, "websocket")], ["goaway", scenarioGoaway], ["dvr", scenarioDvr], ["service", scenarioService], ["e2ee", scenarioE2ee]]) { + for (const [name, f] of [["compose", scenarioCompose], ["webtransport", (r) => scenarioRoom(r, "webtransport")], ["websocket", (r) => scenarioRoom(r, "websocket")], ["goaway", scenarioGoaway], ["dvr", scenarioDvr], ["service", scenarioService], ["e2ee", scenarioE2ee], ["cowatch", scenarioCowatch]]) { if (!ONLY.includes(name)) continue; try { await f(run); diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh index a5b06b4cb..7af26d131 100755 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh @@ -1,7 +1,7 @@ #!/bin/bash # Build what the browser MoQ client's tests need, and run them. # -# e2e/run.sh [--only compose,webtransport,websocket,goaway,dvr,service,e2ee] [--runs N] +# e2e/run.sh [--only compose,webtransport,websocket,goaway,dvr,service,e2ee,cowatch] [--runs N] # # 1. joule-moq-relay, joule-moq-room (its own workspace) and wai_live_web (native, # release: the test room and the host's composition); @@ -66,7 +66,7 @@ fi BROWSER_BIN=${BROWSER_BIN:-} step "unit tests of the page's modules" -node --test "$CRATE/web/moq/capsule.test.mjs" "$CRATE/web/moq/media.test.mjs" "$CRATE/web/ads/presentation.test.mjs" +node --test "$CRATE/web/moq/capsule.test.mjs" "$CRATE/web/moq/media.test.mjs" "$CRATE/web/ads/presentation.test.mjs" "$CRATE/web/room/cowatch.test.mjs" step "end-to-end" browser=() diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js index eba2079a4..a6d10423c 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js @@ -35,10 +35,18 @@ // any decoder sees it; an object that does not open is counted with its reason and never // decoded. Such a room has no seeking back: the relay keeps nothing of it. // +// A watch room (WAI co-watch): the room service names its policy and its source (`GET /room`'s +// `watch`). The page fetches the source, checks its bytes by the content hash the policy +// names, enters the room's co-watch log by a proof of its key over the service's challenge, +// applies each control at its instant, keeps the source at the controlled position by the +// catch-up rule, states what it presents twice a slot, and shows the room's sync (./cowatch.js). +// The page's events in such a room are its co-watch statements: it sends no caption or chat. +// // Everything a test reads is on `window.roomTest`. import initWai, * as wai from "../pkg/wai_live_web.js"; import { E2ee } from "./e2ee.js"; +import { CoWatch, ACTION } from "./cowatch.js"; import { connect } from "../moq/transport.js"; import { MoqSession, RequestRefused, withTimeout } from "../moq/session.js"; import * as media from "../moq/media.js"; @@ -187,7 +195,7 @@ class EventsTrack { // --------------------------------------------------------------------------------- room -let fx, me, roomId, t0, room, compositor, session, transportOpts, eventsTrack, service, e2ee; +let fx, me, roomId, t0, room, compositor, session, transportOpts, eventsTrack, service, e2ee, cowatch; const subscribed = new Map(); // principal -> subscription state const signers = {}; const published = []; // the PUBLISH requests held open @@ -302,6 +310,7 @@ async function enter(role) { window.roomTest.role = ROLE_OF[role]; await begin(ROLE_OF[role], stream); pollRoom(); + if (v.watch) await startCoWatch(v, r.body, seed, principal); if (e2ee) { e2ee.follow(() => state.phase !== "left").catch(fail); status(role === "publisher" ? "You are in the room. It is end-to-end encrypted: your media is sealed before it leaves this page, and sent once the room's group has keyed you." : "Watching. This room is end-to-end encrypted, and a viewer is not a member of its group: it opens nothing."); @@ -386,6 +395,66 @@ function onClosed(s, info) { // Leave: the session closes, and the relay ends this page's tracks, which the room's clock // records as the publisher leaving. +// ------------------------------------------------------------------------------- co-watch + +// Whether `principal` may control `action` (co-watch §5.2): the direct power, or the action's +// bit of its grant's `watch_control`. +function mayControl(principal, action) { + const g = (state.grants || []).find((x) => x.principal === principal); + if (!g) return false; + if (g.powers & 2) return true; + const a = g.attrs.find((x) => x[0] === "watch_control"); + return !!a && /^[1-9][0-9]?$/.test(a[1]) && Number(a[1]) <= 15 && ((Number(a[1]) >> (action - 1)) & 1) === 1; +} + +async function startCoWatch(v, granted, seed, principal) { + status("Fetching what the room watches…"); + const base = new URL(service, location.href); + cowatch = new CoWatch({ + api, wai, room: v.room, t0: v.t0_us, seed, principal, grant: granted.grant, + media: $("cowatch-media"), policies: [v.watch.policy], objects: v.watch.source.objects, + sourceUrl: `${service}${v.watch.source.path}`, + mayControl: (p, a) => mayControl(p, a), + // The proof names what this page addresses: the service under its prefix (live-rooms §10.5.1). + target: `//${location.host}${base.pathname.replace(/\/$/, "")}/watch/join`, + log, onChange: renderCoWatch, + }); + if ($("cowatch")) $("cowatch").hidden = false; + if ($("caption-form")) $("caption-form").hidden = true; + await cowatch.estimateClock(); + await cowatch.loadSource(); + await cowatch.join(); + const alive = () => state.phase !== "left"; + cowatch.follow(alive).catch(fail); + cowatch.run(alive).catch(fail); + for (const [id, a] of [["cw-play", ACTION.play], ["cw-pause", ACTION.pause], ["cw-back", ACTION.seek], ["cw-fwd", ACTION.seek], ["cw-rate", ACTION.rate]]) { + if ($(id)) $(id).disabled = !mayControl(principal, a); + } + status("Watching together. The room keeps every viewer at one position, and measures how close."); +} + +function watchControl(name, arg) { + if (!cowatch) throw new Error("not a watch room"); + return cowatch.control(ACTION[name], arg); +} + +function renderCoWatch() { + const el = $("cw-sync"); + if (!el || !cowatch) return; + const s = cowatch.snapshot(); + const ms = (us) => `${us >= 0 ? "+" : "−"}${Math.abs(us / 1000).toFixed(0)} ms`; + const mine = s.error_us == null ? "" : `You: ${ms(s.error_us)} from the room`; + let room = "Room: no window measured yet"; + if (s.last_window) { + const n = s.last_window.viewers.length; + const unknown = s.last_window.viewers.filter((x) => x.verdict === "unknown").length; + const out = s.last_window.viewers.filter((x) => x.verdict === "out_of_sync").length; + const bound = `${s.last_window.bound_us / 1000} ms`; + room = out ? `Room: ${out} of ${n} out of sync (bound ${bound})` : unknown ? `Room: ${n - unknown} of ${n} in sync within ${bound}, ${unknown} unknown` : `Room: all ${n} in sync within ${bound}`; + } + el.textContent = [mine, room].filter(Boolean).join(" · "); +} + async function leave() { state.phase = "left"; if (state.capture && state.capture.stream) for (const t of state.capture.stream.getTracks()) t.stop(); @@ -1239,12 +1308,14 @@ function renderCaption() { // A participant's own events: captions and chats, signed with its key. window.roomTest.sendCaption = async ({ text, origin = 1, model = null, lang = "en", duration_ms = 3000 }) => { + if (cowatch) throw new Error("a watch room's page sends its co-watch statements alone"); const p = wai.captionPayload(duration_ms, origin, model || undefined, lang, text); const r = await eventsTrack.emit(0x0a, p); await (records = records.then(() => onRecord(r.record))); return r.view; }; window.roomTest.sendChat = async (text) => { + if (cowatch) throw new Error("a watch room's page sends its co-watch statements alone"); const r = await eventsTrack.emit(0x03, wai.chatPayload(text)); await (records = records.then(() => onRecord(r.record))); return r.view; @@ -1279,7 +1350,11 @@ window.roomTest.snapshot = () => ({ session: session && { counters: session.counters, transport: session.t.stats ? session.t.stats() : {} }, verifiers: Object.fromEntries([...subscribed.entries()].map(([P, s]) => [P, Object.fromEntries(Object.entries(s.tracks).map(([m, st]) => [m, JSON.parse(st.verifier.stats())]))])), e2ee: e2ee && { ...state.e2ee, ...e2ee.stats, at: e2ee.at, stopped: e2ee.stopped, member: e2ee.state(), dom: $("e2ee") && !$("e2ee").hidden ? $("e2ee").textContent : null }, + cowatch: cowatch && { ...cowatch.snapshot(), dom: $("cw-sync") ? $("cw-sync").textContent : null }, }); +// A shared control of a watch room (co-watch §5): `play`, `pause`, `seek` (to, µs) or `rate` +// (millionths), at the policy's lead from now. Resolves with the instant it takes effect. +window.roomTest.watchControl = (name, arg = 0) => watchControl(name, arg); // A participant's grant presented as a bare token, with no proof: the relay must refuse // the session (live-rooms §10.5.2, UNAUTHORIZED). Resolves with how the session ended. window.roomTest.tryBareGrant = async () => { @@ -1409,6 +1484,14 @@ if (service) { if ($("watch")) $("watch").addEventListener("click", go("viewer")); if ($("leave")) $("leave").addEventListener("click", () => { $("leave").disabled = true; if ($("caption-form")) $("caption-form").hidden = true; leave(); }); if ($("caption-form")) $("caption-form").addEventListener("submit", sendTypedCaption); + // A watch room's shared controls, each at the room's lead (co-watch §5.3). + const cw = (fn) => () => { try { fn(); } catch (e) { fail(e); } }; + const at = () => (cowatch ? cowatch.timeline.positionAt(cowatch.now()) : 0); + if ($("cw-play")) $("cw-play").addEventListener("click", cw(() => watchControl("play"))); + if ($("cw-pause")) $("cw-pause").addEventListener("click", cw(() => watchControl("pause"))); + if ($("cw-back")) $("cw-back").addEventListener("click", cw(() => watchControl("seek", Math.max(0, at() - 10e6)))); + if ($("cw-fwd")) $("cw-fwd").addEventListener("click", cw(() => watchControl("seek", Math.min(cowatch.policy.duration_us, at() + 10e6)))); + if ($("cw-rate")) $("cw-rate").addEventListener("change", cw(() => watchControl("rate", Number($("cw-rate").value)))); // Before entering: an end-to-end encrypted room says so, and offers no watching, since a // viewer is not a member of its group and opens nothing, and no seeking back. api("/room").then((r) => { diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html index 8cd120331..b0b7c81fd 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html @@ -56,6 +56,21 @@ + +

Events

    -- 2.54.0 (Apple Git-157) From c32ab15cc3de41691698d4ce6e41a947eac709b8 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:37:28 -0400 Subject: [PATCH 06/16] room page: a watch room's page enters the co-watch log before it subscribes to the clock Co-Authored-By: Claude Opus 5.5 --- .../joule-code-rs/crates/joule-moq-web/web/room/app.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js index a6d10423c..d0ef7e75b 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/app.js @@ -308,9 +308,13 @@ async function enter(role) { const ws = q.get("ws") || `${location.protocol === "https:" ? "wss" : "ws"}://${location.host}/moq`; transportOpts = { webtransport: null, websocket: ws, hashes: [], force: "websocket" }; window.roomTest.role = ROLE_OF[role]; + // A watch room's page enters its co-watch log first: the clock's `join` for it is then on the + // clock's events track, which the page subscribes to next, and which a room of viewers alone + // has no other record on yet. + if (v.watch) await startCoWatch(v, r.body, seed, principal); await begin(ROLE_OF[role], stream); pollRoom(); - if (v.watch) await startCoWatch(v, r.body, seed, principal); + if (cowatch) runCoWatch(); if (e2ee) { e2ee.follow(() => state.phase !== "left").catch(fail); status(role === "publisher" ? "You are in the room. It is end-to-end encrypted: your media is sealed before it leaves this page, and sent once the room's group has keyed you." : "Watching. This room is end-to-end encrypted, and a viewer is not a member of its group: it opens nothing."); @@ -424,6 +428,10 @@ async function startCoWatch(v, granted, seed, principal) { await cowatch.estimateClock(); await cowatch.loadSource(); await cowatch.join(); +} + +function runCoWatch() { + const principal = me.principal; const alive = () => state.phase !== "left"; cowatch.follow(alive).catch(fail); cowatch.run(alive).catch(fail); -- 2.54.0 (Apple Git-157) From 019616c9c5d2ac95948804dc5a20e1cd802cae4e Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:40:56 -0400 Subject: [PATCH 07/16] cowatch e2e: each step waits for its control's instant on every page's room clock Co-Authored-By: Claude Opus 5.5 --- .../crates/joule-moq-web/e2e/room.e2e.mjs | 21 ++++++++++--------- .../crates/joule-moq-web/web/room/cowatch.js | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs index fca6401a2..f8247c105 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs @@ -925,10 +925,11 @@ async function scenarioCowatch(run) { return { p, s }; }; const cws = async () => Promise.all(pages.map(async (p) => [p.name, (await snap(p)).cowatch])); - // Every page holds `n` controls and agrees with the room within the bound. - const together = async (what, n, playing) => until(what, STEP, async () => { + // Every page holds `n` controls, is past the last one's instant (`after`, µs of room + // clock), and agrees with the room within the bound. + const together = async (what, n, playing, after = 0) => until(what, STEP, async () => { const all = await cws(); - const ok = all.every(([, c]) => c.controls >= n && c.playing === playing && c.error_us != null && Math.abs(c.error_us) <= BOUND_US && !c.stopped); + const ok = all.every(([, c]) => c.controls >= n && c.room_now >= after && c.playing === playing && c.error_us != null && Math.abs(c.error_us) <= BOUND_US && !c.stopped); return ok && all; }, 250); const BOUND_US = 250000; @@ -939,20 +940,20 @@ async function scenarioCowatch(run) { check(`${label}: each page entered the room's co-watch log by a proof of its key, and its clock is estimated against the room's`, A.s.cowatch.joined > 0 && B.s.cowatch.joined > 0, `joined at ${A.s.cowatch.joined} and ${B.s.cowatch.joined} µs of room clock; offsets ${A.s.cowatch.offset_us} and ${B.s.cowatch.offset_us} µs`); // Ada plays: every page applies it at its instant. const playAt = await A.p.evaluate(() => window.roomTest.watchControl("play")); - const t1 = await together(`${label}: both play from Ada's control`, 1, true); + const t1 = await together(`${label}: both play from Ada's control`, 1, true, playAt); check(`${label}: a play, sent ahead of its instant, starts both players together`, true, t1.map(([n, c]) => `${n} ${(c.error_us / 1000).toFixed(1)} ms`).join(", ") + `; effective at ${playAt}`); await sleep(4000); // Ben pauses. - await B.p.evaluate(() => window.roomTest.watchControl("pause")); - const t2 = await together(`${label}: both pause on Ben's control`, 2, false); + const pauseAt = await B.p.evaluate(() => window.roomTest.watchControl("pause")); + const t2 = await together(`${label}: both pause on Ben's control`, 2, false, pauseAt); const pos2 = t2.map(([, c]) => c.current_time); check(`${label}: a pause stops both players at one position`, Math.abs(pos2[0] - pos2[1]) * 1e6 <= BOUND_US, pos2.map((x) => x.toFixed(3)).join(" s, ") + " s"); await sleep(1500); - await A.p.evaluate(() => window.roomTest.watchControl("play")); - await together(`${label}: both play again`, 3, true); + const againAt = await A.p.evaluate(() => window.roomTest.watchControl("play")); + await together(`${label}: both play again`, 3, true, againAt); // Ben seeks to 60 s. - await B.p.evaluate(() => window.roomTest.watchControl("seek", 60e6)); - const t4 = await together(`${label}: both go to 60 s on Ben's seek`, 4, true); + const seekAt = await B.p.evaluate(() => window.roomTest.watchControl("seek", 60e6)); + const t4 = await together(`${label}: both go to 60 s on Ben's seek`, 4, true, seekAt); check(`${label}: a seek takes every player to the position it names`, t4.every(([, c]) => c.current_time >= 59.5 && c.current_time < 75), t4.map(([n, c]) => `${n} at ${c.current_time.toFixed(2)} s`).join(", ")); await sleep(3000); // Cleo joins late, and is brought to where the room is. diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js index 3933d2ad7..2faffb6bb 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/cowatch.js @@ -502,7 +502,7 @@ export class CoWatch { const last = this.skews.length ? this.skews[this.skews.length - 1] : null; const lastWindow = last ? this.skews.filter((s) => s.from === last.from) : []; return { - joined: this.joinT, at: this.at, offset_us: this.offset, controls: this.controls.length, + joined: this.joinT, at: this.at, offset_us: this.offset, room_now: this.now(), controls: this.controls.length, overridden: this.controls.filter((c) => this.timeline.overridden.has(c.digest)).length, controlled: this.controlled ?? null, error_us: this.error ?? null, playing: !this.media.paused, rate: this.media.playbackRate, current_time: this.media.currentTime, -- 2.54.0 (Apple Git-157) From c2609d80e126bc83c5d084593b2402f5c6ef6dc7 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:47:03 -0400 Subject: [PATCH 08/16] joule-moq-room, joule-moq-web: watch rooms in the READMEs, the example configuration and the workflows Co-Authored-By: Claude Opus 5.5 --- .github/workflows/joule-moq-room.yml | 8 ++++-- .github/workflows/joule-moq-web.yml | 15 +++++++++- .../crates/joule-moq-room/README.md | 28 ++++++++++++++++++- .../crates/joule-moq-room/room.example.toml | 11 ++++++++ .../crates/joule-moq-web/README.md | 6 ++++ 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/.github/workflows/joule-moq-room.yml b/.github/workflows/joule-moq-room.yml index 8d5e45808..ca8cc08ec 100644 --- a/.github/workflows/joule-moq-room.yml +++ b/.github/workflows/joule-moq-room.yml @@ -7,10 +7,12 @@ name: joule-moq-room room service # a grant and its proof open a session and the clock announces the publisher, the grant # alone opens none, the room verifies (live-rooms §9), a publisher past the room's places # is refused, clients are bounded, and a new room starts when the last publisher has left; -# and an end-to-end encrypted room (WAI confidentiality), members keying through the -# service's log on a relay. +# an end-to-end encrypted room (WAI confidentiality), members keying through the +# service's log on a relay; and a watch room (WAI co-watch): viewers admitted by a proof of +# their key, their controls and statements carried when co-watch accepts them, the clock's +# skew statements and leaves, and the room the log carries verified by wai-rs. # -# It builds on wai-rs's room, event and composition records, on the relay and on +# It builds on wai-rs's room, event, composition and co-watch records, on the relay and on # joule-moq-mls, so a change to any of them runs it. Push filters match the push's delta, so every path the job reads is # listed. diff --git a/.github/workflows/joule-moq-web.yml b/.github/workflows/joule-moq-web.yml index 385e43907..d71eda56a 100644 --- a/.github/workflows/joule-moq-web.yml +++ b/.github/workflows/joule-moq-web.yml @@ -25,7 +25,12 @@ name: joule-moq-web browser client # before it is decoded; a viewer outside the group opens nothing, every change # a relay could make is refused with its reason, a late joiner opens nothing # sealed before its join, a member that stops publishing is removed and opens -# no later epoch, and the relay's DVR store keeps nothing of the room. +# no later epoch, and the relay's DVR store keeps nothing of the room; +# cowatch a watch room (WAI co-watch) kept by a room service: three viewers check the +# source by its content hash and enter by a proof of their keys; a play, a +# pause and a seek applied by every page at their instants, a late joiner +# brought to the room's position, the clock's skew statements in sync within +# the bound, and the room verified by co_watch_verify.py. # # The macos runner is the host with the browser installed; the tests drive that browser # (its executable named by BROWSER_BIN), not a bundled one. The automation package comes @@ -56,6 +61,10 @@ on: - 'wai/wai-ops/**' - 'wai/live-conformance/compose/**' - 'wai/live-conformance/presentation/**' + # The page's co-watch module is tested against the co-watch corpus, and the cowatch + # scenario verifies its room with the corpus's second implementation. + - 'wai/live-conformance/cowatch/**' + - 'wai/live-conformance/co_watch_verify.py' - '.github/workflows/joule-moq-web.yml' pull_request: paths: @@ -73,6 +82,10 @@ on: - 'wai/wai-ops/**' - 'wai/live-conformance/compose/**' - 'wai/live-conformance/presentation/**' + # The page's co-watch module is tested against the co-watch corpus, and the cowatch + # scenario verifies its room with the corpus's second implementation. + - 'wai/live-conformance/cowatch/**' + - 'wai/live-conformance/co_watch_verify.py' - '.github/workflows/joule-moq-web.yml' jobs: diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/README.md b/joule-code/joule-code-rs/crates/joule-moq-room/README.md index 937eddfad..555edc3ba 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/README.md +++ b/joule-code/joule-code-rs/crates/joule-moq-room/README.md @@ -30,6 +30,20 @@ A room service for WAI live rooms (`wai/extensions/live-rooms.md`) over records, its proposals, and every GroupInfo, commit and Welcome a member posts, in the order the clock took them; a post the clock refuses (§5.5) is not carried. +- **keeps watch rooms** (`[room] watch_source`, WAI `extensions/co-watch.md`). Each room then + watches that file together: the authority signs a co-watch policy (`WXP1`) naming it, an + object sequence of one object, by the SHA-256 of its bytes and its duration, and the service + serves the bytes. A visitor enters the room's co-watch log by a proof of its grant's key over + a challenge the service issued, for the request it makes (live-rooms §10.5.3), and the clock + signs its `join`; every grant carries `watch_control`, the actions its principal may + control. The service is the room's carrier of its viewers' events: one log per room, holding + every record of the clock's chain and every control and presentation statement a viewer + posts, each carried only when a verifier would accept it (its chain, its signature, its + grant's policy and rate, and co-watch §5 and §7.2). Each window, the clock signs the skew + statements of co-watch §8.4 from what the log holds; and a viewer silent for four seconds, or + whose grant has ended, leaves. A watch room is never end-to-end encrypted: its source is + served in the clear. + A room lasts while anyone publishes in it. When the last publisher has left, the next one starts a new room: a new descriptor at a new `t0`, under the same authority and clock, so each room's grants and chain hold one stretch of company. @@ -82,6 +96,13 @@ trust_field = 1 | `GET /mls?room=&from=[&wait_ms=]` | an end-to-end encrypted room's log from entry `n`: `{"room", "entries": [{"seq", "event" or "mls": }], "next", "end"}`, held up to 8 s while nothing is past `n`; `410` for a room since replaced, `404` for a room that is not end-to-end encrypted | | `POST /mls/key-package` `{"room", "key_package": }` | kept for the principal's Add: `{"ok", "principal"}`; `403` for a principal the room has not granted | | `POST /mls/post` `{"room", "frames": []}` | a GroupInfo, or a commit and its Welcome, checked by the clock as a member checks it, then carried: `{"ok", "seq"}`; `409` `{"error": }` when the clock refuses it | +| `GET /watch/time` | a watch room: `{"now_us", "t0_us"}`, the service's clock, for a page's estimate of the room clock | +| `GET /watch/source` | a watch room's source, its bytes whole, of its media type | +| `GET /watch/challenge` | `{"challenge": }`: single-use, good for a minute | +| `POST /watch/join` `{"room", "grant": , "proof": }` | the proof (live-rooms §10.5.1) over a challenge, for `POST ///watch/join`; the clock signs the principal's `join`: `{"ok", "t"}`; `401` `{"error": }` for a proof that fails | +| `POST /watch/post` `{"room", "events": []}` (at most 8) | the viewer's events, each checked and carried in order: `{"ok", "carried", "log"}`; `409` `{"error": , "carried"}` at the first refused | +| `GET /watch?room=&from=[&wait_ms=]` | the watch room's log from entry `n`: `{"room", "entries": [{"seq", "event": }], "next", "end"}`, held up to 8 s while nothing is past `n` | +| `GET /watch/room` | the room as a co-watch verifier is given it (`descriptor`, `grants`, `chains`, `policies`, `sources`), the latest window's skew statements read, and the refusals by reason | Every answer is JSON with `Cache-Control: no-store`. The client's address is `CF-Connecting-IP`, else the first `X-Forwarded-For`, else the connection's: the service @@ -97,7 +118,12 @@ publisher, the grant alone opens none, the room verifies, a third publisher is r clients are bounded, and a new room starts when the last publisher has left; and an end-to-end encrypted room on a relay, two members keying through the service as pages do (a GroupInfo, the clock's Add, a commit and its Welcome), the posts the clock refuses not carried, each -opening what the other seals, and a member that leaves removed by the next commit. +opening what the other seals, and a member that leaves removed by the next commit; and a watch +room against a relay on loopback: its source served and named by its policy, viewers admitted by +a proof for the request they make (a proof for another target, or presented again, refused), +their controls and statements carried and a control in the past refused, the clock's skew +statements of each window, each viewer's leave once silent, and the room the log carries +verified as co-watch §11 verifies it, every viewer in sync. ## Licence diff --git a/joule-code/joule-code-rs/crates/joule-moq-room/room.example.toml b/joule-code/joule-code-rs/crates/joule-moq-room/room.example.toml index a713e0261..893ec41c0 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-room/room.example.toml +++ b/joule-code/joule-code-rs/crates/joule-moq-room/room.example.toml @@ -9,6 +9,9 @@ keys = "/path/to/keys.toml" relay_url = "ws://127.0.0.1:9681/moq" # Exit with status 70 past this resident memory (MiB), for the supervisor to restart it. max_resident_mb = 256 +# The path prefix the front puts before the service's paths (`/room-api` where it strips it): +# a watch room's join proof names the target the page addressed. +public_prefix = "/room-api" [room] # Publishers at once, those whose grants are still waited for among them; the composition @@ -26,6 +29,14 @@ max_grants = 64 # group whose external sender is the clock, and the room's log of MLS messages. Such a room # is never recorded, and its viewers are not members of its group. e2ee = false +# Every room watches this file together (WAI co-watch): served whole, named by the room's +# co-watch policy, with its duration in milliseconds. Empty for rooms that watch nothing. +watch_source = "" +watch_duration_ms = 0 +# The actions every principal of a watch room may control: 1 play, 2 pause, 4 seek, 8 rate. +watch_control = 15 +# The skew window the clock states, in milliseconds: a whole number of seconds. +watch_window_ms = 5000 [rate] # Grants per client address: this many at once, then one more every this many seconds. diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/README.md b/joule-code/joule-code-rs/crates/joule-moq-web/README.md index 87ddafdbf..7869c685e 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/README.md +++ b/joule-code/joule-code-rs/crates/joule-moq-web/README.md @@ -50,6 +50,7 @@ does not have, and one implementation keeps the page's verdicts the relay's. | Subscribe | Per participant: its events track, its catalog, then each media track's receipts track (no delivery timeout) and the media track, audio at a higher subscriber priority than video. Each receipts-track object is admitted to the track's chain under the participant's key; each object is verified against the receipt of its position before it is decoded; an object whose receipts arrived and which did not is accounted for by inclusion. A late joiner FETCHes every earlier group of each track and its receipts track from group 0. | | Compose | The room's lifecycle (the clock's `join`, `publish`, `leave` events) replayed by `wai-live-web` gives the participant set; the `WCD1` descriptor and the set give the tiles, drawn on a canvas, re-laid out on each lifecycle event; the voices are mixed by the integer mixer, in blocks of 20 ms, into an AudioWorklet that plays them. | | Events | Every record verified (signature, chain, the grant's policy, through the room verifier); `caption` events shown with their origin (human, machine, machine-reviewed), the other kinds as a timeline. | +| Watching together | When the service's room has a co-watch policy (`GET /room`'s `watch`, WAI `extensions/co-watch.md`), the page fetches the room's source and checks its bytes by the content hash the policy names, estimates the room clock against the service's, and enters the room's co-watch log by a proof of its key over the service's challenge for the request it makes, before it subscribes to the clock (`web/room/cowatch.js`). It follows the log, checks each control as §5 has it before it applies it at its instant, keeps the source at the controlled position by the catch-up rule (§9), signs a presentation statement twice a slot and posts it, and shows its own offset and the verdicts of the clock's last skew statements beside shared controls (play, pause, a seek, a rate). Its events in such a room are its co-watch statements alone. | | End-to-end encryption | When the service's room has a confidentiality record (`GET /room`'s `e2ee`), the page says so before anyone enters, offers no watching and no seeking back, checks the record against the descriptor (its room, authority and recording mode), and loads `joule_moq_web_e2ee`. It leaves a KeyPackage with the service before it publishes, then reads the room's log (`web/room/e2ee.js`): each lifecycle record checked as the clock's, each MLS message checked and applied by the wasm member; it creates the group or commits when the room calls on it, and applies what it made only when the log returns it. Each encoded frame is sealed under the page's epoch before its receipt is signed over the sealed bytes; nothing is sent before the page holds an epoch. Each object received is verified against its receipt, then opened through the receiving checks, and only then decoded; one sealed in an epoch the page has not reached waits, and one that does not open is counted with its reason. The page shows its epoch and the members of the group. Every key is in the wasm member's memory and nowhere else. | ### What a browser needs @@ -78,6 +79,10 @@ closed. Delivery timeouts still apply at the relay, before a write. refusal an object can meet. - `node --test web/moq/capsule.test.mjs web/moq/media.test.mjs`: the binding's capsules against the bytes the relay's README states, and the payload framings. +- `node --test web/room/cowatch.test.mjs`: the page's co-watch module (`web/room/cowatch.js`, + WAI `extensions/co-watch.md`) against `wai/live-conformance/cowatch/`: every catch-up case + its correction, each accepted room's controlled position, and its controls and presentation + statements written and signed byte for byte. - `node --test web/ads/presentation.test.mjs`: the reference producer of WAI ad-presentation claims (`web/ads/presentation.js`, WAI `extensions/ad-presentation.md` §10): observation sequences recorded into spans, and claims written and signed from them, byte for byte as @@ -97,6 +102,7 @@ closed. Delivery timeouts still apply at the relay, before a write. | `goaway` | the relay is stopped with GOAWAY naming a second relay; every page moves, media is verified again there, and the first relay closes no session at its timeout | | `service` | a room service keeps the room, as in production: the relay (WebSocket only, its door holding each publisher to its own key, trusting the service's authority) and the service behind a same-origin proxy; pages enter from their buttons with keys of their own. Two publish and see each other, every object verifies, the layout equals the host's, a machine caption and a typed human caption show their labels, the clock (not a page) authors the lifecycle, a late joiner gets earlier groups by FETCH, a participant seeks back eight seconds into the other's tracks from the relay's DVR window (the relay keeps one and a cache far smaller than the span; the dvr scenario's checks: the control enables, the window's video plays in its own view from its first key frame at the pace it was captured, every object verifies, nothing is unknown, the page returns to live and live video goes on decoding, the relay served it from its window), a viewer watches, a grant with no proof or with a proof by another key is refused the session, a publisher past the room's places is told it is full, and a leave is recorded | | `e2ee` | an end-to-end encrypted room kept by a room service (`e2ee = true`), the relay keeping a DVR window: the page says so before anyone enters; two publishers key through the service's log (a GroupInfo, a commit, a Welcome), media flows both ways, every object verified against its receipt over the sealed bytes, opened, then decoded; the page shows its epoch and roster; a viewer, outside the group, receives the bytes exactly as sealed (no envelope, the AEAD's length) and opens nothing; every change a relay could make to an object is refused with the extension's reason (`bad_tag`, `key_id_missing`, `properties_malformed`, `object_id_too_large`, `key_id_unknown`, `sender_not_owner`, `replayed`) and the object opens once; an object changed on the wire is refused `bad_tag`; a late joiner's FETCH of earlier groups opens nothing sealed before its join (`epoch_not_joined`); a member that stops publishing and stays is removed by the next commit and opens nothing of the later epoch it still receives (`removed_before_epoch`), and an object it sealed before is refused `sender_removed`; the relay's DVR store keeps nothing of the room | + | `cowatch` | a watch room (WAI co-watch) kept by a room service (`watch_source`, a two-minute tone), behind the same-origin proxy: three viewers, each page fetching the source and checking it by its content hash and entering the co-watch log by a proof of its key; one plays, one pauses, one seeks, each control applied by every page at its instant; a viewer joins late and is brought to the room's position; in the windows after it, the clock's skew statements state every viewer and pair in sync within the 250 ms bound, as each page shows; no record or event is refused; and the room read back from the service verifies by `co_watch_verify.py`, every skew statement recomputed | With `--base ` the `service` scenario runs against a deployment instead: nothing is started, and the page at `/room/` is driven the same way (its production test). Its -- 2.54.0 (Apple Git-157) From 15561bbdda675e644d30e374156a2ad2ebd14cdb Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 03:54:58 -0400 Subject: [PATCH 09/16] =?UTF-8?q?co-watch:=20reflow=20two=20paragraphs=20o?= =?UTF-8?q?f=20=C2=A78?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- wai/extensions/co-watch.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/wai/extensions/co-watch.md b/wai/extensions/co-watch.md index cff6e1fc6..dcd7234e3 100644 --- a/wai/extensions/co-watch.md +++ b/wai/extensions/co-watch.md @@ -389,9 +389,8 @@ much (§14). A **window** is a stretch of the room clock, from `from` up to, but not including, `to`, over which one policy is in effect and whose length is a whole number of that policy's slots, from 1 -to 1000. Its -**slots** are `from` + *j* × *P* to `from` + (*j* + 1) × *P*, *j* from 0, with *P* the -policy's `period_ms` × 1000. A room clock that states windows regularly states them +to 1000. Its **slots** are `from` + *j* × *P* to `from` + (*j* + 1) × *P*, *j* from 0, with *P* +the policy's `period_ms` × 1000. A room clock that states windows regularly states them `window_ms` long, starting at multiples of `window_ms` × 1000; §8.4 checks any window a statement names. @@ -413,11 +412,11 @@ within the slot, the first in the merged order. A statement the clock had not re made its statement, a later `seq`, is not a sample of that statement, whenever it arrived. A sample's **error** is its `position` less the controlled position at its `at` (§6), a signed -number of microseconds. A sample is **settling** when its `at` is within `settle_ms` × 1000 µs (of the -policy in effect at its `at`) after a `join` of the viewer, the `at` of an accepted control, or a source's start: at or after -that instant and before it plus `settle_ms` × 1000. A settling sample fills -its slot, and is not **counted**: a viewer seeking to the room on its join, or every viewer -applying a control, takes a moment that the bound is not about. +number of microseconds. A sample is **settling** when its `at` is within `settle_ms` × 1000 µs +(of the policy in effect at its `at`) after a `join` of the viewer, the `at` of an accepted +control, or a source's start: at or after that instant and before it plus `settle_ms` × 1000. A +settling sample fills its slot, and is not **counted**: a viewer seeking to the room on its +join, or every viewer applying a control, takes a moment that the bound is not about. ### 8.4 The skew statement -- 2.54.0 (Apple Git-157) From 984d95b273b42b892507f20d3bbc8917e8c79cb3 Mon Sep 17 00:00:00 2001 From: Transaction Science Date: Thu, 22 Oct 2026 06:50:13 -0400 Subject: [PATCH 10/16] room page: close the co-performance section, and test the page's markup Train B's merge of #424 (co-performance in the room) with #413 (the browser sink, 173981739) left `
    ` without its `
    `: the page opened five sections and closed four. The parser then nested the binding table (`#binding-debug`) and the Log inside the hidden `#co`, so in a room without co-performance neither ever showed. - index.html: the `
    ` after the `#co-lead` controls. - web/room/markup.test.mjs (run by e2e/run.sh): every element the page opens is closed in order; the Log, the binding table and the co-watch section are not inside `#co`; each mode's controls are inside its own section. - e2e: in the service scenario (a room without `[co]`), `#log`, `#binding-debug` and `#cowatch` are not descendants of `#co`, `#co` is hidden and the Log shows; in the cowatch scenario, the co-watch section and the Log show outside `#co`. Co-Authored-By: Claude Opus 5.5 --- .../crates/joule-moq-web/README.md | 3 + .../crates/joule-moq-web/e2e/room.e2e.mjs | 16 ++++++ .../crates/joule-moq-web/e2e/run.sh | 2 +- .../crates/joule-moq-web/web/room/index.html | 1 + .../joule-moq-web/web/room/markup.test.mjs | 57 +++++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 joule-code/joule-code-rs/crates/joule-moq-web/web/room/markup.test.mjs diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/README.md b/joule-code/joule-code-rs/crates/joule-moq-web/README.md index 176210118..656b934b6 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/README.md +++ b/joule-code/joule-code-rs/crates/joule-moq-web/README.md @@ -96,6 +96,9 @@ closed. Delivery timeouts still apply at the relay, before a write. WAI `extensions/co-watch.md`) against `wai/live-conformance/cowatch/`: every catch-up case its correction, each accepted room's controlled position, and its controls and presentation statements written and signed byte for byte. +- `node --test web/room/markup.test.mjs`: the room page's markup, every element it opens closed + in order, and each mode's section holding its own controls: the Log, the binding table and + the co-watch section never inside the co-performance section, which a room without it hides. - `node --test web/ads/presentation.test.mjs`: the reference producer of WAI ad-presentation claims (`web/ads/presentation.js`, WAI `extensions/ad-presentation.md` §10): observation sequences recorded into spans, and claims written and signed from them, byte for byte as diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs index d99af525f..9610f9ff0 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/room.e2e.mjs @@ -471,6 +471,18 @@ async function scenarioGoaway(run) { // --------------------------------------------------------------------------------- service +// Where the page's sections are, as the browser parsed them: the Log, the binding table and the +// co-watch section are never inside the co-performance section, which a room without +// co-performance hides; and the Log shows. +async function markup(p) { + return p.evaluate(() => { + const co = document.getElementById("co"); + const inside = (id) => { const e = document.getElementById(id); return !!(co && e && co.contains(e)); }; + const shows = (id) => { const e = document.getElementById(id); return !!e && (e.checkVisibility ? e.checkVisibility() : e.getClientRects().length > 0); }; + return { co_hidden: !!(co && co.hidden), in_co: ["log", "binding-debug", "cowatch"].filter(inside), log_shows: shows("log"), cowatch_shows: shows("cowatch") }; + }); +} + async function scenarioService(run) { const label = BASE ? "production" : "service"; const dir = path.join(OUT, `run${run}-${label}`); @@ -503,6 +515,8 @@ async function scenarioService(run) { }; try { const A = await enter("alice", "#join", {}, "publishing"); + const m = await markup(A.p); + check(`${label}: in a room without co-performance, the Log, the binding table and the co-watch section are not inside the co-performance section, and the Log shows`, m.co_hidden && m.in_co.length === 0 && m.log_shows, JSON.stringify(m)); const B = await enter("bob", "#join", {}, "publishing"); const [alice, bob] = [A.p, B.p]; check(`${label}: both participants are in one room`, A.room === B.room, `${A.room.slice(0, 16)} / ${B.room.slice(0, 16)}`); @@ -1558,6 +1572,8 @@ async function scenarioCowatch(run) { const BOUND_US = 250000; try { const A = await enter("ada"); + const m = await markup(A.p); + check(`${label}: the co-watch section shows, outside the co-performance section, and so does the Log`, m.co_hidden && m.in_co.length === 0 && m.cowatch_shows && m.log_shows, JSON.stringify(m)); const B = await enter("ben"); check(`${label}: each page fetched the source and checked it by the content hash the room's policy names`, A.s.cowatch.verified_source && B.s.cowatch.verified_source, `${wav.bytes} bytes, ${wav.duration_ms} ms`); check(`${label}: each page entered the room's co-watch log by a proof of its key, and its clock is estimated against the room's`, A.s.cowatch.joined > 0 && B.s.cowatch.joined > 0, `joined at ${A.s.cowatch.joined} and ${B.s.cowatch.joined} µs of room clock; offsets ${A.s.cowatch.offset_us} and ${B.s.cowatch.offset_us} µs`); diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh index fb2ff98da..ee5df45a6 100755 --- a/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh +++ b/joule-code/joule-code-rs/crates/joule-moq-web/e2e/run.sh @@ -69,7 +69,7 @@ fi BROWSER_BIN=${BROWSER_BIN:-} step "unit tests of the page's modules" -node --test "$CRATE/web/moq/capsule.test.mjs" "$CRATE/web/moq/media.test.mjs" "$CRATE/web/ads/presentation.test.mjs" "$CRATE/web/room/privacy-pass.test.mjs" "$CRATE/web/room/binding.test.mjs" "$CRATE/web/room/cowatch.test.mjs" +node --test "$CRATE/web/moq/capsule.test.mjs" "$CRATE/web/moq/media.test.mjs" "$CRATE/web/ads/presentation.test.mjs" "$CRATE/web/room/privacy-pass.test.mjs" "$CRATE/web/room/binding.test.mjs" "$CRATE/web/room/cowatch.test.mjs" "$CRATE/web/room/markup.test.mjs" step "end-to-end" browser=() diff --git a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html index b7a1fd78e..07826ca7e 100644 --- a/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html +++ b/joule-code/joule-code-rs/crates/joule-moq-web/web/room/index.html @@ -134,6 +134,7 @@ +