Ticket #183: draqo-dfa.diff
| File draqo-dfa.diff, 40.2 KB (added by arend, 3 years ago) |
|---|
-
doc/patterns.texi
RCS file: /home/arend/Go/gnugo-rsync/gnugo/doc/patterns.texi,v retrieving revision 1.19 diff -u -p -r1.19 patterns.texi
1397 1397 @file{patterns.h}) by a standalone program @file{mkpat.c}, and the resulting 1398 1398 @file{.c} files are compiled and linked into the main GNU Go executable. 1399 1399 1400 IMPORTANT: After any change in patterns, which uses DFA pattern matching, one 1401 should optimize pattern databases, in which the changes was made. This is done 1402 by running a part of @file{optimize} script in @file{patterns} directory. Run 1403 only parts of this script, which refers to desired databases, because it takes 1404 a very long time to execute. 1405 1400 1406 Each pattern is compiled to a header, and a sequence of elements, 1401 1407 which are (notionally) checked sequentially at every position and 1402 1408 orientation of the board. These elements are relative to the pattern -
engine/matchpat.c
RCS file: /home/arend/Go/gnugo-rsync/gnugo/engine/matchpat.c,v retrieving revision 1.75 diff -u -p -r1.75 matchpat.c
642 642 static int 643 643 scan_for_patterns(dfa_rt_t *pdfa, int l, int *dfa_pos, int *pat_list) 644 644 { 645 int delta;646 645 int state = 1; /* initial state */ 647 646 int row = 0; /* initial row */ 648 647 int id = 0; /* position in id_list */ … … 657 656 } 658 657 659 658 /* go to next state */ 660 delta = pdfa->states[state].next[dfa_pos[spiral[row][l]]]; 661 state += delta; 659 state = pdfa->states[state].next[dfa_pos[spiral[row][l]]]; 662 660 row++; 663 } while ( delta!= 0); /* while not on error state */661 } while (state != 0); /* while not on error state */ 664 662 665 663 return id; 666 664 } -
patterns/Makefile.am
RCS file: /home/arend/Go/gnugo-rsync/gnugo/patterns/Makefile.am,v retrieving revision 1.39 diff -u -p -r1.39 Makefile.am
3 3 4 4 DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 5 5 DTR = aa_attackpats.dtr owl_attackpats.dtr owl_defendpats.dtr \ 6 owl_vital_apats.dtr 6 owl_vital_apats.dtr attack.dtr defense.dtr conn.dtr \ 7 barriers.dtr endgame.dtr handicap.dtr influence.dtr \ 8 patterns.dtr 7 9 8 10 EXTRA_DIST = $(DSP)\ 9 11 $(DTR)\ … … 121 123 takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 122 124 ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 123 125 124 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db mkpat$(EXEEXT)125 ./mkpat -b pat -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db\126 - o patterns.c126 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db $(srcdir)/patterns.dtr mkpat$(EXEEXT) 127 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/patterns.dtr pat \ 128 -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db -o patterns.c 127 129 128 130 josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 129 131 ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 130 132 131 apatterns.c : $(srcdir)/attack.db mkpat$(EXEEXT) 132 ./mkpat -X attpat -i $(srcdir)/attack.db -o apatterns.c 133 134 dpatterns.c : $(srcdir)/defense.db mkpat$(EXEEXT) 135 ./mkpat defpat -i $(srcdir)/defense.db -o dpatterns.c 136 137 conn.c : $(srcdir)/conn.db mkpat$(EXEEXT) 138 ./mkpat -c conn -i $(srcdir)/conn.db -o conn.c 139 140 endgame.c : $(srcdir)/endgame.db mkpat$(EXEEXT) 141 ./mkpat -b endpat -i $(srcdir)/endgame.db -o endgame.c 133 apatterns.c : $(srcdir)/attack.db $(srcdir)/attack.dtr mkpat$(EXEEXT) 134 ./mkpat $(DFAFLAGS) -X -t $(srcdir)/attack.dtr attpat \ 135 -i $(srcdir)/attack.db -o apatterns.c 136 137 dpatterns.c : $(srcdir)/defense.db $(srcdir)/defense.dtr mkpat$(EXEEXT) 138 ./mkpat $(DFAFLAGS) -t $(srcdir)/defense.dtr defpat \ 139 -i $(srcdir)/defense.db -o dpatterns.c 140 141 conn.c : $(srcdir)/conn.db $(srcdir)/conn.dtr mkpat$(EXEEXT) 142 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/conn.dtr conn \ 143 -i $(srcdir)/conn.db -o conn.c 144 145 endgame.c : $(srcdir)/endgame.db $(srcdir)/endgame.dtr mkpat$(EXEEXT) 146 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/endgame.dtr endpat \ 147 -i $(srcdir)/endgame.db -o endgame.c 142 148 143 149 eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 144 150 ./mkeyes < $(srcdir)/eyes.db >eyes.c 145 151 146 influence.c : $(srcdir)/influence.db mkpat$(EXEEXT) 147 ./mkpat -c influencepat -i $(srcdir)/influence.db -o influence.c 148 149 barriers.c : $(srcdir)/barriers.db mkpat$(EXEEXT) 150 ./mkpat -c -b barrierspat -i $(srcdir)/barriers.db -o barriers.c 152 influence.c : $(srcdir)/influence.db $(srcdir)/influence.dtr mkpat$(EXEEXT) 153 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/influence.dtr influencepat \ 154 -i $(srcdir)/influence.db -o influence.c 155 156 barriers.c : $(srcdir)/barriers.db $(srcdir)/barriers.dtr mkpat$(EXEEXT) 157 ./mkpat $(DFAFLAGS) -c -b -t $(srcdir)/barriers.dtr barrierspat \ 158 -i $(srcdir)/barriers.db -o barriers.c 151 159 152 160 aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 153 161 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ … … 169 177 -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 170 178 171 179 fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 172 ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c180 ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 173 181 174 182 fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 175 183 ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c … … 180 188 fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 181 189 ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 182 190 183 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 184 ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 191 handipat.c : $(srcdir)/handicap.db $(srcdir)/handicap.dtr mkpat$(EXEEXT) 192 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/handicap.dtr handipat \ 193 -i $(srcdir)/handicap.db -o handipat.c 185 194 186 195 187 196 ETAGS_ARGS = --language none --regex '/^Pattern[ \t]+[a-zA-Z0-9]+/' $(DB_TO_TAG)\ -
patterns/Makefile.in
RCS file: /home/arend/Go/gnugo-rsync/gnugo/patterns/Makefile.in,v retrieving revision 1.60 diff -u -p -r1.60 Makefile.in
80 80 81 81 DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 82 82 DTR = aa_attackpats.dtr owl_attackpats.dtr owl_defendpats.dtr \ 83 owl_vital_apats.dtr 83 owl_vital_apats.dtr attack.dtr defense.dtr conn.dtr \ 84 barriers.dtr endgame.dtr handicap.dtr influence.dtr \ 85 patterns.dtr 84 86 85 87 86 88 EXTRA_DIST = $(DSP)\ … … 526 528 takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 527 529 ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 528 530 529 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db mkpat$(EXEEXT)530 ./mkpat -b pat -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db\531 - o patterns.c531 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db $(srcdir)/patterns.dtr mkpat$(EXEEXT) 532 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/patterns.dtr pat \ 533 -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db -o patterns.c 532 534 533 535 josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 534 536 ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 535 537 536 apatterns.c : $(srcdir)/attack.db mkpat$(EXEEXT) 537 ./mkpat -X attpat -i $(srcdir)/attack.db -o apatterns.c 538 539 dpatterns.c : $(srcdir)/defense.db mkpat$(EXEEXT) 540 ./mkpat defpat -i $(srcdir)/defense.db -o dpatterns.c 541 542 conn.c : $(srcdir)/conn.db mkpat$(EXEEXT) 543 ./mkpat -c conn -i $(srcdir)/conn.db -o conn.c 544 545 endgame.c : $(srcdir)/endgame.db mkpat$(EXEEXT) 546 ./mkpat -b endpat -i $(srcdir)/endgame.db -o endgame.c 538 apatterns.c : $(srcdir)/attack.db $(srcdir)/attack.dtr mkpat$(EXEEXT) 539 ./mkpat $(DFAFLAGS) -X -t $(srcdir)/attack.dtr attpat \ 540 -i $(srcdir)/attack.db -o apatterns.c 541 542 dpatterns.c : $(srcdir)/defense.db $(srcdir)/defense.dtr mkpat$(EXEEXT) 543 ./mkpat $(DFAFLAGS) -t $(srcdir)/defense.dtr defpat \ 544 -i $(srcdir)/defense.db -o dpatterns.c 545 546 conn.c : $(srcdir)/conn.db $(srcdir)/conn.dtr mkpat$(EXEEXT) 547 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/conn.dtr conn \ 548 -i $(srcdir)/conn.db -o conn.c 549 550 endgame.c : $(srcdir)/endgame.db $(srcdir)/endgame.dtr mkpat$(EXEEXT) 551 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/endgame.dtr endpat \ 552 -i $(srcdir)/endgame.db -o endgame.c 547 553 548 554 eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 549 555 ./mkeyes < $(srcdir)/eyes.db >eyes.c 550 556 551 influence.c : $(srcdir)/influence.db mkpat$(EXEEXT) 552 ./mkpat -c influencepat -i $(srcdir)/influence.db -o influence.c 553 554 barriers.c : $(srcdir)/barriers.db mkpat$(EXEEXT) 555 ./mkpat -c -b barrierspat -i $(srcdir)/barriers.db -o barriers.c 557 influence.c : $(srcdir)/influence.db $(srcdir)/influence.dtr mkpat$(EXEEXT) 558 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/influence.dtr influencepat \ 559 -i $(srcdir)/influence.db -o influence.c 560 561 barriers.c : $(srcdir)/barriers.db $(srcdir)/barriers.dtr mkpat$(EXEEXT) 562 ./mkpat $(DFAFLAGS) -c -b -t $(srcdir)/barriers.dtr barrierspat \ 563 -i $(srcdir)/barriers.db -o barriers.c 556 564 557 565 aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 558 566 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ … … 574 582 -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 575 583 576 584 fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 577 ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c585 ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 578 586 579 587 fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 580 588 ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c … … 585 593 fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 586 594 ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 587 595 588 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 589 ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 596 handipat.c : $(srcdir)/handicap.db $(srcdir)/handicap.dtr mkpat$(EXEEXT) 597 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/handicap.dtr handipat \ 598 -i $(srcdir)/handicap.db -o handipat.c 590 599 # Tell versions [3.59,3.63) of GNU make to not export all variables. 591 600 # Otherwise a system limit (for SysV at least) may be exceeded. 592 601 .NOEXPORT: -
patterns/dfa.c
RCS file: /home/arend/Go/gnugo-rsync/gnugo/patterns/dfa.c,v retrieving revision 1.42 diff -u -p -r1.42 dfa.c
416 416 exit(EXIT_FAILURE); 417 417 } 418 418 419 assert(dfa_minmax_delta(pdfa, -1, 1) > -32768);420 if (dfa_minmax_delta(pdfa, -1, 0) > 32768) {421 fprintf(of, "#error too many states");422 fprintf(stderr, "Error: The dfa states are too disperse. Can't fit delta into a short.\n");423 exit(EXIT_FAILURE);424 }425 426 419 if (pdfa->last_index + 1 > 65535) { 427 420 fprintf(of, "#error too many states"); 428 421 fprintf(stderr, "Error: Too many index entries. Can't fit delta into a short.\n"); … … 439 432 fprintf(of, "{{"); 440 433 for (j = 0; j < 4; j++) { 441 434 int n = pdfa->states[i].next[j]; 442 assert((n == 0) || (abs(n - i) < 32768));443 fprintf(of, "%d", n ? n - i : 0);435 assert((n >= 0) && (n <= 65535)); 436 fprintf(of, "%d", n); 444 437 if (j != 3) 445 438 fprintf(of, ","); 446 439 } … … 778 771 } 779 772 780 773 781 /*782 * Returns max or min jump distance from state to next[next_index] for783 * all states. If next_index < 0, then max/min for all for states.784 */785 786 int787 dfa_minmax_delta(dfa_t *pdfa, int next_index, int isMin)788 {789 790 int ret, i, j;791 assert(next_index <= 3);792 793 if (isMin)794 ret = 99999;795 else796 ret = -1;797 798 for (i = 0; i <= pdfa->last_state; i++) {799 for (j = 0; j < 4; j++) {800 if (j == next_index || next_index < 0) {801 int next = pdfa->states[i].next[j];802 if (!next)803 continue;804 if (isMin) {805 if (ret > next - i)806 ret = next - i;807 }808 else {809 if (ret < next - i)810 ret = next - i;811 }812 }813 }814 }815 816 return ret;817 }818 819 774 #define DFA_ALIGN 2 820 775 821 776 /* … … 947 902 dfa_finalize(dfa_t *pdfa) 948 903 { 949 904 int j; 950 int next_bin = aux_count; 951 int last_bin = aux_count + DFA_BINS - 1; 905 int next_bin; 906 int last_bin; 907 aux_count += DFA_BINS; /* To avoid negative values of aux_count. */ 908 next_bin = aux_count; 909 last_bin = aux_count + DFA_BINS - 1; 952 910 while (next_bin + 1 != last_bin) { 953 911 for (j = aux_count + 1; j <= last_bin; j += 2) { 954 912 if (j+1 == next_bin) … … 1190 1148 if (j == pat->minj) 1191 1149 borders &= ~WEST_EDGE; 1192 1150 1193 assert(m + i < DFA_MAX_BOARD * 3 && m + i < DFA_MAX_BOARD * 3);1151 assert(m + i < DFA_MAX_BOARD * 4 && n + j < DFA_MAX_BOARD * 4); 1194 1152 str[k] = work_space[m + i][n + j]; 1195 1153 assert(strchr("XOxo.,a!?$#|-+", str[k])); 1196 1154 -
patterns/dfa.h
RCS file: /home/arend/Go/gnugo-rsync/gnugo/patterns/dfa.h,v retrieving revision 1.32 diff -u -p -r1.32 dfa.h
65 65 /* DFA state. */ 66 66 typedef struct state_rt 67 67 { 68 short next[4];69 short att; 68 unsigned short next[4]; /* Next state to jump to. */ 69 short att; /* An index in the attributes table. */ 70 70 } state_rt_t; 71 71 72 72 typedef struct dfa_rt -
patterns/mkpat.c
RCS file: /home/arend/Go/gnugo-rsync/gnugo/patterns/mkpat.c,v retrieving revision 1.158 diff -u -p -r1.158 mkpat.c
55 55 -p = compile general pattern database (the default)\n\ 56 56 -c = compile connections database\n\ 57 57 -C = compile a corner pattern database\n\ 58 Usage of DFA (cannot be used with a corner pattern database):\n\ 58 59 -D = compile a DFA database (allows fast matching)\n\ 59 60 -d <iterations> = don't generate database, but optimize a DFA\n\ 60 61 transformation file instead\n\ … … 91 92 #define DB_GENERAL ((int) 'p') 92 93 #define DB_CONNECTIONS ((int) 'c') 93 94 #define DB_CORNER ((int) 'C') 94 #define DB_DFA ((int) 'D')95 #define USE_DFA ((int) 'D') 95 96 #define OPTIMIZE_DFA ((int) 'd') 96 97 97 98 /* code assumes that ATT_O and ATT_X are 1 and 2 (in either order) … … 150 151 151 152 static int ci = -1, cj = -1; /* position of origin (first piece element) 152 153 relative to top-left */ 154 static int fixed_pat_anchor = 0; /* if anchor for checked pattern is fixed */ 153 155 static int patno; /* current pattern */ 154 156 static int discard_pattern = 0; /* Set to nonzero to discard a pattern (if e.g. 155 157 * it is too large or duplicated). */ … … 482 484 483 485 /* options */ 484 486 int verbose = 0; /* -v */ 485 static int database_type = 0; /* -p (default), -c, -f, -C, -D or -T */ 487 static int database_type = 0; /* -p (default), -c or -C */ 488 static int use_dfa = 0; /* -D or -d */ 486 489 static int anchor = 0; /* Whether both O and/or X may be anchors. 487 490 * -b for both. -X for only X. 488 491 */ … … 536 539 { 537 540 struct hint_data *hint; 538 541 539 if ( database_type == DB_DFA || database_type == OPTIMIZE_DFA) {542 if (use_dfa) { 540 543 for (hint = first_hint; hint; hint = hint->next) { 541 544 if (!strcmp(hint->name, pattern_name)) 542 545 return hint->transformation_hint; 543 546 } 544 547 } 545 548 546 return database_type== OPTIMIZE_DFA ? -1 : 0;549 return use_dfa == OPTIMIZE_DFA ? -1 : 0; 547 550 } 548 551 549 552 … … 695 698 if (verbose) 696 699 fprintf(stderr, "Add :%s\n", pattern[index].name); 697 700 698 if ( database_type == DB_DFA) {701 if (use_dfa == USE_DFA) { 699 702 float ratio; 700 703 701 704 dfa_rotate_string(strrot, str, transformation_hint); … … 718 721 int rot_start = 0; 719 722 int rot_stop = pattern[index].trfno; 720 723 721 assert( database_type== OPTIMIZE_DFA);724 assert(use_dfa == OPTIMIZE_DFA); 722 725 723 726 if (rot_stop == 5) { 724 727 rot_start = 2; … … 889 892 } 890 893 891 894 if (off == ATT_Q) { 895 fixed_pat_anchor = 1; 892 896 off = ATT_O; 893 897 ci = maxi; 894 898 cj = j; … … 897 901 } 898 902 899 903 if (off == ATT_Y) { 904 fixed_pat_anchor = 1; 900 905 off = ATT_X; 901 906 ci = maxi; 902 907 cj = j; … … 1098 1103 ci = 0; 1099 1104 cj = 0; 1100 1105 } 1101 else if (choose_best_anchor && !discard_pattern) { 1106 else if (choose_best_anchor && !discard_pattern 1107 && (!fixed_pat_anchor || database_type != DB_CONNECTIONS)) { 1102 1108 1103 1109 /* Try to find a better anchor if 1104 1110 * the -m option is set. … … 1775 1781 int used_nodes = 0; 1776 1782 1777 1783 assert(ci != -1 && cj != -1); 1778 assert( database_type == DB_DFA || transformation_hint == 0);1784 assert(use_dfa == USE_DFA || transformation_hint == 0); 1779 1785 1780 1786 /* sort the elements so that least-likely elements are tested first. */ 1781 1787 gg_sort(elements, el, sizeof(struct patval_b), compare_elements); … … 1816 1822 * elements for all possible transformations). 1817 1823 */ 1818 1824 if ((database_type == DB_GENERAL || database_type == DB_CONNECTIONS) 1819 && ci-1 <= x && x <= ci+1 && cj-1 <= y && y <= cj+1)1825 && !use_dfa && ci-1 <= x && x <= ci+1 && cj-1 <= y && y <= cj+1) 1820 1826 continue; 1821 1827 #endif /* GRID_OPT == 1 */ 1822 1828 … … 1824 1830 * they might be needed for goal checking or by callback function, so 1825 1831 * we check it before discarding an element. 1826 1832 */ 1827 if ( database_type == DB_DFA)1833 if (use_dfa) 1828 1834 continue; 1829 1835 } /* If the element is discardable. */ 1830 1836 … … 2384 2390 fprintf(outfile, " -1,\n"); /* fixed_for_size */ 2385 2391 fprintf(outfile, " %d,\n", fixed_anchor); 2386 2392 fprintf(outfile, " %s\n", prefix); 2387 if ( database_type == DB_DFA)2393 if (use_dfa) 2388 2394 fprintf(outfile, " ,& dfa_%s\n", prefix); /* pointer to the wired dfa */ 2389 2395 else 2390 2396 fprintf(outfile, " , NULL\n"); /* pointer to a possible dfa */ … … 2434 2440 2435 2441 case 'p': 2436 2442 case 'c': 2437 case 'f':2438 2443 case 'C': 2439 case 'D':2440 case 'd':2441 2444 if (database_type) { 2442 2445 fprintf(stderr, "Error : More than one database type specified (-%c and -%c)\n", 2443 2446 database_type, i); 2444 2447 return 1; 2445 2448 } 2449 if (i == 'C' && use_dfa) { 2450 fprintf(stderr, "Error : Cannot use DFA with a corner pattern database\n"); 2451 return 1; 2452 } 2446 2453 database_type = i; 2454 break; 2455 2456 case 'd': 2457 case 'D': 2458 use_dfa = i; 2447 2459 if (i == 'd') { 2448 2460 iterations = strtol(gg_optarg, NULL, 10); 2449 2461 if (iterations < 0) { … … 2451 2463 return 1; 2452 2464 } 2453 2465 } 2466 if (database_type == 'C') { 2467 fprintf(stderr, "Error : Cannot use DFA with a corner pattern database\n"); 2468 return 1; 2469 } 2454 2470 break; 2455 2471 2456 2472 case 'O': … … 2492 2508 2493 2509 if (!input_files) 2494 2510 input_file_names[input_files++] = stdin_name; 2495 if (output_file_name && database_type!= OPTIMIZE_DFA) {2511 if (output_file_name && use_dfa != OPTIMIZE_DFA) { 2496 2512 output_FILE = fopen(output_file_name, "wb"); 2497 2513 if (output_FILE == NULL) { 2498 2514 fprintf(stderr, "Error : Cannot write to file %s\n", output_file_name); 2499 2515 return 1; 2500 2516 } 2501 2517 } 2502 if (transformations_file_name 2503 && (database_type == DB_DFA || database_type == OPTIMIZE_DFA)) { 2518 if (transformations_file_name && use_dfa) { 2504 2519 transformations_FILE = fopen(transformations_file_name, "r"); 2505 2520 if (transformations_FILE) { 2506 2521 parse_transformations_file(transformations_FILE); 2507 2522 fclose(transformations_FILE); 2508 2523 } 2509 else if ( database_type == DB_DFA) {2524 else if (use_dfa == USE_DFA) { 2510 2525 fprintf(stderr, "Error : Cannot read file %s\n", 2511 2526 transformations_file_name); 2512 2527 return 1; … … 2524 2539 2525 2540 prefix = argv[gg_optind]; 2526 2541 2527 if ( database_type == DB_DFA) {2542 if (use_dfa == USE_DFA) { 2528 2543 dfa_init(); 2529 2544 new_dfa(&dfa, "mkpat's dfa"); 2530 2545 } 2531 2546 else if (database_type == DB_CORNER) 2532 2547 corner_init(); 2533 2548 2534 if ( database_type== OPTIMIZE_DFA) {2549 if (use_dfa == OPTIMIZE_DFA) { 2535 2550 if (transformations_file_name == NULL) { 2536 2551 fprintf(stderr, "error : transformation file required (use -t option)\n"); 2537 2552 return 1; … … 2817 2832 else if (line[0] == ':') { 2818 2833 if (state == 2 || state == 3) { 2819 2834 finish_pattern(line); 2835 fixed_pat_anchor = 0; 2820 2836 2821 2837 if (!discard_pattern) { 2822 if ( database_type == DB_DFA || database_type == OPTIMIZE_DFA)2838 if (use_dfa) 2823 2839 write_to_dfa(patno); 2824 2840 if (database_type == DB_CORNER) 2825 2841 corner_add_pattern(); 2826 else if ( database_type!= OPTIMIZE_DFA)2842 else if (use_dfa != OPTIMIZE_DFA) 2827 2843 write_elements(output_FILE); 2828 2844 } 2829 2845 … … 2916 2932 fprintf(stderr, "%d / %d patterns have edge-constraints\n", 2917 2933 pats_with_constraints, patno); 2918 2934 2919 if ( database_type!= OPTIMIZE_DFA) {2935 if (use_dfa != OPTIMIZE_DFA) { 2920 2936 /* Forward declaration, which autohelpers might need. */ 2921 2937 if (database_type != DB_CORNER) 2922 2938 fprintf(output_FILE, "static struct pattern %s[%d];\n\n", prefix, patno + 1); … … 2933 2949 2934 2950 write_patterns(output_FILE); 2935 2951 2936 if ( database_type == DB_DFA) {2952 if (use_dfa) { 2937 2953 fprintf(stderr, "---------------------------\n"); 2938 2954 2939 2955 dfa_finalize(&dfa); … … 2976 2992 current_file); 2977 2993 } 2978 2994 } 2979 else { /* database_type== OPTIMIZE_DFA */2995 else { /* use_dfa == OPTIMIZE_DFA */ 2980 2996 int k; 2981 2997 int *optimized_variations; 2982 2998 … … 2989 3005 optimized_variations = dfa_patterns_optimize_variations(&dfa_pats, 2990 3006 iterations); 2991 3007 for (k = 0; k < patno; k++) { 2992 fprintf(transformations_FILE, "%s\t%d\n", pattern_names[k], 2993 optimized_variations[k]); 3008 int var = optimized_variations[k]; 3009 if (pattern[k].trfno == 5) 3010 var += 2; 3011 fprintf(transformations_FILE, "%s\t%d\n", pattern_names[k], var); 2994 3012 } 2995 3013 2996 3014 free(optimized_variations); -
(a) /dev/null vs. (b) patterns/attack.dtr
a b 1 Attack1 0 2 Attack2 0 3 Attack4 2 4 Attack5 0 5 Attack6 6 6 Attack10 0 7 Attack11 6 8 Attack13 1 9 Attack14 2 10 Attack15 0 11 Attack16 5 12 Attack17 0 13 Attack18 6 14 Attack19 4 -
(a) /dev/null vs. (b) patterns/barriers.dtr
a b 1 Barrier1 1 2 Barrier1b 1 3 Barrier2 1 4 Barrier3 1 5 Barrier4a 3 6 Barrier4b 4 7 Barrier5 0 8 Barrier6 7 9 Barrier6b 0 10 Barrier7 0 11 Barrier8 1 12 Barrier9 1 13 Barrier10 0 14 Barrier11 0 15 Barrier12 6 16 Barrier13 0 17 Barrier14 0 18 Barrier15 6 19 Barrier16 5 20 Barrier16b 6 21 Barrier17 6 22 Barrier18 6 23 Barrier19 0 24 Barrier20 0 25 Barrier21 1 26 Barrier22 0 27 Barrier22a 6 28 Barrier22b 0 29 Barrier23 5 30 Barrier24 0 31 Barrier25 6 32 Barrier26 5 33 Barrier27 0 34 Barrier28 0 35 Barrier29 7 36 Barrier30 0 37 Barrier31 0 38 Barrier32 7 39 Barrier33 0 40 Barrier34 7 41 Barrier34b 0 42 Barrier35 0 43 Barrier36 0 44 Barrier37 7 45 Barrier38 7 46 Barrier39 6 47 Barrier40 0 48 Barrier41a 3 49 Barrier41b 3 50 Barrier42 7 51 Barrier43 6 52 Barrier44 0 53 Barrier45 0 54 Barrier46 6 55 Barrier47 0 56 Barrier48 0 57 Barrier49 0 58 Barrier50 0 59 Barrier51 5 60 Barrier52 7 61 Barrier53 7 62 Barrier54 0 63 Barrier55 6 64 Barrier56 6 65 Barrier56b 0 66 Barrier57 6 67 Barrier58 4 68 Barrier59 1 69 Barrier60a 3 70 Barrier60b 3 71 Barrier61 0 72 Barrier62 6 73 Barrier63 0 74 Barrier64 0 75 Barrier65 6 76 Barrier66 7 77 Barrier67 0 78 Intrusion1 7 79 Intrusion1a 7 80 Intrusion1b 3 81 Intrusion1c 3 82 Intrusion1d 3 83 Intrusion2 3 84 Intrusion3 7 85 Intrusion4 0 86 Intrusion5a 7 87 Intrusion5b 0 88 Intrusion6 7 89 Intrusion7b 6 90 Intrusion8a 6 91 Intrusion8b 1 92 Intrusion9 1 93 Intrusion10 7 94 Intrusion11 0 95 Intrusion12a 0 96 Intrusion12b 0 97 Intrusion13 7 98 Intrusion14 0 99 Intrusion15 7 100 Intrusion16 0 101 Intrusion17 6 102 Intrusion18 1 103 Intrusion19 6 104 Intrusion20 0 105 Intrusion21 0 106 Intrusion21b 6 107 Intrusion22 0 108 Intrusion23 0 109 Intrusion24 0 110 Intrusion25 7 111 Intrusion26 7 112 Intrusion27 6 113 Intrusion28 0 114 Intrusion29 6 115 Intrusion30 7 116 Intrusion30a 0 117 Intrusion31 7 118 Intrusion32 7 119 Intrusion33 5 120 Intrusion34 0 121 Intrusion35 7 122 Intrusion36 1 123 Intrusion37 1 124 Intrusion38 7 125 Intrusion39 1 126 Intrusion40 5 127 Intrusion41 5 128 Intrusion42 7 129 Intrusion43 4 130 Intrusion44a 3 131 Intrusion44b 4 132 Intrusion45 7 133 Intrusion46 0 134 Intrusion47 6 135 Intrusion48 5 136 Intrusion49 0 137 Intrusion50 6 138 Intrusion51a 0 139 Intrusion51b 0 140 Intrusion52 6 141 Intrusion53 1 142 Intrusion54 4 143 Intrusion55 7 144 Intrusion56 7 145 Intrusion57 3 146 Intrusion58 7 147 Intrusion59 2 148 Intrusion60 7 149 Intrusion61 3 150 Intrusion62 0 151 Intrusion63 0 152 Nonterritory1 0 153 Nonterritory1b 6 154 Nonterritory1c 6 155 Nonterritory2 4 156 Nonterritory3 4 157 Nonterritory4 7 158 Nonterritory5 7 159 Nonterritory6 7 160 Nonterritory7 0 161 Nonterritory7b 0 162 Nonterritory7c 7 163 Nonterritory8 0 164 Nonterritory8b 0 165 Nonterritory9 0 166 Nonterritory10 5 167 Nonterritory11 7 168 Nonterritory12 1 169 Nonterritory13 0 170 Nonterritory14 5 171 Nonterritory15 2 172 Nonterritory16 7 173 Nonterritory17 6 174 Nonterritory17b 0 175 Nonterritory18a 0 176 Nonterritory18b 0 177 Nonterritory19 3 178 Nonterritory20 7 179 Nonterritory21 3 180 Nonterritory22 3 181 Nonterritory23 1 182 Nonterritory24 0 183 Nonterritory25 6 184 Nonterritory26 0 185 Nonterritory27 1 186 Nonterritory28 0 187 Nonterritory29 0 188 Nonterritory30 0 189 Nonterritory31 7 190 Nonterritory32 1 191 Nonterritory33 0 192 Nonterritory34 0 193 Nonterritory35 3 194 Nonterritory36 0 195 Nonterritory37 1 196 Nonterritory38 6 197 Nonterritory39 1 198 Nonterritory40 3 199 Nonterritory41 5 200 Nonterritory42 6 201 Nonterritory43 0 202 Nonterritory44 7 203 Nonterritory45 2 204 Nonterritory46 6 205 Nonterritory47 1 206 Nonterritory48 6 207 Nonterritory49 0 208 Nonterritory50 6 209 Nonterritory51 0 210 Nonterritory52 6 211 Nonterritory53 1 212 Nonterritory54 3 213 Nonterritory55 7 214 Nonterritory56 6 215 Nonterritory57 3 216 Nonterritory58 3 217 Nonterritory59 0 218 Nonterritory60 6 -
(a) /dev/null vs. (b) patterns/conn.dtr
a b 1 CB1b 0 2 CB2b 0 3 CB3b 2 4 CB3c 1 5 CB7 1 6 CB11b 3 7 CB15b 0 8 CB16 2 9 CB17 0 10 CB18 1 11 EC1 0 12 EC1b 0 13 EC3a 0 14 CC101 1 15 CC103 1 16 CC104 6 17 CC105 1 18 CC106 2 19 CC107 6 20 CC108 2 21 CC109 5 22 CC401 0 23 CC402 0 24 CC501 1 25 CC502 1 26 CC502b 1 27 CC503 0 28 CC504 1 29 CC505 1 30 CC506 0 31 CC506b 6 32 CC507 3 33 CC508 0 34 CC509 3 35 CC511 1 -
(a) /dev/null vs. (b) patterns/defense.dtr
a b 1 Def1 1 2 Def2 0 3 Def4 0 4 Def5 0 5 Def6 0 6 Def9 5 7 Def10 7 8 Def12 6 9 Def16 4 10 Def17 4 11 Def21 2 12 Def25 6 13 Def26 3 14 Def28 1 15 Def29 0 16 Def39 0 17 Def44 0 18 Def45 3 19 Def49 3 20 Def50 0 21 Def52 4 22 Def55 6 23 Def56 0 24 Def57 3 25 Def58 0 26 Def59 0 27 Def60 0 28 Def61 7 29 Def62 7 30 Def63 1 31 Def68 0 32 Def69 5 33 Def70 7 -
(a) /dev/null vs. (b) patterns/endgame.dtr
a b 1 EE1 0 2 EE1a 0 3 EE2 0 4 EE2b 0 5 EE2c 0 6 EE4 7 7 EE5 3 8 EE6 0 9 EE7 7 10 EE101 0 11 EE102 0 12 EE103 0 13 EE104 0 14 EE105 0 15 EE106 7 16 EE107 4 17 EE108 0 18 EE109 0 19 EE110 0 20 EE201 7 21 EE201b 7 22 EE202 0 23 EE203 0 24 EE204 0 25 EE205 0 26 EE206 0 27 EE301 0 28 EE302 0 29 EE303 0 30 EE401 3 31 EE402 0 32 EE403 0 33 EE404 3 34 EE404b 7 35 EE405 7 36 EE406 6 37 EE407 7 38 EE408 7 39 EE409 3 40 EE410 7 41 EE411 0 42 EE412 0 43 EE413 0 44 EE414 7 45 EE415 4 46 EE416 7 47 EE501 0 48 EE502 0 49 EE504 3 50 EE601 0 51 EE801 0 52 EE802 7 53 EE803 1 54 EE804 0 55 EE805 7 56 EE806 0 57 EE851 7 58 EE901 0 59 EE902 0 60 EE903 0 61 EE1002 0 62 EE1003 0 63 EF101 0 64 EF102 0 65 CE1 3 66 CE2 1 67 CE3 1 68 CE4a 1 69 CE4b 1 70 CE6 0 71 CE9 7 72 CE12 1 73 CE13 0 74 CE14 0 75 CE15 0 76 CE15b 0 77 CE16 0 78 CE16b 0 79 CE17 6 80 CE18 6 81 CE19 0 82 CE20a 1 83 CE20b 1 84 CE20c 1 85 CE21 7 86 CE22 1 87 CE23 7 88 CE24 1 89 CE26 0 90 CE27 1 91 CE28 6 92 CE28b 6 93 CE29 0 94 CE31 2 95 CE32 6 96 CE33 6 97 CE34 2 98 EY1 5 99 EY2 1 100 EY3 2 101 EY4 1 102 EY5 1 -
(a) /dev/null vs. (b) patterns/handicap.dtr
a b 1 H1 0 2 H2 0 3 H3 0 4 H4 0 5 H5 0 6 H6 0 7 H7 0 8 H10 7 9 H11 7 10 H12 7 11 H13 7 12 H14 3 13 H15 3 14 H16 7 15 H17 7 16 H18 3 17 H19 3 18 H20 4 19 H21 4 20 H22 7 21 H23 3 22 H24 3 23 H30 7 24 H31 0 25 H32 0 26 H40 3 27 H41 3 28 H42 6 29 H43 6 30 H44 6 31 H45 6 32 H50 6 33 H51 5 34 H52 0 35 H53 7 36 H60 0 37 H61 0 38 H62 0 39 H63 0 40 H70 3 41 H71 3 42 H80 3 43 H81 6 44 H82 1 45 H83 1 46 H84 1 47 H85 1 48 H86 1 49 H87 6 -
(a) /dev/null vs. (b) patterns/influence.dtr
a b 1 Enhance1 1 2 Enhance2 0 3 Enhance3 3 4 Enhance4 0 5 Enhance5 6 6 Enhance6 0 7 Enhance7 4 8 Enhance8 7 9 Enhance9 4 10 Enhance10 7 11 Enhance11 0 12 Enhance12 3 13 Enhance13 3 14 Enhance14 0 15 Enhance15 0 16 Enhance16 1 17 Enhance17 1 18 Enhance18 0 19 Enhance19 0 20 Enhance20 3 21 Enhance21 0 22 Enhance22 4 23 Enhance23 3 24 Enhance24 0 25 Enhance25 4 26 Enhance26 2 27 Invade1 3 28 Invade2 2 29 Invade3 2 30 Invade4 3 31 Invade4b 3 32 Invade4c 3 33 Invade5 2 34 Invade6 3 35 Invade6b 3 36 Invade6c 3 37 Invade7a 0 38 Invade7b 1 39 Invade7c 1 40 Invade7d 6 41 Invade8 5 42 Invade9 5 43 Invade10 3 44 Invade11 3 45 Invade12 2 46 Invade13 0 47 Invade14 7 48 Invade15 3 49 Invade16 2 50 Invade17 3 -
(a) /dev/null vs. (b) patterns/patterns.dtr
a b 1 CC1 6 2 CC2 1 3 CC3 1 4 CC4 6 5 CC5 1 6 CC6 3 7 CC7 1 8 CC8 6 9 CC9 0 10 CC10 0 11 CC10b 0 12 CC11 4 13 CC12 6 14 CC13 3 15 CC13b 3 16 CC14 1 17 CC15 6 18 CC16 4 19 CC17 6 20 CC19 0 21 CC20 0 22 CC21 0 23 CC22 0 24 CC23 0 25 CC24 6 26 CC25 6 27 CC26 2 28 CC27 1 29 CC28 1 30 CC29 1 31 CC30 1 32 CC31 1 33 CC32 1 34 CC33 7 35 CC34 1 36 CC35 1 37 CC36 7 38 CC37 7 39 CC38 7 40 CC39 0 41 CC40 1 42 CC41 0 43 CC42 0 44 CC43 0 45 CC44 3 46 CC45 6 47 CC46 0 48 CC47 6 49 CC48 6 50 CC49 1 51 CC50 7 52 CC51 5 53 CC52a 7 54 CC52b 3 55 CC53 5 56 CC54 0 57 CC55 0 58 CC57 0 59 CC58 0 60 CC59 0 61 CC60 3 62 CC61 1 63 CC62 0 64 CC63 0 65 CC64 0 66 CC65 2 67 CC66 2 68 CC67 6 69 CC68 5 70 CC69 0 71 CC70 1 72 CC71 1 73 CC72 0 74 CC73 0 75 CC74 6 76 CC74b 6 77 CC75 4 78 CC76 6 79 CC77 3 80 CC78 1 81 CC79 4 82 CC80 2 83 CC81 7 84 CC82 0 85 CC83 1 86 CC84 3 87 CC85 6 88 CC86 6 89 CC87 5 90 CC88 1 91 EC1 0 92 EC2 7 93 EC4 7 94 EC5 7 95 EC6 7 96 EC7 0 97 EC8 7 98 EC8a 0 99 EC9 0 100 EC10 0 101 EC11 0 102 EC12 7 103 EC13 0 104 EC14 6 105 EC15 0 106 EC16 0 107 EC16a 0 108 EC17 7 109 EC18 7 110 EC19 0 111 EC20 0 112 EC21 0 113 EC22 2 114 EC23 3 115 EC24 0 116 EC25 0 117 EC26 0 118 EC27 6 119 EC28 6 120 EC29 3 121 EC30 0 122 EC31 0 123 EC32 0 124 EC33 0 125 EC34 6 126 EC35 7 127 EC36 6 128 EC42 0 129 EC43 7 130 EC44 0 131 EC45 0 132 EC46 7 133 EC47 0 134 EC48 0 135 EC49 0 136 EC50 0 137 EC51 0 138 EC52 0 139 EC53 0 140 EC54 6 141 EC55 0 142 EC56 0 143 EC57 0 144 EC58 7 145 EC59 0 146 EC60 6 147 EC60a 6 148 EC61 6 149 EC62 7 150 EC63 0 151 EC64 7 152 EC65 6 153 EC66 7 154 EC67 0 155 EC68 7 156 EC69 1 157 EC70 0 158 EC71 7 159 EC73 7 160 EC74 0 161 EC75 6 162 EC76 7 163 EC77 4 164 EC78 7 165 EC79 0 166 EC80 0 167 EC81 7 168 EC101 0 169 EC102 0 170 EC103 0 171 EC104 0 172 EC105 7 173 EC106 0 174 EC107 0 175 EC108 0 176 EC109 0 177 EC110 0 178 EC201 3 179 EC202 3 180 EC203 3 181 EC204 3 182 EC205 3 183 EC206 0 184 EC207 0 185 EC208 0 186 EC209 0 187 EC210 0 188 EC211 7 189 EC212 7 190 EC213 0 191 EC214 6 192 EC215 0 193 EC216 0 194 EC217 7 195 EC218 7 196 CS1 1 197 CS2 6 198 CS3 4 199 CS4 3 200 CS5 6 201 CS6 6 202 CS7 1 203 CS8 1 204 CS9 6 205 CS10 0 206 CS11 4 207 CS12 6 208 CS13 0 209 CS14 0 210 CS15 7 211 CS16 7 212 CS17 6 213 CS18 0 214 CS19 6 215 CS20a 1 216 CS20b 1 217 CS21 5 218 CS22 7 219 CS23 0 220 CS24 4 221 CS25 1 222 CS26 5 223 ES1 0 224 ES2 7 225 ES3a 0 226 ES3b 0 227 EB4 7 228 EB5 0 229 EB6 0 230 EB7 4 231 EB8 7 232 EB9 7 233 EB10 6 234 EB11 0 235 EB102 7 236 EB104 0 237 EB105 0 238 EB106 0 239 EB107 7 240 EB108 0 241 EB109 7 242 EB110 7 243 EB111 7 244 EB112 0 245 EB113 3 246 EB114 7 247 EB201 0 248 EB202 6 249 EB203 5 250 EB204 7 251 EB205 0 252 EB206 0 253 EB207 0 254 EB208 2 255 EB209 7 256 EB210 7 257 EB211 7 258 EB301 7 259 EB302 0 260 EB303 0 261 EB304 7 262 EB305 7 263 EB306 6 264 EB307 6 265 EB308 7 266 EB309 0 267 EB310 0 268 EB311 7 269 EB312 7 270 EB313 0 271 EB314 6 272 EB315 7 273 EB316 0 274 EB317 6 275 EB401 0 276 EB402 0 277 EB403 0 278 EB404 7 279 EB405 7 280 EB406 7 281 EB407 7 282 EB408 0 283 EB409 0 284 EB410 7 285 EB411 7 286 EB412 0 287 EB501 5 288 EB501a 2 289 EB502 7 290 EB503 7 291 EB504 0 292 EB505 0 293 EB506 6 294 EB507 7 295 EB507a 7 296 EB508 7 297 EB509 7 298 EB510 7 299 EB511 0 300 EB512 7 301 EB513 2 302 EB514 2 303 EB515 7 304 EB516 0 305 EB517 7 306 EB518 0 307 EB519 3 308 EB520 3 309 EB521 7 310 EB601 7 311 EB602 2 312 EB603 3 313 EB604 6 314 EB605 6 315 EB606 0 316 EB608 7 317 EB609 0 318 EB610 0 319 EB611 6 320 EB612 0 321 EB615 0 322 EB615b 0 323 EB616 0 324 EB617 0 325 EB618 0 326 EB619 0 327 EB624 7 328 EB626 7 329 EB627 7 330 EB628 0 331 EB629 0 332 EB630 0 333 EB631 0 334 EB632 0 335 EB633 0 336 EB634 0 337 EB635 7 338 EB637 7 339 EB638 0 340 EB639 0 341 EB640a 0 342 EB640b 7 343 EB640c 0 344 EB641a 7 345 EB641b 7 346 EB641c 6 347 EB642 6 348 EB643 6 349 EB701 1 350 EB702a 0 351 EB702b 0 352 EB703 6 353 EB704 0 354 EB705 7 355 EB706 7 356 EB707 7 357 EB708 3 358 EB709 5 359 EB709b 5 360 EB710 7 361 EB711 7 362 EB712 0 363 EB712b 0 364 EB713 7 365 EB714 0 366 EB715 0 367 EB716 0 368 EB717 0 369 EB718 0 370 EB719 0 371 EB801 0 372 EB802 6 373 EB803 7 374 EB804 7 375 EB805 7 376 EB806 7 377 EB808 0 378 EB909 3 379 EB910 1 380 EB911 6 381 EB912 2 382 EB913 0 383 EB913b 0 384 EB914 0 385 EB915 0 386 EB917 0 387 EB918 6 388 EB919 0 389 EB920 0 390 EB921 0 391 EB922 3 392 EB923 7 393 EB924 0 394 EB924a 0 395 EB924b 0 396 EB925 0 397 EB1001 0 398 EB1003 2 399 EB1004 5 400 EB1005 5 401 EB1006 7 402 EB1007 0 403 EB1008 0 404 EB1008b 0 405 EB1008c 0 406 EB1009 5 407 EB1011 0 408 EB1012 0 409 EB1013 0 410 EB1014 0 411 EB1015 7 412 EB1016 0 413 EB1017 0 414 EB1018 7 415 EB1019 7 416 EB1020 2 417 EB1021 0 418 EB1022 7 419 EB1101 0 420 EB1201 3 421 EB1202 7 422 EB1203 0 423 EB1301 1 424 EB1302 1 425 EB1303 5 426 EB1304 0 427 EB1305 0 428 EB1306 0 429 EB1307 0 430 EB1308 7 431 EB1309 7 432 EB1310 0 433 EB1311 7 434 EB1401 7 435 EB1402 7 436 EB1403 7 437 EB1404a 6 438 EB1404c 6 439 EB1405 0 440 EB1501 0 441 EB1502 0 442 EB1503 0 443 EB1601 0 444 EB1603 7 445 EB1604 7 446 EB1605 7 447 EB1606 0 448 EB1606b 0 449 EB1607 3 450 EB1608 6 451 EB1609 3 452 EB1610 7 453 EB1611 0 454 EB1701 0 455 EB1702 0 456 EB1702b 0 457 EB1703 4 458 EB1704 0 459 EB1705 4 460 EB1706 4 461 EB1707 0 462 EB1708 6 463 EB1709 0 464 EB1710 5 465 EB1711 5 466 EB1801 0 467 EB1802 7 468 EB1803 4 469 EB1804 7 470 EB1805 6 471 EB1806 7 472 EB1807 1 473 EB1808 0 474 EB1808a 0 475 EB1809 7 476 EB1810 0 477 EB1901 7 478 EB1902 6 479 EB1903 0 480 EB1904 7 481 EB1905 7 482 EB1906 6 483 EB2001 0 484 EB2002 6 485 EB2003 6 486 CB1 3 487 CB2 6 488 CB3 6 489 CB4 1 490 CB5 2 491 CB6 7 492 CB7 2 493 CB8 7 494 CB9 6 495 CB10 5 496 CB12 0 497 CB13 4 498 CB14 1 499 CB14a 1 500 CB14b 1 501 CB15 6 502 CB101 6 503 CB103 6 504 CB104 0 505 CB105 6 506 CB105b 6 507 CB106 0 508 CB207 6 509 CB209 6 510 CB210 1 511 CB217 3 512 CB217a 3 513 CB277 5 514 CB327 3 515 CB328 3 516 CB202 6 517 CB212 3 518 CB213 3 519 CB216 7 520 CB219 0 521 CB220 0 522 CB221 0 523 CB223 1 524 CB231 6 525 CB232 0 526 CB236 1 527 CB240 5 528 CB241a 0 529 CB241b 1 530 CB244 6 531 CB245 4 532 CB247 0 533 CB262 6 534 CB271 7 535 CB275 6 536 CB281 0 537 CB288 1 538 CB296 2 539 CB297 2 540 CB298 1 541 CB307 7 542 CB309 1 543 CB310 7 544 CB313 2 545 CB323 6 546 CB329a 0 547 CB335 1 548 CB339 3 549 CB205 1 550 CB225 1 551 CB235 6 552 CB251 7 553 CB256 7 554 CB257 6 555 CB260 6 556 CB267 2 557 CB289 5 558 CB203 6 559 CB204 1 560 CB204b 1 561 CB206 1 562 CB214 7 563 CB215 7 564 CB218 7 565 CB224 1 566 CB226 1 567 CB227 5 568 CB228 4 569 CB229 2 570 CB230 1 571 CB233 6 572 CB234 1 573 CB237 6 574 CB238 1 575 CB239 1 576 CB241c 6 577 CB242 5 578 CB243 1 579 CB243b 1 580 CB246 5 581 CB248 6 582 CB250 6 583 CB252 0 584 CB254 3 585 CB255 3 586 CB258 6 587 CB259 6 588 CB261 2 589 CB263 5 590 CB263b 5 591 CB264 1 592 CB265 3 593 CB266 7 594 CB268 6 595 CB269 1 596 CB270 3 597 CB272 4 598 CB273 7 599 CB274 0 600 CB276 0 601 CB278 0 602 CB279 0 603 CB280 7 604 CB282 3 605 CB283 4 606 CB284 3 607 CB285 1 608 CB286 1 609 CB287 4 610 CB290 6 611 CB291 2 612 CB292 0 613 CB293 2 614 CB294 5 615 CB295 2 616 CB299 1 617 CB300 0 618 CB301 7 619 CB302 2 620 CB303 7 621 CB304 3 622 CB305 2 623 CB306 7 624 CB308 1 625 CB311 6 626 CB312 5 627 CB314 7 628 CB315 0 629 CB316 6 630 CB317 4 631 CB318 1 632 CB319 3 633 CB320 0 634 CB321 1 635 CB322 1 636 CB322a 1 637 CB324 1 638 CB325 4 639 CB326 6 640 CB330 1 641 CB331 1 642 CB332 6 643 CB333 0 644 CB334 6 645 CB337 1 646 CB338 1 647 CB338b 3 648 CB340 7 649 CB341 3 650 CB342 7 651 CB343 2 652 CB344a 0 653 CB344b 0 654 CB344c 0 655 ED1 0 656 ED2 0 657 ED3 0 658 ED4 7 659 ED6 0 660 ED7 0 661 ED8 7 662 ED9 0 663 ED10 0 664 ED11 3 665 ED12 0 666 ED13 0 667 ED14 6 668 ED15 0 669 ED16 0 670 ED17 7 671 ED18 0 672 ED19 0 673 ED20 0 674 ED21 6 675 ED22 7 676 ED22b 7 677 ED23 7 678 ED24 6 679 ED25 7 680 ED26 7 681 ED27 6 682 ED28 0 683 ED29 1 684 ED30 0 685 ED31 7 686 ED31b 3 687 ED31c 0 688 ED32 0 689 ED33 3 690 ED34 0 691 ED35 0 692 ED36 0 693 ED37 3 694 ED38 3 695 ED39 0 696 ED40 1 697 ED41 7 698 ED42 7 699 ED43 7 700 ED44 7 701 ED45 7 702 ED46 1 703 ED47 7 704 ED48 6 705 ED49 0 706 ED49b 7 707 ED50 0 708 ED51 7 709 ED52 0 710 ED53 7 711 ED54 0 712 ED55 0 713 ED56 3 714 ED57 7 715 ED58 6 716 ED59 6 717 ED61 0 718 ED62 3 719 ED63 0 720 ED64 7 721 ED65 3 722 ED68 1 723 ED69 3 724 ED70 5 725 ED71 6 726 ED72 7 727 ED73 7 728 ED74 4 729 ED75 4 730 ED76 3 731 ED77 7 732 ED78 3 733 ED79 7 734 ED80 0 735 ED81 0 736 ED82 4 737 ED83 1 738 ED84 4 739 ED85 7 740 ED86 7 741 ED87 0 742 ED87a 0 743 ED88 7 744 ED89 7 745 ED90 3 746 ED91 7 747 ED92 0 748 ED93 7 749 ED94 6 750 ED95 0 751 ED96 0 752 ED97 0 753 ED98 6 754 ED99a 0 755 ED100 7 756 ED101 3 757 CD1 7 758 CD3 0 759 CD7 1 760 CD28 5 761 CD31 2 762 CD39 4 763 CD40 1 764 CD43 0 765 CD48 5 766 CD49 4 767 CD55 3 768 CD56 7 769 CD64 0 770 CD67 0 771 CD76 2 772 CD77 4 773 CD79 0 774 CD82 4 775 CD83 0 776 CD87 0 777 CD88 6 778 CD89 4 779 CD90 5 780 CD91 6 781 CD92 7 782 CD92a 7 783 CD92b 7 784 CD93 2 785 CD94 2 786 CD94b 4 787 CD95 1 788 CD96 6 789 CD99 0 790 CD102 1 791 CD104a 4 792 CD104b 4 793 CD105 6 794 CD107 0 795 CD108 7 796 CD109 0 797 EJ1 6 798 EJ2 5 799 EJ2b 0 800 EJ3 0 801 EJ4 7 802 EJ6 0 803 EJ7 7 804 EJ7b 7 805 EJ8 0 806 EJ9 0 807 EJ12 6 808 EJ13 0 809 EJ13b 6 810 EJ14 0 811 EJ15 6 812 EJ17 7 813 EJ18 0 814 EJ19 0 815 EJ20 0 816 EJ21 0 817 EJ22 0 818 EJ23 0 819 EJ24 5 820 EJ25 7 821 EJ26 0 822 EJ27 0 823 EJ28 6 824 EJ29 0 825 EJ30 3 826 EJ31 0 827 EJ32 7 828 EJ33 0 829 EJ34 7 830 EJ35 3 831 EJ37 6 832 EJ39 7 833 EJ40 7 834 EJ41 0 835 EJ42 3 836 EJ43 5 837 EJ44 6 838 EJ45 0 839 EJ46 6 840 EJ47 0 841 EJ49b 6 842 EJ50 0 843 EJ51 3 844 EJ52 0 845 EJ53 7 846 EJ54 6 847 EJ55 7 848 EJ56 7 849 EJ57 0 850 EJ58 7 851 EJ59 0 852 EJ60 0 853 EJ62a 4 854 EJ62b 4 855 EJ63a 0 856 EJ63 0 857 EJ64 0 858 EJ65 0 859 EJ66 0 860 EJ67 6 861 EJ68 0 862 EJ69 0 863 EJ71 6 864 EJ72 0 865 EJ73 6 866 EJ74 6 867 EJ75 7 868 EJ76 5 869 EJ77 0 870 EJ78 7 871 EJ79 4 872 EJ80 4 873 EJ81 0 874 EJ81b 7 875 EJ81c 7 876 EJ82 0 877 EJ84 7 878 EJ85 0 879 EJ86 5 880 EJ87 0 881 EJ88 7 882 EJ89 7 883 EJ90 0 884 EJ91 7 885 EJ92 7 886 EJ93 3 887 EJ94 0 888 EJ95 7 889 EJ96 7 890 EJ97 5 891 EJ98 0 892 EJ99 0 893 EJ100 0 894 EJ101 0 895 S1 3 896 S2 3 897 S3 7 898 S4 0 899 S5 6 900 S6 7 901 S6b 0 902 S6c 0 903 S7 7 904 S8 0 905 S9 0 906 S10 7 907 S10b 0 908 S10c 7 909 S10d 0 910 S11 0 911 S12 7 912 S13 0 913 S14b 2 914 HH1 1 915 HH2 1 916 HH3 0 917 HH4 0 918 HH5 3 919 HH6 7 920 HH7 5 921 HH8 0 922 HH9 6 923 HH10 1 924 HH11 6 925 HH12 1 926 HH13 6 927 HH14 7 928 HH15 3 929 HH16 7 930 HH17 7 931 Reinforce1 0 932 Reinforce2 0 933 Reinforce3 0 934 Reinforce4 4 935 Reinforce5 4 936 Reinforce102 0 937 LE1 3 938 LE2 7 939 LE3 5 940 LE5 0 941 LE6 5 942 LE8 0 943 LE9 0 944 LE10 0 945 LE12 7 946 LE13 7 947 LE15 1 948 LE16 2 949 RE1 5 950 RE2 7 951 RE3 0 952 RE5 1 953 RE6 7 954 RE7 3 955 RE8 7 956 RE9 0 957 RE10 0 958 RE12 0 959 RE13 0 960 RE14 4 961 Th1 0 962 Th2 0 963 Th3 7 964 Th4 0 965 Th5 6 966 Th6 6 967 Th7 6 968 Th8 0 969 Th9 6 970 Th10 1 971 Th11 1 972 Th12 1 973 Th13 0 974 Th14 1 975 Th15 7 976 Th16 0 977 Th17 7 978 Th18 7 979 Th19 6 980 Th20 3 981 Th21 6 982 Th22 7 983 Th23 0 984 Th24 0 985 M1 0 986 M2 0 987 M3 7 988 M4 0 989 M5 6 990 M6 6 991 M7 6 992 M8 6 993 Conn101 1 994 Conn102 1 995 Conn103 6 996 Conn104 6 997 Conn105 0 998 Conn106 6 999 Conn201 1 1000 Conn202 5 1001 Conn203 1 1002 Conn204 7 1003 Conn205 7 1004 Conn206 6 1005 Conn207 1 1006 Conn301 6 1007 Conn302 6 1008 Conn303 2 1009 Conn304 2 1010 Conn305 2 1011 Conn306 4 1012 Conn307 7 1013 Conn308 6 1014 Conn309 6 1015 Conn310 1 1016 Conn311 2 1017 Conn312 5 1018 Conn313 1 1019 Conn314 6 1020 Conn315 5 1021 Conn401 4 1022 Conn402 4 1023 Conn403 6 1024 Conn501 1 1025 Conn502 6 1026 Conn503 6 1027 Conn504 6 1028 Conn505 6 1029 Conn506 0 1030 Conn507 6 1031 Conn508 5 1032 Conn509 6 1033 Conn509b 6 1034 Conn510 1 1035 Conn601 1 1036 Conn602 6 1037 Conn603 1 1038 Conn603b 1 1039 Conn604 6 1040 Conn605 6 1041 Conn606 6 1042 Conn607 1 1043 Conn608 1 1044 Conn609 7 1045 Conn610 0 1046 Conn611 7 1047 Conn701 6 1048 Conn702 3 1049 Conn703 4 1050 Conn704 6 1051 Conn705 6 1052 Conn706 0 1053 Conn707 0 1054 Conn708 1 1055 Conn801 7 1056 Cut101 0 1057 Cut201 0 1058 Cut302 5 1059 Cut303 5 1060 Cut304 1 1061 Cut501 7 1062 Cut601 0 1063 AS1 0 1064 AS2 0 1065 AS3 7 1066 AS4 6 1067 AS5 7 1068 AS6 6 1069 AS7 0 1070 Shape1 6 1071 Shape2 1 1072 Shape3 0 1073 Shape4 6 1074 Shape5 6 1075 Shape6 3 1076 Shape6b 3 1077 Shape7 3 1078 Shape8a 3 1079 Shape8b 3 1080 Shape8c 3 1081 Shape8d 7 1082 Shape9a 0 1083 Shape9b 0 1084 Shape9c 0 1085 Shape10 1 1086 Shape11 6 1087 Shape12 6 1088 Shape12b 7 1089 Shape13 0 1090 Shape14 1 1091 Shape15 1 1092 Shape16 5 1093 Shape17 4 1094 Shape18 6 1095 Shape18b 6 1096 Shape18c 7 1097 Shape19 6 1098 Shape20 1 1099 Shape21 6 1100 Shape22 4 1101 Shape23 7 1102 Shape24 7 1103 Shape25 7 1104 Shape26 1 1105 Shape27 7 1106 Shape28 3 1107 Shape29 2 1108 Shape30 0 1109 Shape31 0 1110 Shape32 1 1111 Shape33 6 1112 Shape34 7 1113 Shape35 2 1114 Shape36 2 1115 Shape37 2 1116 Shape38 0 1117 Shape39 3 1118 Shape40 3 1119 Shape41 3 1120 Shape42 6 1121 Shape43 0 1122 Shape44 6 1123 Shape45 1 1124 Shape46 0 1125 Shape47 1 1126 Shape48 0 1127 Shape49 7 1128 Shape50 0 1129 Shape51 0 1130 Shape53 0 1131 Shape54 0 1132 Shape55 1 1133 Shape56 7 1134 Shape57 1 1135 Shape58 3 1136 Shape59 0 1137 Shape60 7 1138 Shape60b 7 1139 Shape60c 0 1140 Shape61 5 1141 Shape62 7 1142 Shape63 7 1143 Shape64 0 1144 Shape65 0 1145 Shape66 1 1146 Shape67 3 1147 Shape68 7 1148 Shape69 7 1149 Shape70 7 1150 Shape71 7 1151 Shape72 7 1152 Shape73 1 1153 Shape73b 1 1154 Shape74 4 1155 Shape75 0 1156 Shape76 5 1157 Shape77 0 1158 Shape78 0 1159 Shape79 6 1160 Shape80 4 1161 Shape81 6 1162 Shape82 4 1163 Shape83 1 1164 Shape84 5 1165 Shape85 5 1166 Shape86 0 1167 Shape87 1 1168 Shape88 0 1169 Sente1 4 1170 Sente1b 4 1171 Sente1c 4 1172 Sente1d 1 1173 Sente2 1 1174 Sente3 0 1175 Sente4 0 1176 Sente5 1 1177 Sente6 6 1178 Sente7 0 1179 Sente8 0 1180 Sente9 1 1181 Sente10 0 1182 Sente11 6 1183 Sente13 3 1184 Sente13b 3 1185 Sente13c 6 1186 Sente13d 7 1187 Sente13e 2 1188 Sente14 5 1189 Sente15 5 1190 Sente16 0 1191 Sente17 0 1192 Sente18 0 1193 Sente19 5 1194 Sente20 5 1195 Sente21 5 1196 Sente22 0 1197 Sente23 6 1198 Sente24 0 1199 DD1 1 1200 DD2 2 1201 DD2b 2 1202 DD3 1 1203 DD4 1 1204 DD5 1 1205 DD6 1 1206 DD7 0 1207 DD8 2 1208 DD8b 4 1209 DD9 2 1210 DD10 0 1211 DD11 1 1212 DD12 6 1213 DD13 1 1214 Temp1 0 1215 Temp5 0 1216 Temp6 6 1217 Temp7a 7 1218 Temp7b 7 1219 Temp8 3 1220 Temp9 0
