diff --git a/README.md b/README.md index 9fb7d93..d7c3b6e 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,14 @@ Formally verified implementation of the ARTIQ RTIO core in nMigen +## File Synopsis + +- `LICENSE`: License terms (LGPLv3+) for this project +- `README.md`: this document +- `shell.nix`: Nix file for setting up the environment for this project +- `rtio`: RTIO core in nMigen +- `traces`: History of traces for debugging + ## Progress - Devise a suitable migration strategy for `artiq.gateware.rtio` from Migen to nMigen diff --git a/rtio/sed/output_network.py b/rtio/sed/output_network.py index 0f03e97..ff33c20 100644 --- a/rtio/sed/output_network.py +++ b/rtio/sed/output_network.py @@ -119,18 +119,9 @@ class OutputNetwork(Elaboratable): f_past_valid = Signal() m.d.sync += f_past_valid.eq(1) - # Skip assertions for the first 10 time steps - counter = Signal(4) - m.d.sync += counter.eq(counter + 1) - with m.If(counter >= 10): - m.d.sync += counter.eq(counter) - f_past10_valid = Signal() - m.d.comb += f_past10_valid.eq(counter >= 10) - # Valid nodes always come first in outputs - with m.If(f_past10_valid): - for i in range(lane_count - 1): - m.d.comb += Assert(self.output[i].valid | ~self.output[i + 1].valid) # TODO: Figure out why this is failing + for i in range(lane_count - 1): + m.d.comb += Assert(self.output[i].valid | ~self.output[i + 1].valid) # TODO: Figure out why this is failing def elaborate(self, platform): return self.m diff --git a/traces/0/NOTES.md b/traces/0/NOTES.md new file mode 100644 index 0000000..584382e --- /dev/null +++ b/traces/0/NOTES.md @@ -0,0 +1,92 @@ +# Dissecting the failing trace + +N.B. The value of a node `n` is given by `Cat(n.payload.channel, ~n.valid)` + +## Cycle \#0 (MATCH) + +Events: N/A + +Values: + +- node0 value: `0010` + - node0 valid: `1` + - node0 channel: `010` + - node0 sequence: `00` +- node1 value: `0000` + - node1 valid: `1` + - node1 channel: `000` + - node1 sequence: `00` +- node2 value: `0001` + - node2 valid: `1` + - node2 channel: `001` + - node2 sequence: `11` +- node3 value: `0000` + - node3 valid: `1` + - node3 channel: `000` + - node3 sequence: `01` + +To compare: + +- node0 and node1 +- node2 and node3 + +## Cycle \#1 (MATCH) + +Events: N/A + +Values: + +- node0 value: `0000` + - node0 valid: `1` + - node0 channel: `000` + - node0 sequence: `00` +- node1 value: `0010` + - node1 valid: `1` + - node1 channel: `010` + - node1 sequence: `00` +- node2 value: `0000` + - node2 valid: `1` + - node2 channel: `000` + - node2 sequence: `01` +- node3 value: `0001` + - node3 valid: `1` + - node3 channel: `001` + - node3 sequence: `11` + +To compare: + +- node0 and node2 +- node1 and node3 + +## Cycle \#2 (NOMATCH - see trace for diff) + +Events: + +- A replacement occurred when comparing node0 and node2 + +Values: + +- node0 value: `0000` + - node0 valid: `1` + - node0 channel: `000` + - node0 sequence: `01` +- node1 value: `0001` + - node1 valid: `1` + - node1 channel: `001` + - node1 sequence: `11` +- node2 value: `1000` + - node2 valid: `0` + - node2 channel: `000` + - node2 sequence: `00` +- node3 value: `0010` + - node3 valid: `1` + - node3 channel: `010` + - node3 sequence: `00` + +To compare: + +- node1 and node2 + +# Cycle \#3 + +TODO: fill this in after figuring out why my prediction for Cycle \#2 fails to match generated trace diff --git a/traces/0/trace.vcd b/traces/0/trace.vcd new file mode 100644 index 0000000..2754add --- /dev/null +++ b/traces/0/trace.vcd @@ -0,0 +1,786 @@ +$version Generated by Yosys-SMTBMC $end +$timescale 1ns $end +$var integer 32 t smt_step $end +$var event 1 ! smt_clock $end +$scope module top $end +$var wire 1 n0 clk $end +$var wire 1 n1 f_past_valid $end +$var wire 1 n2 nondata_difference $end +$var wire 1 n3 nondata_difference$127 $end +$var wire 1 n4 nondata_replace_occured $end +$var wire 1 n5 nondata_replace_occured$22 $end +$var wire 1 n6 nondata_replace_occured$40 $end +$var wire 1 n7 nondata_replace_occured$58 $end +$var wire 3 n8 payload__channel $end +$var wire 3 n9 payload__channel$28 $end +$var wire 3 n10 payload__channel$46 $end +$var wire 3 n11 payload__channel$64 $end +$var wire 32 n12 payload__data $end +$var wire 32 n13 payload__data$25 $end +$var wire 32 n14 payload__data$43 $end +$var wire 32 n15 payload__data$61 $end +$var wire 1 n16 rec__nondata_replace_occured $end +$var wire 1 n17 rec__nondata_replace_occured$133 $end +$var wire 1 n18 rec__nondata_replace_occured$133$next $end +$var wire 1 n19 rec__nondata_replace_occured$165 $end +$var wire 1 n20 rec__nondata_replace_occured$165$next $end +$var wire 1 n21 rec__nondata_replace_occured$200 $end +$var wire 1 n22 rec__nondata_replace_occured$232 $end +$var wire 1 n23 rec__nondata_replace_occured$232$next $end +$var wire 1 n24 rec__nondata_replace_occured$267 $end +$var wire 1 n25 rec__nondata_replace_occured$299 $end +$var wire 1 n26 rec__nondata_replace_occured$334 $end +$var wire 1 n27 rec__nondata_replace_occured$366 $end +$var wire 1 n28 rec__nondata_replace_occured$398 $end +$var wire 1 n29 rec__nondata_replace_occured$398$next $end +$var wire 1 n30 rec__nondata_replace_occured$404 $end +$var wire 1 n31 rec__nondata_replace_occured$404$next $end +$var wire 1 n32 rec__nondata_replace_occured$98 $end +$var wire 1 n33 rec__nondata_replace_occured$98$next $end +$var wire 1 n34 rec__nondata_replace_occured$next $end +$var wire 3 n35 rec__payload__channel $end +$var wire 3 n36 rec__payload__channel$100 $end +$var wire 3 n37 rec__payload__channel$100$next $end +$var wire 3 n38 rec__payload__channel$135 $end +$var wire 3 n39 rec__payload__channel$135$next $end +$var wire 3 n40 rec__payload__channel$167 $end +$var wire 3 n41 rec__payload__channel$167$next $end +$var wire 3 n42 rec__payload__channel$202 $end +$var wire 3 n43 rec__payload__channel$234 $end +$var wire 3 n44 rec__payload__channel$234$next $end +$var wire 3 n45 rec__payload__channel$269 $end +$var wire 3 n46 rec__payload__channel$269$next $end +$var wire 3 n47 rec__payload__channel$301 $end +$var wire 3 n48 rec__payload__channel$336 $end +$var wire 3 n49 rec__payload__channel$368 $end +$var wire 3 n50 rec__payload__channel$400 $end +$var wire 3 n51 rec__payload__channel$400$next $end +$var wire 3 n52 rec__payload__channel$406 $end +$var wire 3 n53 rec__payload__channel$406$next $end +$var wire 3 n54 rec__payload__channel$next $end +$var wire 32 n55 rec__payload__data $end +$var wire 32 n56 rec__payload__data$134 $end +$var wire 32 n57 rec__payload__data$134$next $end +$var wire 32 n58 rec__payload__data$166 $end +$var wire 32 n59 rec__payload__data$166$next $end +$var wire 32 n60 rec__payload__data$201 $end +$var wire 32 n61 rec__payload__data$233 $end +$var wire 32 n62 rec__payload__data$233$next $end +$var wire 32 n63 rec__payload__data$268 $end +$var wire 32 n64 rec__payload__data$268$next $end +$var wire 32 n65 rec__payload__data$300 $end +$var wire 32 n66 rec__payload__data$335 $end +$var wire 32 n67 rec__payload__data$367 $end +$var wire 32 n68 rec__payload__data$399 $end +$var wire 32 n69 rec__payload__data$399$next $end +$var wire 32 n70 rec__payload__data$405 $end +$var wire 32 n71 rec__payload__data$405$next $end +$var wire 32 n72 rec__payload__data$99 $end +$var wire 32 n73 rec__payload__data$99$next $end +$var wire 32 n74 rec__payload__data$next $end +$var wire 1 n75 rec__replace_occured $end +$var wire 1 n76 rec__replace_occured$132 $end +$var wire 1 n77 rec__replace_occured$132$next $end +$var wire 1 n78 rec__replace_occured$164 $end +$var wire 1 n79 rec__replace_occured$164$next $end +$var wire 1 n80 rec__replace_occured$199 $end +$var wire 1 n81 rec__replace_occured$231 $end +$var wire 1 n82 rec__replace_occured$231$next $end +$var wire 1 n83 rec__replace_occured$266 $end +$var wire 1 n84 rec__replace_occured$298 $end +$var wire 1 n85 rec__replace_occured$333 $end +$var wire 1 n86 rec__replace_occured$365 $end +$var wire 1 n87 rec__replace_occured$397 $end +$var wire 1 n88 rec__replace_occured$397$next $end +$var wire 1 n89 rec__replace_occured$403 $end +$var wire 1 n90 rec__replace_occured$403$next $end +$var wire 1 n91 rec__replace_occured$97 $end +$var wire 1 n92 rec__replace_occured$97$next $end +$var wire 1 n93 rec__replace_occured$next $end +$var wire 2 n94 rec__seqn $end +$var wire 2 n95 rec__seqn$131 $end +$var wire 2 n96 rec__seqn$131$next $end +$var wire 2 n97 rec__seqn$163 $end +$var wire 2 n98 rec__seqn$163$next $end +$var wire 2 n99 rec__seqn$198 $end +$var wire 2 n100 rec__seqn$230 $end +$var wire 2 n101 rec__seqn$230$next $end +$var wire 2 n102 rec__seqn$265 $end +$var wire 2 n103 rec__seqn$265$next $end +$var wire 2 n104 rec__seqn$297 $end +$var wire 2 n105 rec__seqn$332 $end +$var wire 2 n106 rec__seqn$364 $end +$var wire 2 n107 rec__seqn$396 $end +$var wire 2 n108 rec__seqn$396$next $end +$var wire 2 n109 rec__seqn$402 $end +$var wire 2 n110 rec__seqn$402$next $end +$var wire 2 n111 rec__seqn$96 $end +$var wire 2 n112 rec__seqn$96$next $end +$var wire 2 n113 rec__seqn$next $end +$var wire 1 n114 rec__valid $end +$var wire 1 n115 rec__valid$130 $end +$var wire 1 n116 rec__valid$130$next $end +$var wire 1 n117 rec__valid$162 $end +$var wire 1 n118 rec__valid$162$next $end +$var wire 1 n119 rec__valid$197 $end +$var wire 1 n120 rec__valid$197$next $end +$var wire 1 n121 rec__valid$229 $end +$var wire 1 n122 rec__valid$229$next $end +$var wire 1 n123 rec__valid$264 $end +$var wire 1 n124 rec__valid$264$next $end +$var wire 1 n125 rec__valid$296 $end +$var wire 1 n126 rec__valid$296$next $end +$var wire 1 n127 rec__valid$331 $end +$var wire 1 n128 rec__valid$331$next $end +$var wire 1 n129 rec__valid$363 $end +$var wire 1 n130 rec__valid$363$next $end +$var wire 1 n131 rec__valid$395 $end +$var wire 1 n132 rec__valid$395$next $end +$var wire 1 n133 rec__valid$401 $end +$var wire 1 n134 rec__valid$401$next $end +$var wire 1 n135 rec__valid$95 $end +$var wire 1 n136 rec__valid$95$next $end +$var wire 1 n137 rec__valid$next $end +$var wire 1 n138 replace_occured $end +$var wire 1 n139 replace_occured$19 $end +$var wire 1 n140 replace_occured$37 $end +$var wire 1 n141 replace_occured$55 $end +$var wire 1 n142 rst $end +$var wire 2 n143 seqn $end +$var wire 2 n144 seqn$16 $end +$var wire 2 n145 seqn$34 $end +$var wire 2 n146 seqn$52 $end +$var wire 1 n147 valid $end +$var wire 1 n148 valid$13 $end +$var wire 1 n149 valid$31 $end +$var wire 1 n150 valid$49 $end +$upscope $end +$enddefinitions $end +#0 +1! +b00000000000000000000000000000000 t +b1 n0 +b0 n1 +b1 n2 +b1 n3 +b0 n4 +b0 n5 +b0 n6 +b0 n7 +b010 n8 +b000 n9 +b001 n10 +b000 n11 +b00000000000000000000000000000000 n12 +b00000000000000000000000000000000 n13 +b00000000000000000000000000000000 n14 +b00000000000000000000000000000000 n15 +b0 n16 +b0 n17 +b0 n18 +b0 n19 +b0 n20 +b0 n21 +b0 n22 +b0 n23 +b0 n24 +b0 n25 +b0 n26 +b0 n27 +b0 n28 +b0 n29 +b0 n30 +b0 n31 +b0 n32 +b0 n33 +b0 n34 +b000 n35 +b000 n36 +b010 n37 +b000 n38 +b000 n39 +b000 n40 +b001 n41 +b000 n42 +b000 n43 +b000 n44 +b000 n45 +b000 n46 +b000 n47 +b000 n48 +b000 n49 +b000 n50 +b000 n51 +b000 n52 +b000 n53 +b000 n54 +b00000000000000000000000000000000 n55 +b00000000000000000000000000000000 n56 +b00000000000000000000000000000000 n57 +b00000000000000000000000000000000 n58 +b00000000000000000000000000000000 n59 +b00000000000000000000000000000000 n60 +b00000000000000000000000000000000 n61 +b00000000000000000000000000000000 n62 +b00000000000000000000000000000000 n63 +b00000000000000000000000000000000 n64 +b00000000000000000000000000000000 n65 +b00000000000000000000000000000000 n66 +b00000000000000000000000000000000 n67 +b00000000000000000000000000000000 n68 +b00000000000000000000000000000000 n69 +b00000000000000000000000000000000 n70 +b00000000000000000000000000000000 n71 +b00000000000000000000000000000000 n72 +b00000000000000000000000000000000 n73 +b00000000000000000000000000000000 n74 +b0 n75 +b0 n76 +b0 n77 +b0 n78 +b0 n79 +b0 n80 +b0 n81 +b0 n82 +b0 n83 +b0 n84 +b0 n85 +b0 n86 +b0 n87 +b0 n88 +b0 n89 +b0 n90 +b0 n91 +b0 n92 +b0 n93 +b00 n94 +b00 n95 +b01 n96 +b00 n97 +b11 n98 +b00 n99 +b00 n100 +b00 n101 +b00 n102 +b00 n103 +b00 n104 +b00 n105 +b00 n106 +b00 n107 +b00 n108 +b00 n109 +b00 n110 +b00 n111 +b00 n112 +b00 n113 +b0 n114 +b0 n115 +b1 n116 +b0 n117 +b1 n118 +b0 n119 +b0 n120 +b0 n121 +b0 n122 +b0 n123 +b0 n124 +b0 n125 +b0 n126 +b0 n127 +b0 n128 +b0 n129 +b0 n130 +b0 n131 +b0 n132 +b0 n133 +b0 n134 +b0 n135 +b1 n136 +b1 n137 +b0 n138 +b0 n139 +b0 n140 +b0 n141 +b0 n142 +b00 n143 +b00 n144 +b11 n145 +b01 n146 +b1 n147 +b1 n148 +b1 n149 +b1 n150 +#5 +b0 n0 +#10 +1! +b00000000000000000000000000000001 t +b1 n0 +b0 n1 +b0 n2 +b0 n3 +b0 n4 +b0 n5 +b0 n6 +b0 n7 +b000 n8 +b000 n9 +b000 n10 +b000 n11 +b00000000000000000000000000000000 n12 +b00000000000000000000000000000000 n13 +b00000000000000000000000000000000 n14 +b00000000000000000000000000000000 n15 +b0 n16 +b0 n17 +b0 n18 +b0 n19 +b0 n20 +b0 n21 +b0 n22 +b0 n23 +b0 n24 +b0 n25 +b0 n26 +b0 n27 +b0 n28 +b0 n29 +b0 n30 +b0 n31 +b0 n32 +b0 n33 +b0 n34 +b000 n35 +b010 n36 +b000 n37 +b000 n38 +b000 n39 +b001 n40 +b000 n41 +b000 n42 +b000 n43 +b000 n44 +b000 n45 +b001 n46 +b000 n47 +b000 n48 +b000 n49 +b000 n50 +b000 n51 +b000 n52 +b000 n53 +b000 n54 +b00000000000000000000000000000000 n55 +b00000000000000000000000000000000 n56 +b00000000000000000000000000000000 n57 +b00000000000000000000000000000000 n58 +b00000000000000000000000000000000 n59 +b00000000000000000000000000000000 n60 +b00000000000000000000000000000000 n61 +b00000000000000000000000000000000 n62 +b00000000000000000000000000000000 n63 +b00000000000000000000000000000000 n64 +b00000000000000000000000000000000 n65 +b00000000000000000000000000000000 n66 +b00000000000000000000000000000000 n67 +b00000000000000000000000000000000 n68 +b00000000000000000000000000000000 n69 +b00000000000000000000000000000000 n70 +b00000000000000000000000000000000 n71 +b00000000000000000000000000000000 n72 +b00000000000000000000000000000000 n73 +b00000000000000000000000000000000 n74 +b0 n75 +b0 n76 +b1 n77 +b0 n78 +b0 n79 +b0 n80 +b0 n81 +b0 n82 +b0 n83 +b0 n84 +b0 n85 +b0 n86 +b0 n87 +b0 n88 +b0 n89 +b0 n90 +b0 n91 +b0 n92 +b1 n93 +b00 n94 +b01 n95 +b00 n96 +b11 n97 +b00 n98 +b00 n99 +b00 n100 +b00 n101 +b00 n102 +b11 n103 +b00 n104 +b00 n105 +b00 n106 +b00 n107 +b00 n108 +b00 n109 +b00 n110 +b00 n111 +b00 n112 +b00 n113 +b1 n114 +b1 n115 +b0 n116 +b1 n117 +b0 n118 +b0 n119 +b1 n120 +b0 n121 +b0 n122 +b0 n123 +b1 n124 +b0 n125 +b1 n126 +b0 n127 +b0 n128 +b0 n129 +b0 n130 +b0 n131 +b0 n132 +b0 n133 +b0 n134 +b1 n135 +b0 n136 +b0 n137 +b0 n138 +b0 n139 +b0 n140 +b0 n141 +b0 n142 +b00 n143 +b00 n144 +b00 n145 +b00 n146 +b0 n147 +b0 n148 +b0 n149 +b0 n150 +#15 +b0 n0 +#20 +1! +b00000000000000000000000000000010 t +b1 n0 +b0 n1 +b0 n2 +b0 n3 +b0 n4 +b0 n5 +b0 n6 +b0 n7 +b000 n8 +b000 n9 +b000 n10 +b000 n11 +b00000000000000000000000000000000 n12 +b00000000000000000000000000000000 n13 +b00000000000000000000000000000000 n14 +b00000000000000000000000000000000 n15 +b0 n16 +b0 n17 +b0 n18 +b0 n19 +b0 n20 +b0 n21 +b0 n22 +b0 n23 +b0 n24 +b0 n25 +b0 n26 +b0 n27 +b0 n28 +b0 n29 +b0 n30 +b0 n31 +b0 n32 +b0 n33 +b0 n34 +b000 n35 +b000 n36 +b000 n37 +b000 n38 +b000 n39 +b000 n40 +b000 n41 +b000 n42 +b000 n43 +b000 n44 +b001 n45 +b000 n46 +b000 n47 +b000 n48 +b000 n49 +b000 n50 +b000 n51 +b000 n52 +b000 n53 +b000 n54 +b00000000000000000000000000000000 n55 +b00000000000000000000000000000000 n56 +b00000000000000000000000000000000 n57 +b00000000000000000000000000000000 n58 +b00000000000000000000000000000000 n59 +b00000000000000000000000000000000 n60 +b00000000000000000000000000000000 n61 +b00000000000000000000000000000000 n62 +b00000000000000000000000000000000 n63 +b00000000000000000000000000000000 n64 +b00000000000000000000000000000000 n65 +b00000000000000000000000000000000 n66 +b00000000000000000000000000000000 n67 +b00000000000000000000000000000000 n68 +b00000000000000000000000000000000 n69 +b00000000000000000000000000000000 n70 +b00000000000000000000000000000000 n71 +b00000000000000000000000000000000 n72 +b00000000000000000000000000000000 n73 +b00000000000000000000000000000000 n74 +b1 n75 +b1 n76 +b1 n77 +b0 n78 +b0 n79 +b0 n80 +b0 n81 +b1 n82 +b0 n83 +b0 n84 +b0 n85 +b0 n86 +b0 n87 +b0 n88 +b0 n89 +b0 n90 +b0 n91 +b0 n92 +b1 n93 +b00 n94 +b00 n95 +b00 n96 +b00 n97 +b00 n98 +b00 n99 +b00 n100 +b00 n101 +b11 n102 +b00 n103 +b00 n104 +b00 n105 +b00 n106 +b00 n107 +b00 n108 +b00 n109 +b00 n110 +b00 n111 +b00 n112 +b00 n113 +b0 n114 +b0 n115 +b0 n116 +b0 n117 +b0 n118 +b1 n119 +b0 n120 +b0 n121 +b0 n122 +b1 n123 +b0 n124 +b1 n125 +b0 n126 +b0 n127 +b1 n128 +b0 n129 +b0 n130 +b0 n131 +b1 n132 +b0 n133 +b1 n134 +b0 n135 +b0 n136 +b0 n137 +b0 n138 +b0 n139 +b0 n140 +b0 n141 +b0 n142 +b00 n143 +b00 n144 +b00 n145 +b00 n146 +b0 n147 +b0 n148 +b0 n149 +b0 n150 +#25 +b0 n0 +#30 +1! +b00000000000000000000000000000011 t +b1 n0 +b0 n1 +b0 n2 +b0 n3 +b0 n4 +b0 n5 +b0 n6 +b0 n7 +b000 n8 +b000 n9 +b000 n10 +b000 n11 +b00000000000000000000000000000000 n12 +b00000000000000000000000000000000 n13 +b00000000000000000000000000000000 n14 +b00000000000000000000000000000000 n15 +b0 n16 +b0 n17 +b0 n18 +b0 n19 +b0 n20 +b0 n21 +b0 n22 +b0 n23 +b0 n24 +b0 n25 +b0 n26 +b0 n27 +b0 n28 +b0 n29 +b0 n30 +b0 n31 +b0 n32 +b0 n33 +b0 n34 +b000 n35 +b000 n36 +b000 n37 +b000 n38 +b000 n39 +b000 n40 +b000 n41 +b000 n42 +b000 n43 +b000 n44 +b000 n45 +b000 n46 +b000 n47 +b000 n48 +b000 n49 +b000 n50 +b000 n51 +b000 n52 +b000 n53 +b000 n54 +b00000000000000000000000000000000 n55 +b00000000000000000000000000000000 n56 +b00000000000000000000000000000000 n57 +b00000000000000000000000000000000 n58 +b00000000000000000000000000000000 n59 +b00000000000000000000000000000000 n60 +b00000000000000000000000000000000 n61 +b00000000000000000000000000000000 n62 +b00000000000000000000000000000000 n63 +b00000000000000000000000000000000 n64 +b00000000000000000000000000000000 n65 +b00000000000000000000000000000000 n66 +b00000000000000000000000000000000 n67 +b00000000000000000000000000000000 n68 +b00000000000000000000000000000000 n69 +b00000000000000000000000000000000 n70 +b00000000000000000000000000000000 n71 +b00000000000000000000000000000000 n72 +b00000000000000000000000000000000 n73 +b00000000000000000000000000000000 n74 +b1 n75 +b1 n76 +b1 n77 +b0 n78 +b0 n79 +b0 n80 +b0 n81 +b1 n82 +b0 n83 +b0 n84 +b0 n85 +b0 n86 +b0 n87 +b0 n88 +b0 n89 +b0 n90 +b0 n91 +b0 n92 +b1 n93 +b00 n94 +b00 n95 +b00 n96 +b00 n97 +b00 n98 +b00 n99 +b00 n100 +b00 n101 +b00 n102 +b00 n103 +b00 n104 +b00 n105 +b00 n106 +b00 n107 +b00 n108 +b00 n109 +b00 n110 +b00 n111 +b00 n112 +b00 n113 +b0 n114 +b0 n115 +b0 n116 +b0 n117 +b0 n118 +b0 n119 +b0 n120 +b0 n121 +b0 n122 +b0 n123 +b0 n124 +b0 n125 +b0 n126 +b1 n127 +b0 n128 +b0 n129 +b0 n130 +b1 n131 +b0 n132 +b1 n133 +b0 n134 +b0 n135 +b0 n136 +b0 n137 +b0 n138 +b0 n139 +b0 n140 +b0 n141 +b0 n142 +b00 n143 +b00 n144 +b00 n145 +b00 n146 +b0 n147 +b0 n148 +b0 n149 +b0 n150 +#35 +b0 n0 +#40 +1! +b00000000000000000000000000000100 t +b1 n0