aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2010-10-08 22:18:57 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2010-10-08 22:18:57 +0000
commitb68e4b16fb0177bc72bc3fbf672f84cc758c4fae (patch)
tree9931cf016506cefc631aac3a358538bb0021486c
added .srt file object for decoding subtitles, by Maira Sala, IOhannes m. zmoelnig, and meHEADsvn2git-rootsvn2git-headexternals/srt
svn path=/trunk/externals/srt/; revision=14208
-rw-r--r--characterfilter.pd64
-rw-r--r--srtfile-help.pd67
-rw-r--r--srtfile.pd362
-rw-r--r--utf82codenumber.pd133
4 files changed, 626 insertions, 0 deletions
diff --git a/characterfilter.pd b/characterfilter.pd
new file mode 100644
index 0000000..0341a55
--- /dev/null
+++ b/characterfilter.pd
@@ -0,0 +1,64 @@
+#N canvas 0 0 450 300 10;
+#X obj 158 46 inlet string;
+#X obj 158 273 outlet string;
+#X obj 198 104 utf82codenumber;
+#N canvas 0 0 450 444 serialize 0;
+#X obj 124 232 list split 1;
+#X obj 124 149 until;
+#X obj 124 187 list append;
+#X obj 150 116 t b l;
+#X obj 254 232 bang;
+#X obj 152 76 t b l b;
+#X obj 152 362 outlet stream;
+#X obj 150 47 inlet list;
+#X obj 287 356 outlet start;
+#X obj 40 360 outlet done;
+#X connect 0 0 6 0;
+#X connect 0 1 2 1;
+#X connect 0 2 4 0;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 3 1 2 1;
+#X connect 4 0 1 1;
+#X connect 5 0 9 0;
+#X connect 5 1 3 0;
+#X connect 5 2 8 0;
+#X connect 7 0 5 0;
+#X restore 158 74 pd serialize;
+#N canvas 0 0 450 300 deserialize 0;
+#X obj 150 66 inlet stream;
+#X obj 282 65 inlet reset;
+#X obj 58 63 inlet done;
+#X obj 135 265 outlet list;
+#X obj 221 156 list prepend;
+#X obj 221 179 t l l;
+#X obj 140 202 list prepend;
+#X obj 267 124 t b b;
+#X obj 76 120 t b;
+#X connect 0 0 4 0;
+#X connect 1 0 7 0;
+#X connect 2 0 8 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 5 1 4 1;
+#X connect 6 0 3 0;
+#X connect 7 0 6 1;
+#X connect 7 1 4 1;
+#X connect 8 0 6 0;
+#X restore 158 245 pd deserialize;
+#X obj 198 126 moses 32;
+#X obj 198 149 select 10;
+#X msg 198 170 10;
+#X obj 198 196 t f;
+#X connect 0 0 3 0;
+#X connect 2 0 5 0;
+#X connect 3 0 4 0;
+#X connect 3 1 2 0;
+#X connect 3 2 4 2;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 5 1 8 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 4 1;
diff --git a/srtfile-help.pd b/srtfile-help.pd
new file mode 100644
index 0000000..3203422
--- /dev/null
+++ b/srtfile-help.pd
@@ -0,0 +1,67 @@
+#N canvas 137 70 690 471 10;
+#X obj 61 110 gemwin;
+#X msg 61 87 create \, 1;
+#X obj 311 326 gemhead;
+#X obj 311 346 text3d;
+#X obj 208 278 list prepend string;
+#X obj 208 298 list trim;
+#X floatatom 388 335 5 0 0 0 - - -;
+#X obj 175 88 srtfile;
+#X msg 281 57 bang;
+#X obj 190 136 delay;
+#X obj 217 190 list prepend;
+#X obj 190 161 t b b;
+#X msg 174 57 read test.srt;
+#X obj 387 267 loadbang;
+#X msg 388 306 5;
+#X msg 427 306 font ae_AlBattar.ttf;
+#X obj 388 287 t b b;
+#X msg 202 30 read /media/disk/subs.srt;
+#X obj 275 141 print bababa;
+#X obj 289 88 t b b;
+#X msg 348 237 string;
+#X obj 190 111 t f l;
+#X obj 229 136 -;
+#X obj 229 159 * -1;
+#X obj 243 236 f;
+#X obj 281 238 delay;
+#X obj 239 323 t a;
+#X obj 241 358 print;
+#X obj 285 209 print bababa1;
+#X obj 217 214 t a b;
+#X obj 209 258 characterfilter;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 4 0 5 0;
+#X connect 5 0 26 0;
+#X connect 6 0 3 1;
+#X connect 7 0 10 1;
+#X connect 7 0 18 0;
+#X connect 7 1 21 0;
+#X connect 8 0 19 0;
+#X connect 9 0 11 0;
+#X connect 10 0 28 0;
+#X connect 10 0 29 0;
+#X connect 11 0 7 0;
+#X connect 11 1 10 0;
+#X connect 12 0 7 0;
+#X connect 13 0 16 0;
+#X connect 14 0 6 0;
+#X connect 15 0 3 0;
+#X connect 16 0 14 0;
+#X connect 16 1 15 0;
+#X connect 17 0 7 0;
+#X connect 19 0 7 0;
+#X connect 19 1 20 0;
+#X connect 20 0 26 0;
+#X connect 21 0 9 0;
+#X connect 21 1 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 24 1;
+#X connect 24 0 25 0;
+#X connect 25 0 20 0;
+#X connect 26 0 27 0;
+#X connect 26 0 3 0;
+#X connect 29 0 30 0;
+#X connect 29 1 24 0;
+#X connect 30 0 4 0;
diff --git a/srtfile.pd b/srtfile.pd
new file mode 100644
index 0000000..8b76086
--- /dev/null
+++ b/srtfile.pd
@@ -0,0 +1,362 @@
+#N canvas 145 144 766 516 10;
+#X obj 126 18 inlet;
+#X text 173 8 open filename;
+#X text 177 23 bang;
+#X obj 45 430 outlet subtitle;
+#X obj 518 428 outlet done;
+#N canvas 231 15 793 487 linereader 0;
+#X obj 136 17 inlet;
+#X obj 159 452 outlet next line;
+#X msg 136 111 read \$1 \, rewind;
+#X obj 136 92 symbol;
+#X obj 159 357 list prepend;
+#X obj 246 334 t l l;
+#X obj 187 145 until;
+#X obj 136 266 t b b b;
+#X obj 136 221 route bang;
+#X obj 246 311 list prepend;
+#N canvas 642 75 450 300 EOL 0;
+#X obj 84 48 inlet;
+#X obj 165 129 select 10 13;
+#X text 157 51 CRLF = 13 10 (w32);
+#X msg 205 151 1;
+#X msg 245 172 0;
+#X obj 165 189 f;
+#X obj 165 217 select 1;
+#X obj 245 152 t f b;
+#X obj 60 244 outlet byte;
+#X obj 165 245 outlet EOL;
+#X obj 43 113 select 10 13;
+#X connect 0 0 10 0;
+#X connect 1 0 5 0;
+#X connect 1 1 3 0;
+#X connect 1 2 7 0;
+#X connect 3 0 5 1;
+#X connect 4 0 5 1;
+#X connect 5 0 6 0;
+#X connect 6 0 9 0;
+#X connect 7 0 8 0;
+#X connect 7 1 4 0;
+#X connect 10 0 9 0;
+#X connect 10 2 8 0;
+#X restore 246 244 pd EOL;
+#X obj 136 244 t b b;
+#X obj 137 47 route open bang bong;
+#X msg 219 81 bang;
+#X obj 316 283 t b b;
+#X obj 226 290 t b b;
+#X obj 430 445 outlet;
+#X obj 136 171 ./binfile;
+#X connect 0 0 12 0;
+#X connect 2 0 17 0;
+#X connect 3 0 2 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 1;
+#X connect 5 1 9 1;
+#X connect 6 0 17 0;
+#X connect 7 0 15 0;
+#X connect 7 1 4 0;
+#X connect 7 2 6 1;
+#X connect 8 0 11 0;
+#X connect 8 1 10 0;
+#X connect 9 0 5 0;
+#X connect 10 0 9 0;
+#X connect 10 1 14 0;
+#X connect 11 0 7 0;
+#X connect 11 1 16 0;
+#X connect 12 0 3 0;
+#X connect 12 1 6 0;
+#X connect 12 2 13 0;
+#X connect 13 0 17 0;
+#X connect 14 0 7 0;
+#X connect 15 0 4 1;
+#X connect 15 1 9 1;
+#X connect 17 0 8 0;
+#X connect 17 2 11 0;
+#X restore 148 153 pd linereader;
+#N canvas 626 26 639 408 lineid 0;
+#X obj 146 47 inlet;
+#X obj 124 318 outlet;
+#X obj 360 56 inlet reset;
+#X obj 146 168 route bang;
+#X obj 226 244 i;
+#X obj 261 246 + 1;
+#X msg 178 210 0;
+#X obj 146 190 t b b;
+#X obj 124 271 list prepend;
+#X obj 213 190 t b b;
+#X obj 124 293 list prepend 0;
+#X obj 360 94 t b;
+#X obj 265 318 outlet done;
+#X obj 146 97 t a a;
+#X connect 0 0 13 0;
+#X connect 2 0 11 0;
+#X connect 3 0 7 0;
+#X connect 3 1 9 0;
+#X connect 4 0 5 0;
+#X connect 4 0 10 1;
+#X connect 5 0 4 1;
+#X connect 6 0 4 1;
+#X connect 7 0 12 0;
+#X connect 7 1 6 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 1 4 0;
+#X connect 10 0 1 0;
+#X connect 11 0 6 0;
+#X connect 13 0 3 0;
+#X connect 13 1 8 1;
+#X restore 148 189 pd lineid;
+#X obj 208 125 until;
+#X obj 148 248 route 0 1;
+#X obj 208 210 t b b;
+#X obj 378 428 outlet ID;
+#N canvas 207 25 634 523 timestamp 0;
+#X obj 59 44 inlet bytes;
+#X obj 59 184 outlet from;
+#X obj 146 183 outlet to;
+#X obj 311 47 inlet reset;
+#X text 141 13 HH:MM:SS \, sss --> HH:MM:SS \, sss;
+#N canvas 523 25 450 526 getdelays 0;
+#X obj 53 138 unpack 0 0 0 0 0 0 0 0;
+#X obj 53 162 * 60;
+#X obj 53 184 +;
+#X obj 53 204 * 60;
+#X obj 53 225 +;
+#X obj 53 247 +;
+#X obj 140 162 * 60;
+#X obj 140 184 +;
+#X obj 140 204 * 60;
+#X obj 140 225 +;
+#X obj 140 247 +;
+#X obj 53 276 * 1000;
+#X obj 140 276 * 1000;
+#X obj 55 325 -;
+#X obj 53 299 t f f;
+#X obj 140 325 -;
+#X obj 55 356 outlet;
+#X obj 140 356 outlet;
+#X obj 53 104 inlet timestamps;
+#X obj 291 74 inlet set number;
+#X obj 291 148 t f;
+#X connect 0 0 1 0;
+#X connect 0 1 2 1;
+#X connect 0 2 4 1;
+#X connect 0 3 5 1;
+#X connect 0 4 6 0;
+#X connect 0 5 7 1;
+#X connect 0 6 9 1;
+#X connect 0 7 10 1;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 14 0;
+#X connect 12 0 15 0;
+#X connect 13 0 16 0;
+#X connect 14 0 13 1;
+#X connect 14 0 15 1;
+#X connect 14 1 13 0;
+#X connect 15 0 17 0;
+#X connect 18 0 0 0;
+#X connect 19 0 20 0;
+#X connect 20 0 13 1;
+#X connect 20 0 15 1;
+#X restore 59 150 pd getdelays;
+#N canvas 496 75 450 413 bytes2numbers 0;
+#X obj 95 23 inlet bytes;
+#X obj 95 278 outlet;
+#X obj 95 60 string2any;
+#X obj 95 82 list;
+#X msg 95 107 list \$1 \$3 \$5 \$7;
+#X obj 94 130 unpack s 0 s 0;
+#N canvas 0 0 450 475 fractional 0;
+#X obj 99 42 inlet;
+#X obj 99 411 outlet;
+#X text 151 43 123;
+#X text 155 416 0.123;
+#X obj 145 339 *;
+#X obj 168 171 log;
+#X obj 202 172 log 10;
+#X obj 168 193 /;
+#X msg 206 152 10;
+#X obj 168 214 i;
+#X obj 168 152 abs;
+#X obj 168 240 + 1;
+#X obj 168 313 pow;
+#X msg 168 285 10 \$1;
+#X obj 168 263 * -1;
+#X obj 145 126 t f f b;
+#X obj 99 84 route 0;
+#X msg 99 118 0;
+#X connect 0 0 16 0;
+#X connect 4 0 1 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 1;
+#X connect 7 0 9 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 5 0;
+#X connect 11 0 14 0;
+#X connect 12 0 4 1;
+#X connect 13 0 12 0;
+#X connect 14 0 13 0;
+#X connect 15 0 4 0;
+#X connect 15 1 10 0;
+#X connect 15 2 8 0;
+#X connect 16 0 17 0;
+#X connect 16 1 15 0;
+#X connect 17 0 1 0;
+#X restore 106 166 pd fractional;
+#X obj 95 211 pack 0 0 0 0;
+#N canvas 0 0 450 475 fractional 0;
+#X obj 99 42 inlet;
+#X obj 99 411 outlet;
+#X text 151 43 123;
+#X text 155 416 0.123;
+#X obj 99 299 *;
+#X obj 122 131 log;
+#X obj 99 85 t f f b;
+#X obj 156 132 log 10;
+#X obj 122 153 /;
+#X msg 160 112 10;
+#X obj 122 174 i;
+#X obj 122 112 abs;
+#X obj 122 200 + 1;
+#X obj 122 273 pow;
+#X msg 122 245 10 \$1;
+#X obj 122 223 * -1;
+#X connect 0 0 6 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 6 0 4 0;
+#X connect 6 1 11 0;
+#X connect 6 2 9 0;
+#X connect 7 0 8 1;
+#X connect 8 0 10 0;
+#X connect 9 0 7 0;
+#X connect 10 0 12 0;
+#X connect 11 0 5 0;
+#X connect 12 0 15 0;
+#X connect 13 0 4 1;
+#X connect 14 0 13 0;
+#X connect 15 0 14 0;
+#X restore 216 166 pd fractional;
+#X obj 205 211 pack 0 0 0 0;
+#X obj 95 249 list append;
+#X obj 95 190 symbol2list :;
+#X obj 205 190 symbol2list :;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 11 0;
+#X connect 5 1 6 0;
+#X connect 5 2 12 0;
+#X connect 5 3 8 0;
+#X connect 6 0 7 3;
+#X connect 7 0 10 0;
+#X connect 8 0 9 3;
+#X connect 9 0 10 1;
+#X connect 10 0 1 0;
+#X connect 11 0 7 0;
+#X connect 12 0 9 0;
+#X restore 59 110 pd bytes2numbers;
+#X connect 0 0 6 0;
+#X connect 3 0 5 1;
+#X connect 5 0 1 0;
+#X connect 5 1 2 0;
+#X connect 6 0 5 0;
+#X restore 178 381 pd timestamp;
+#X obj 208 308 list split 1;
+#N canvas 0 0 450 506 lines2multiline 0;
+#X obj 75 47 inlet singleline;
+#X obj 75 427 outlet multiline;
+#X obj 142 199 list append 10;
+#X text 254 197 <-- Gem's linebreak;
+#X obj 75 127 route bang;
+#X obj 142 259 list prepend;
+#X obj 142 280 t l l;
+#X obj 75 313 list prepend;
+#X obj 75 269 t b;
+#X obj 278 51 inlet delimiter;
+#X obj 75 98 t a a;
+#X obj 75 399 route bang;
+#X obj 75 345 t a b b a;
+#X connect 0 0 10 0;
+#X connect 2 0 5 0;
+#X connect 4 0 8 0;
+#X connect 4 1 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 1;
+#X connect 6 1 5 1;
+#X connect 7 0 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 2 1;
+#X connect 10 0 4 0;
+#X connect 11 1 1 0;
+#X connect 12 0 11 0;
+#X connect 12 1 7 1;
+#X connect 12 2 5 1;
+#X restore 248 334 pd lines2multiline;
+#X obj 178 429 outlet from to;
+#X obj 178 404 pack 0 0;
+#X msg 259 360 0;
+#X obj 126 45 route read bang;
+#X obj 126 67 symbol;
+#X msg 126 108 open \$1;
+#N canvas 565 53 450 300 checkopen 0;
+#X obj 58 29 inlet bang;
+#X obj 171 207 outlet bang;
+#X obj 58 83 symbol;
+#X obj 107 83 symbol;
+#X obj 58 102 select select;
+#X obj 58 142 print STR-error;
+#X obj 58 61 t b b;
+#X obj 171 143 t b;
+#X obj 285 32 inlet filename;
+#X msg 58 122 line requested without prior read!;
+#X connect 0 0 6 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 4 0 9 0;
+#X connect 4 1 7 0;
+#X connect 6 0 2 0;
+#X connect 6 1 3 0;
+#X connect 7 0 1 0;
+#X connect 8 0 2 1;
+#X connect 9 0 5 0;
+#X restore 208 99 pd checkopen;
+#X obj 126 88 t s b s;
+#X connect 0 0 17 0;
+#X connect 5 0 6 0;
+#X connect 5 1 4 0;
+#X connect 6 0 8 0;
+#X connect 6 1 9 0;
+#X connect 7 0 5 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 8 2 12 0;
+#X connect 9 0 13 0;
+#X connect 9 1 7 1;
+#X connect 11 0 15 0;
+#X connect 11 1 15 1;
+#X connect 12 1 13 0;
+#X connect 13 0 3 0;
+#X connect 15 0 14 0;
+#X connect 16 0 11 1;
+#X connect 17 0 18 0;
+#X connect 17 1 20 0;
+#X connect 18 0 21 0;
+#X connect 19 0 5 0;
+#X connect 20 0 7 0;
+#X connect 21 0 19 0;
+#X connect 21 1 6 1;
+#X connect 21 1 16 0;
+#X connect 21 2 20 1;
diff --git a/utf82codenumber.pd b/utf82codenumber.pd
new file mode 100644
index 0000000..5cd80b5
--- /dev/null
+++ b/utf82codenumber.pd
@@ -0,0 +1,133 @@
+#N canvas 375 22 649 526 10;
+#X obj 181 32 inlet byte;
+#X obj 181 476 outlet byte;
+#X text 259 108 aux;
+#X text 323 111 2byte;
+#X text 386 113 3byte;
+#X text 446 113 4byte;
+#X text 180 112 1byte;
+#X obj 181 129 & 127;
+#X obj 321 129 & 31;
+#X obj 251 129 & 63;
+#X obj 390 129 & 15;
+#X obj 450 129 & 7;
+#X obj 251 150 t f b;
+#X msg 207 175 1;
+#X obj 181 268 ==;
+#X text 220 284 expectedbytes;
+#X obj 181 226 i;
+#X obj 226 266 t f b;
+#X msg 268 266 0;
+#X obj 204 371 t l l;
+#X obj 181 310 select 1;
+#X obj 181 393 list prepend;
+#X msg 353 174 2;
+#X obj 181 198 t b f;
+#X obj 181 151 t f b;
+#X obj 321 150 t f b;
+#X obj 212 226 + 1;
+#X obj 390 153 t f b;
+#X msg 422 177 3;
+#X obj 450 151 t f b;
+#X msg 482 175 4;
+#X obj 181 416 t l l;
+#N canvas 327 0 461 427 shifter 0;
+#X obj 134 59 inlet;
+#X obj 134 387 outlet;
+#X obj 166 220 list split 1;
+#X obj 166 167 until;
+#X obj 166 195 list append;
+#X obj 266 220 bang;
+#X obj 166 246 +;
+#X obj 166 299 t f f;
+#X obj 166 144 t b l b;
+#X msg 215 265 0;
+#X obj 166 270 << 6;
+#X obj 166 321 >> 6;
+#X obj 134 359 f;
+#X obj 134 98 t b l;
+#X connect 0 0 13 0;
+#X connect 2 0 6 0;
+#X connect 2 1 4 1;
+#X connect 2 2 5 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
+#X connect 5 0 3 1;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 7 1 6 1;
+#X connect 8 0 3 0;
+#X connect 8 1 4 1;
+#X connect 8 2 9 0;
+#X connect 9 0 6 1;
+#X connect 10 0 7 0;
+#X connect 11 0 12 1;
+#X connect 12 0 1 0;
+#X connect 13 0 12 0;
+#X connect 13 1 8 0;
+#X restore 181 443 pd shifter;
+#X obj 203 345 list prepend;
+#X obj 243 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 356 199 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 419 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 486 198 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X obj 181 87 moses 128;
+#X obj 251 87 moses 192;
+#X obj 321 87 moses 224;
+#X obj 390 87 moses 240;
+#X obj 181 61 t f;
+#X text 272 476 unicode code number;
+#X text 265 30 UTF-8 multibyte;
+#X connect 0 0 42 0;
+#X connect 7 0 24 0;
+#X connect 8 0 25 0;
+#X connect 9 0 12 0;
+#X connect 10 0 27 0;
+#X connect 11 0 29 0;
+#X connect 12 0 23 0;
+#X connect 13 0 17 0;
+#X connect 13 0 34 0;
+#X connect 14 0 20 0;
+#X connect 16 0 14 0;
+#X connect 16 0 26 0;
+#X connect 17 0 14 1;
+#X connect 17 1 18 0;
+#X connect 17 1 33 1;
+#X connect 18 0 26 0;
+#X connect 19 0 21 1;
+#X connect 19 1 33 1;
+#X connect 20 0 21 0;
+#X connect 21 0 31 0;
+#X connect 22 0 17 0;
+#X connect 22 0 35 0;
+#X connect 23 0 16 0;
+#X connect 23 1 33 0;
+#X connect 24 0 23 0;
+#X connect 24 1 13 0;
+#X connect 25 0 23 0;
+#X connect 25 1 22 0;
+#X connect 26 0 16 1;
+#X connect 27 0 23 0;
+#X connect 27 1 28 0;
+#X connect 28 0 17 0;
+#X connect 28 0 36 0;
+#X connect 29 0 23 0;
+#X connect 29 1 30 0;
+#X connect 30 0 17 0;
+#X connect 30 0 37 0;
+#X connect 31 0 32 0;
+#X connect 32 0 1 0;
+#X connect 33 0 19 0;
+#X connect 38 0 7 0;
+#X connect 38 1 39 0;
+#X connect 39 0 9 0;
+#X connect 39 1 40 0;
+#X connect 40 0 8 0;
+#X connect 40 1 41 0;
+#X connect 41 0 10 0;
+#X connect 41 1 11 0;
+#X connect 42 0 38 0;