Branch Coverage

blib/lib/Image/Bitmap2Paths.pm
Criterion Covered Total %
branch 151 968 15.6


line true false branch
35 0 1 $debug ? :
142 76 6 unless $bm->[$y][$x]
149 40 8 unless $$bm[$y + $dy][$x + $dx]
152 4 4 unless $$bm[$y + 2 * $dy][$x + 2 * $dx]
155 6 0 if @OFF
156 6 0 if $near[$y][$x]
191 0 8 if 6 < $cNmin
193 4 4 if ($cNmin <= 1)
194 4 0 if $$N0[($dir + 4) % 8] or $cN0min <= 2
196 0 0 unless (grep $$N0min[($dir + $_) % 8], -1, 1)
198 0 0 if @perp <= 1
201 4 0 if ($N->[$dir])
203 0 0 if 6 < $cNN and $Nmin->[$dir]
204 4 0 if push @res, ["doubleray", 0]
210 0 0 $seen_next2 ? :
215 0 0 if $$nearmin[$y + $dy1][$x + $dx1][$DD]
216 0 0 if not $N0min->[$DD] or $$N0min[($DD + 4) % 8]
224 0 0 if (@NEAR)
226 0 0 if $NEAR[0][2] and $cNmin <= 3 and $cN >= 3 and $dir & 1 and not $$N0min[($dir + 2 * $n0) % 8] and not grep($$N0min[($dir + $_ * $n0 + 4) % 8], 1, 2)
230 0 0 if $NEAR[0][2] and $cNmin <= 2 and not $dir & 1
233 0 0 if not $dir & 1 and $NEAR[0][1] and $NEAR[0][2] ^^ $NEAR[0][3] and !$NEAR[0][3] || $NEAR[0][4] and $cN0min <= 3
240 0 0 unless $$Nmin[($dir + 2 * $D) % 8]
243 0 0 if ($nnn) { }
0 0 elsif (not @NEAR and $cNmin == 2 and $$N0min[($dir + 4) % 8] and $cN0min <= 3 + ($dir & 1) and $cnt->[$y][$x] >= 3 + ($dir & 1)) { }
244 0 0 if $nnn == 2
246 0 0 if ($$N0[($dir + 4) % 8] || !($dir & 1) && $cN0min == 3 and not $$N0min[($dir + 2 * $DD) % 8] and $$px[$y + $dy + 2 * $DD * $dx][$x + $dx - 2 * $DD * $dy] || !($dir & 1) && $$cntmin[$y + $dy + $DD * $dx][$x + $dx - $DD * $dy] <= 3)
251 0 0 if ($cN0min == 3 and $cNmin == 2 and not $dir % 2 and $$cntmin[$y + $dy + $DD * $dx][$x + $dx - $DD * $dy] == 2 and my(@back) = grep($$N0min[($dir + 4 + $_) % 8], 1, -1))
254 0 0 @back ? :
0 0 if push @res, ["Btail", $DD, 0, undef, undef, undef, ["N", $x + $dx, $y + $dy, ($dir + 2 * $DD) % 8], ["N", $x + $dx - $DD * $dy, $y + $dy + $DD * $dx, ($dir - 2 * $DD) % 8], ["I", $x + $dx - $DD * $dy, $y + $dy + $DD * $dx, ($dir + 4 + $DD) % 8], @back ? ["E", $x, $y, ($dir + 4 + $back[-1]) % 8] : ()]
259 0 0 $dir & 1 ? :
0 0 if push @res, ["Near-corner", $DD, 0, [",", [$x + $dx, $y + $dy, ($dir + 2 * $DD) % 8]], undef, undef, $dir & 1 ? () : (["I", $x, $y, ($dir + $DD) % 8], ["Ef", $x + $dx, $y + $dy, ($dir + 4) % 8])]
264 0 0 if $dir & 1 and not $$N0min[($dir + $DD) % 8] and $cNmin <= 2
265 0 0 if $cNmin == 3 and $dir & 1 and $nnn == 1 and $$N0min[($dir + 4) % 8] and $$Nmin[($dir + 4 - $DD) % 8] and $$Nmin[($dir + 4 - 2 * $DD) % 8]
273 0 0 if $$N0min[($dir + $D * $step) % 8]
275 0 0 unless $DDD
278 0 0 if $$cntmin[$y + $dy1][$x + $dx1] <= 4 - ($dir & 1) and $$nearmin[$y + $dy1][$x + $dx1][($dir + 4 - $DDD) % 8]
281 0 0 if $dir & 1
283 0 0 unless $$Nmin[($dir + $D) % 8]
286 0 0 if $cNmin <= 2 and not $dir & 1 and $nnn1 and not $$N0min[($dir + $DD + 4) % 8]
288 0 0 if $cNmin == 3 and not $dir & 1 || $nnn1 || $across2 || $$N[($dir + 2) % 8] || $$N[($dir - 2) % 8]
290 0 0 if push @res, ["?"]
324 0 0 if ($$N0min[($dir + $d) % 8])
325 0 0 if ($bad and $dir & 1 and $$N0min[($dir + 4) % 8] and not $$N0min[($dir + 3) % 8] and not $$N0min[($dir + 5) % 8])
329 0 0 if ($NNN->[$dir] and not $$NNN[($dir1 + 1) % 8] and not $$NNN[($dir1 - 1) % 8])
334 0 0 if $bad or not $dir & 1 and $$N0min[($dir + 2 * $d) % 8]
335 0 0 if ($dir & 1 and $$Nmin[($dir + 2 * $d) % 8] and not $$Nmin[($dir - 2 * $d) % 8])
339 0 0 if ($$pxmin[$y + $dy + 2 * $dy1][$x + $dx + 2 * $dx1]) { }
341 0 0 $$px[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] ? :
0 0 if $$px[$y + 3 * $dy1][$x + 3 * $dx1] and $$px[$y + 2 * $dy + 2 * $dy1][$x + 2 * $dx + 2 * $dx1] ^^ $$px[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] and !$$px[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] || $cnt->[$y][$x] < 5 && $$cnt[$y + $dy1][$x + $dx1] < 6 and not $$px[$y + $dy + 3 * $dy1][$x + $dx + 3 * $dx1] and $cntmin->[$y][$x] < 6 and !$$px[$y - $dy1][$x - $dx1] || $cntmin->[$y][$x] + $$cntmin[$y - $dy1][$x - $dx1] < 10 and !$$px[$y - $dy + $dy1][$x - $dx + $dx1] || $cnt->[$y][$x] + $$cnt[$y - $dy + $dy1][$x - $dx + $dx1] < 9 and !($$px[$y + 4 * $dy1][$x + 4 * $dx1] && $$px[$y + 5 * $dy1][$x + 5 * $dx1]) || $cntmin->[$y][$x] + $$cntmin[$y + 4 * $dy1][$x + 4 * $dx1] + $$cntmin[$y + 5 * $dy1][$x + 5 * $dx1] < 15 and grep((!$$px[$y + $_ * $dy1 - $dy][$x + $_ * $dx1 - $dx]), 2, 3, 4) and !$$px[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] || (grep($$px[$y + 4 * $dy1 + $_ * ($dy - $dy1)][$x + 4 * $dx1 + $_ * ($dx - $dx1)], 0, 1) || $$px[$y - $dy1][$x - $dx1]) && $$cntmin[$y + 3 * $dy1][$x + 3 * $dx1] < 6 && $$cnt[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] > 2 and ($last = !!$$px[$y + 4 * $dy1][$x + 4 * $dx1]) || $$px[$y + 5 * $dy1 - $dy][$x + 5 * $dx1 - $dx]
364 0 0 if ($last = !!$$px[$y + 3 * $dy1][$x + 3 * $dx1]) || $$px[$y + 4 * $dy1 - $dy][$x + 4 * $dx1 - $dx] and $$px[$y + 2 * $dy + $dy1][$x + 2 * $dx + $dx1] and $last || !$$px[$y + 3 * $dy1 - $dy][$x + 3 * $dx1 - $dx] and $last || $$cntmin[$y + $dy1][$x + $dx1] < 6 && ($cntmin->[$y][$x] < 6 && ($cntmin->[$y][$x] < 5 || $$px[$y - $dy1][$x - $dx1] && $$cntmin[$y - $dy1][$x - $dx1] < 4))
375 0 0 if $_ ne $opp
377 0 0 $$Nmin[($dir - 2 * $d) % 8] ? :
0 0 if push @res, [$$Nmin[($dir - 2 * $d) % 8] ? "3fork3" : "rhombus", $d, 0, ["\x{b4}", [$x + $dx, $y + $dy, @dep]]]
380 0 0 unless $bad
381 0 0 if ($$N0min[($dir + 4) % 8] and $cN0min <= 4 and $dir & 1)
383 0 0 if $px->[$mirY][$mirX] and $cntmin->[$mirY][$mirX] <= 4 and $cnt->[$mirY][$mirX] >= 4 and $nearmin->[$mirY][$mirX][($dir - 2 * $d) % 8]
387 0 0 if push @res, ["fake-curve", $d, 0, ["curve", [$x + $dx[$baddir], $y + $dy[$baddir], ($dir + $d) % 8]]]
400 0 0 if $$cntedge[$l->[1]][$l->[0]] != 1
441 0 0 unless my $ray = $rays->[$dir]
442 0 0 if $ray->[0] =~ /^m/ and $basetype =~ /^m/
446 0 0 if $$rays[($dir + $next) % 8] and $$rays[($dir + $next) % 8][0] =~ /^[Dr3\WP]/
475 0 0 unless $rot
479 0 0 $i ? :
482 0 0 if ($Rot == 3) { }
0 0 elsif ($Rot == 2) { }
0 0 elsif ($Rot == 1) { }
508 76 6 unless my $o = $offs[$y][$x]
510 0 8 unless not $r->[$_]
512 6 0 if $r
524 4 4 unless $DEP or @rest or $remove
525 0 4 $DEP ? :
0 4 $DEP && !ref($DEP->[0]) ? :
533 0 0 unless &post_inspect_ray($X, $Y, $DIR, \@rays, $type)
535 0 0 if $KEEP
537 0 0 unless $keep
539 0 4 if $remove and $keep
540 0 4 if $unignore and $keep
541 4 0 if @rest and $keep
542 0 4 unless $keep
543 0 4 if ($keep and $type =~ /^[3r]/)
545 0 0 unless $rays[$y + $dy][$x + $dx][($dir + 4) % 8][0] =~ /^([dcfs])/
546 0 0 unless $1 eq "s"
549 0 4 if not $keep and $TO eq "\x{b4}"
557 0 0 unless (@opp = grep($rhombi{join $;, $x + $dx + $dx1, $y + $dy + $dy1, ($_ + 4) % 8}, $dir, $dir1))
558 0 0 if $t eq "s" and $cnt[$y + $dy1][$x + $dx1] <= 4
561 0 0 if $t eq "s"
563 0 0 if (not $dir % 2 and $cnt[$y][$x] == 3 and +($rays[$y][$x][($dir + 4) % 8] || $ER)->[0] eq "tail" and $cnt[$y + $dy1][$x + $dx1] == 4 and +($rays[$y + $dy1][$x + $dx1][$dir] || $ER)->[0] eq "doubleray" and +($rays[$y + $dy + $dy1][$x + $dx + $dx1][$dir] || $ER)->[0] =~ /^[dc]/)
569 0 0 if ($cnt[$y + $dy + $dy1][$x + $dx + $dx1] == 3 and grep((!($_ % 2) && +($rays[$y + $dy + $dy1][$x + $dx + $dx1][$_] || $ER)->[0] eq 'tail'), @opp))
574 0 0 if $rays[$y + $g->[2]][$x + $g->[1]][($g->[0] + 4) % 8][0] eq "doubleray"
576 0 0 if ($cnt[$y + $good->[2]][$x + $good->[1]] == 4 and $rays[$y + $good->[2]][$x + $good->[1]][($good->[0] + 4) % 8][0] eq "doubleray" and $rays[$y][$x][($good->[0] + 4) % 8][0] =~ /^[dc]/)
586 0 0 unless $seenlong{join $;, $x, $y, $x + $dx + $dx1, $y + $dy + $dy1}
601 0 4 if ($pp->[0] =~ /^I((I)|1)?$/)
604 0 0 if $protect[$y][$x][$dir] or $2 and $rays[$y][$x][$dir][0] ne "?"
606 0 0 if $1
613 0 4 if $pp->[0] eq "L"
614 0 4 if ($pp->[0] =~ /^E([Ef])?(m)?$/)
617 0 0 $T eq 'f' ? :
0 0 $T ? :
0 0 unless $rays[$y][$x][$dir][0] =~ ($T ? $T eq "f" ? qr/^f/ : qr/^[?P]/ : qr/^[\WP]/)
623 0 4 if (lc $pp->[0] eq "n")
626 0 0 unless $cnt[$y][$x] == $C and $rays[$y][$x][$dir][0] eq "?"
630 0 4 if ($pp->[0] eq "S")
632 0 0 unless $cnt[$y][$x] == 4 and $rays[$y][$x][$dir][0] =~ /^[?fP\264r]/
636 0 4 if ($pp->[0] eq "T")
639 0 0 unless $cnt[$Y][$X] == 3 and $rays[$Y][$X][$DIR] and ($rays[$Y][$X][$DIR][0] || '') =~ /^t/
643 0 0 unless $cnt[$y][$x] == 1 and $rays[$y][$x][$dir] and ($rays[$y][$x][$dir][0] || '') =~ /^d/
648 0 4 if ($pp->[0] =~ /a/)
651 0 0 if $t =~ /^[dctNC]/
655 4 0 if ($pp->[0] =~ /t/)
659 4 0 unless $T->[0] =~ /^c/
661 0 0 unless $rays[$Y][$X][($DIR + $rot + 4) % 8][0] =~ /^d/
664 0 0 unless $cnt[$Y + $dy1][$X + $dx1] == 4
665 0 0 unless $rays[$Y + $dy1][$X + $dx1][($DIR + $rot + 4) % 8][0] =~ /^d/
666 0 0 unless $cnt[$Y + 2 * $dy1][$X + 2 * $dx1] == 3
669 0 0 unless +($rays[$Y + $dy1][$X + $dx1][($DIR + 2 * $rot + 4) % 8] || $ER)->[0] =~ /^e/
670 0 0 unless +($rays[$Y + $dy1][$X + $dx1][($DIR + 3 * $rot + 4) % 8] || $ER)->[0] =~ /^f/
673 0 0 unless $cnt[$Y + $dy1 + $dy2][$X + $dx1 + $dy2] == 3
674 0 0 unless +($rays[$Y + $dy1 + $dy2][$X + $dx1 + $dx2][($DIR + 2 * $rot) % 8] || $ER)->[0] =~ /^f/
680 0 0 if ($pp->[0] =~ /C/)
684 0 0 if not $T->[0] =~ /^(c)/i or $midLong{join $;, 2 * $X + $dx, 2 * $Y + $dy}
688 0 0 if ($opp eq 'c') { }
697 0 0 unless $rays[$YY + $dy1][$XX + $dx1][($DD + 4) % 8][0] =~ /^([F\260])/ and $1 eq 'F' || $rays[$YY][$XX][($DD - 3 * $R) % 8][0] =~ /^C/ && ($deg_corner = 1) and $rays[$YY][$XX][$DD][0] =~ /^([cF1d])/ and not +(my $m1 = $1) eq 'd' && $rays[$YY + $dy1][$XX + $dx1][$DD][0] =~ /^d/
701 0 0 unless $good
702 0 0 if $rays[$YY][$XX][$DD][0] =~ /^d/ and $rays[$YY + $dy1][$XX + $dx1][$DD][0] =~ /^a/ and $rays[$YY + $dy1][$XX + $dx1][$DD][1] == -$R
706 0 0 if not $good and $seen =~ /F1|1F|(11)/ and $1 || !$deg_corner
707 0 0 if $arrows == 2
713 0 0 if ($rev) { }
714 0 0 unless $rays[$YY + $dy1][$XX + $dx1][($DD + 4) % 8][0] =~ /^C/ and $rays[$YY][$XX][$DD][0] =~ /^c/ and $rays[$YY][$XX][$DD][1] == $R
717 0 0 unless $rays[$YY + $dy1][$XX + $dx1][($DD + 4) % 8][0] =~ /^\260/ and +($rays[$YY][$XX][($DD - 3 * $R) % 8] || $ER)->[0] =~ /^([1])/ and $1 ne 'C' || $rays[$YY][$XX][($DD - 3 * $R) % 8][1] == $R and $rays[$YY][$XX][$DD][0] =~ /^([cd])/
725 0 0 unless ($good)
732 0 0 if ($pp->[0] eq "\x{b4}")
742 0 0 if ($T->[0] eq 'Probable-curve') { }
0 0 elsif ($T->[0] eq "\264" and $B == -$rays[$Y][$X][$DIR][1]) { }
743 0 0 unless !@rem_postpone || $ray_round == 1 and $rays[$Y - $dy0][$X - $dx0][($DIR + $B) % 8][0] eq "\x{b4}" and not $nearmin[$Y + $dy][$X + $dx][($DIR + 2 * $B) % 8] && $nearmin[$Y - $dy0][$X - $dx0][($DIR + 4) % 8]
753 0 0 unless $rays[$Y + $dy + $dy1][$X + $dx + $dx1][($DIR + 4 - $B) % 8][0] eq "\x{b4}"
756 0 0 unless $cntmin[$Y + $dy1][$X + $dx1] <= 4 + !!$extra
757 0 0 if $nearmin[$Y][$X][($DIR + 4 - $B) % 8]
758 0 0 if $nearmin[$Y + $dy][$X + $dx][($DIR + $B) % 8]
763 0 0 unless $cntmin[$Y + $dy1][$X + $dx1] <= 4 + !!$extra and $cntmin[$Y + $dy + $dy1][$X + $dx + $dx1] <= 3 and $cntmin[$Y - $B * $dx1][$X + $B * $dy1] <= 3
765 0 0 unless $cntmin[$Y][$X] <= 3 + !!$Ex[0] and $cntmin[$Y + $dy][$X + $dx] <= 3 + !!$Ex[1]
769 0 0 if $cntmin[$Y - $B * $dx1][$X + $B * $dy1] < 3
771 0 0 if $cntmin[$Y + $dy + $dy1][$X + $dx + $dx1] < 3
772 0 0 if $extra
776 0 0 $LOOP[0] ? :
0 0 $LOOP[1] ? :
783 0 0 $LOOP[0] ? :
0 0 $LOOP[1] ? :
796 0 0 if ($type eq "a")
800 0 0 $p[1] ? :
0 0 unless $rays[$y][$x][$dir][0] =~ /^a/ and !$p[1] || $rays[$y][$x][($dir + 4) % 8][0] eq $p[2]
803 0 0 if ($type eq "R")
807 2 0 unless @rem_postpone
811 0 0 unless $SEEN[$y][$x]++
816 0 82 unless my $RAYS = $rays[$y][$x]
817 76 6 unless @$RAYS
819 8 0 unless $RAYS->[$dir][0] =~ /^(f)/i
820 0 0 if (my $code = $1) eq "F" and $cnt[$y][$x] != 1
824 0 0 if $code eq "F"
830 0 2 unless @$ER == 1 and $ER->[0] eq ""
841 0 82 unless my $RAYS = $rays[$y][$x]
842 76 6 unless @$RAYS
843 6 0 unless grep {$RAYS->[$_][0] =~ /^[D\WP]/;} @{$$offs[$y][$x];}
848 0 82 unless my $RAYS = $rays[$y][$x]
849 76 6 unless @$RAYS
850 0 6 unless $Simple[$y][$x]
852 8 0 unless $RAYS->[$dir][0] =~ /^e/
863 0 82 unless my $RAYS = $rays[$y][$x]
864 76 6 unless @$RAYS
867 6 0 unless grep {$RAYS->[$_][0] =~ /^[D\WP]/;} @{$$offs[$y][$x];}
870 0 0 if $RAYS->[$dir][0] =~ /^[D\WP]/
873 0 0 if +($$RAYS[($dir + $rot) % 8] || $ER)->[0] =~ /^[D\WP]/ and not $RAYS->[$dir][0] =~ /^[BE]/
883 0 82 unless my $RAYS = $rays[$y][$x]
884 76 6 unless my $ok = $Simple[$y][$x]
887 4 4 if $dir > 3
889 0 0 unless $ok or $smpl->[$dir] or 2 >= $cnt->[$y][$x] and $RAYS->[$dir][0] eq "\x{b0}" and ++$semi_bad
893 0 0 unless $Simple[$y1][$x1] or $simpleray[$y1][$x1][$dir1] or 2 >= $cnt->[$y1][$x1] and $rays[$y1][$x1][$dir1][0] eq "\x{b0}" and ++$semi_bad < 2
899 0 4 unless 2 - $semi_bad == grep(/^[dcnstB1FMESmNCbTAaR]/, $RAYS->[$dir][0], $rays[$y1][$x1][$dir1][0])
907 78 4 unless $Simple[$y][$x] and ($cntedge[$y][$x] || 0) <= 1
909 0 4 if $cnt->[$y][$x] > 6
915 4 0 if $cntedge[$y][$x]
918 4 0 if $dir != ($Neighbors[$d - 1] + 1) % 8
923 0 4 unless $RAYS->[$dir][0] =~ /^[dKZfIeiFMxR]/
925 0 4 if $RAYS->[$dir][0] =~ /^[dR]/ and not $sharp_angle
927 0 0 if $RAYS->[$dir][0] =~ /^[FM]/ and defined $L and not $sharp_angle
929 0 4 if $RAYS->[$dir][0] =~ /^Z/
932 0 4 unless my $rays1 = $rays[$y1][$x1]
933 0 4 unless my $R = $$rays1[($dir + 4) % 8]
934 0 4 if $RAYS->[$dir][0] =~ /^e/ and $R->[0] =~ /^d/
935 0 4 if $RAYS->[$dir][0] =~ /^[fK]/ and $R->[0] =~ /^d/
937 4 0 unless $bad
941 0 4 if @res > 2
942 4 0 if ($cntedge[$y][$x])
952 0 4 if @res
957 82 0 unless my $cand = $candidates_way_out{join $;, $y, $x}
962 0 0 if ($cntedge[$y][$x]) { }
966 0 0 if $d->[0]
971 0 0 unless ($good)
977 0 0 if $good
979 0 0 if @res > 1
994 0 0 if $updated{join $;, $x, $y, $dir}++ or $updated{join $;, $x1, $y1, $dir1}++
1000 0 0 if not ref $e and $e eq "erased"
1005 0 0 unless @atBEG or @atEND
1007 0 0 unless (@atBEG and @atEND)
1009 0 0 if @have == 2
1012 0 0 if (@atEND) { }
1021 0 2 if $ER and @$ER != 1 || $ER->[0] ne ''
1031 152 12 unless $pixels->[$y][$x]
1032 0 12 unless $cntedge->[$y][$x]
1037 2 2 if ($lastedge)
1040 78 4 if $blob->[$y][$x] or ($cntedge->[$y][$x] || 0) != 1
1042 4 0 unless $$blob[$y + $dy[$D]][$x + $dx[$D]]
1044 0 0 $D % 2 ? :
1045 0 0 if $$blob[$y + $dy[($D + $rot) % 8]][$x + $dx[($D + $rot) % 8]]
1048 0 0 if $dir != $D and $$blob[$y + $dy[$dir]][$x + $dx[$dir]]
1050 0 0 if $C and not $$skip{join $;, $y, $x}
1056 0 20 unless $blob->[$y]
1058 164 0 unless $blob->[$y][$x]
1060 0 0 if $$blob[$y + $dy[$dir]][$x + $dx[$dir]]
1074 0 0 unless $edge->[$y]
1076 0 0 unless $edge->[$y][$x]
1078 0 0 unless $edge->[$y][$x][$dir]
1081 0 0 if ($dir % 2) { }
1085 0 0 $dy == $dy1 ? :
1087 0 0 $dy == $dy1 ? :
1090 0 0 if ($blob[$D->[0]][$D->[1]] || 0) >= 3 - ($DD == 1)
1091 0 0 if $$pixels[$D->[0]][$D->[1]]
1093 0 0 if $c == 3 and $C >= 2
1097 0 0 if $clear or $CC >= 3 and $CC[1] and $CC[0] || $CC[2]
1105 0 0 if $neigh{$rot}[0] and $neigh{$rot}[1]
1107 0 0 if (not $done and $cntedge->[$y][$x] == 1 and $cntedge->[$y1][$x1] == 1)
1108 0 0 if grep((2 == $neigh{'1'}[$_] + $neigh{'-1'}[$_]), 0, 1)
1109 0 0 if (not $done and $tot == 1)
1111 0 0 if ($lastN) { }
1116 0 0 if (($blob[$y + $dy][$x + $dx] || 0) >= 3 and ($blob[$y + 2 * $lastDy][$x + 2 * $lastDx] || 0) >= 3 and ($blob[$y + $dy + $lastDy][$x + $dx + $lastDx] || 0) >= 3 and not $blob[$y + $dy - $lastDy][$x + $dx - $lastDx])
1135 0 0 if $suspectShaft{$K} != 2
1140 0 0 if ($cntedge->[$y1][$x1] || 0) != 1 or $lastedge->[$y1][$x1] != $dir
1158 78 4 unless 1 == ($cntedge->[$y][$x] || 0) and not $$inLong{join $;, $x, $y}
1162 0 4 if $$inLong{join $;, $x1, $y1}
1163 2 2 if ($dir < 4)
1164 0 2 if 1 == ($cntedge->[$y1][$x1] || 0) and $lastedge->[$y1][$x1] == ($dir + 4) % 8
1168 0 0 if 1 == ($blob->[$y1][$x1] || 0) or not $dir & 1 and 1 == ($cntedge->[$y1][$x1] || 0) and 2 == abs(($lastedge->[$y1][$x1] - $dir) % 8 - 4) and $rays->[$y][$x][$dir][0] =~ /^([tBdcN])/ and $1 ne 'c' || ($r = $rays->[$y][$x][$dir][1]) && !$rays->[$y][$x][($dir + 4 + $r) % 8]
1191 0 40 unless $cntedge->[$y1][$x1]
1207 0 82 unless my $RAYS = $rays->[$y][$x]
1208 76 6 unless @$RAYS
1210 0 8 if ($RAYS->[$dir][0] =~ /^3/)
1216 0 0 unless $rays->[$y1][$x1][($d + 4) % 8][0] =~ /^([PI\264Fr])/
1219 0 0 if ($cnt->[$y1][$x1] > 4)
1221 0 0 unless $blobs < 2
1224 0 0 unless grep((!$$cnt[$y + $_ * (2 * $dy[$dir] - $dy[$d])][$x + $_ * (2 * $dx[$dir] - $dx[$d])]), -1, 1, 2) or grep((!$$cnt[$y1 + $_ * (2 * $dy[$dir] - $dy[$d])][$x1 + $_ * (2 * $dx[$dir] - $dx[$d])]), -1, 1) or grep(($cntE += !!$$rays[$y + $_ * (2 * $dy[$dir] - $dy[$d])][$x + $_ * (2 * $dx[$dir] - $dx[$d])][$D]), -1, 0, 1), grep(($cntE += !!$$rays[$y1 + $_ * (2 * $dy[$dir] - $dy[$d])][$x1 + $_ * (2 * $dx[$dir] - $dx[$d])][$D]), -1, 0), $cntE < 2
1233 0 0 if $Opp =~ /^[Fr]/ and $edge->[$y1][$x1][($d + 4) % 8]
1234 0 0 if ($Opp =~ /^[Fr]/ and $$rays[$y + $dy[$dir]][$x + $dx[$dir]][($dir + (2 + $dir % 2) * $rot) % 8] and $$rays[$y + $dy[$dir]][$x + $dx[$dir]][($dir + (2 + $dir % 2) * $rot) % 8][0] =~ /^\242/)
1239 0 0 if (($cntedge->[$y1][$x1] || 0) == 1 and ($cntedge->[$y][$x] || 0) == 1 and $edge->[$y1][$x1][$dir] and $edge->[$y][$x][($dir - $RAYS->[$dir][1] + 4) % 8])
1249 0 0 if ($rays->[$y1][$x1][($dir + 4) % 8][0] =~ /^F/ and $$rays[$y + $dy[$d]][$x + $dx[$d]][$dir][0] =~ /^d/)
1260 0 0 unless $$rays2[($D + 4) % 8] and $$rays2[($D + 4) % 8][0] =~ /^d/ and $RAYS->[$D] and $RAYS->[$D][0] =~ /^(?:(d)|\?)/
1262 0 0 if ($1) { }
1264 0 0 unless $rays2->[$D] and $rays2->[$D][0] =~ /$Side->[1]/
1265 0 0 if ($1)
1267 0 0 unless ($cntedge->[$y2][$x2] || 0) == 3 and ($cntedge->[$y][$x] || 0) == 2 and $edge->[$y2][$x2][($d - 2 * $RAYS->[$dir][1]) % 8] and grep $edge->[$y][$x][($_ + 4) % 8], $d, $D
1271 0 0 if $rays2->[$D]
1276 0 0 $cont ? :
1277 0 0 if $edge->[$y][$x][$D]
1280 0 0 unless $converted
1288 0 0 unless $toClear2{join $;, $x + $x1, $y + $y1}++
1292 0 0 if $$seenlong{join $;, $x, $y, $x1, $y1}
1303 0 82 unless my $RAYS = $rays->[$y][$x]
1304 76 6 unless @$RAYS
1306 0 0 if $dir > 3
1310 0 0 unless $rays->[$y1][$x1][$dir1][0] =~ /^([\264])/
1311 0 0 if $cnt->[$y][$x] + $cnt->[$y1][$x1] > 8
1312 0 0 if grep((($cntBlobby[$_->[1]][$_->[0]] || 0) > 3), [$x, $y], [$x1, $y1])
1314 0 0 if grep((!$$cntedge[$_->[1]][$_->[0]] && ($cntBlobby[$_->[1]][$_->[0]] || 0) > 1 + ($cX == 2)), [$x, $y], [$x1, $y1])
1317 0 0 unless $rays->[$y1][$x1][$dir1][1] == -$rot
1320 0 0 if 2 == $cXX and not $in && !$$cntedge[$y + $dy[$d]][$x + $dx[$d]] && $$cnt[$y + $dy[$d]][$x + $dx[$d]] < 6
1323 0 0 $opp ? :
1325 0 0 if $cnt->[$y][$x] - !!$in - !!$out > 2
1327 0 0 if $rays->[$y][$x][$D] and not $edge->[$y][$x][$D]
1338 0 164 unless my $RAYS = $rays->[$y][$x]
1339 152 12 unless @$RAYS
1344 0 0 unless $rays->[$y1][$x1][$dir1][0] =~ /^([dc\260])/ and not $edge->[$y][$x][$dir]
1351 0 0 $dir % 2 ? :
1357 0 0 unless $$rays[$P->[1]][$P->[0]][$dir2]
1365 0 0 if !$$cntedge[$P->[1]][$P->[0]] || $$cnt[$P->[1]][$P->[0]] + !$back > 5 and !$cntedge->[$y2][$x2] && (($cntBlobby[$y2][$x2] || 0) > 2 || $cntBlobby[$y2][$x2] && $cnt->[$y2][$x2] > 5) || ($cntBlobby[$y2][$x2] || 0) > 2 && $cnt->[$y2][$x2] > 5
1369 0 0 if not $$cntedge[$P->[1]][$P->[0]] || $cntedge->[$y2][$x2] and $cnt->[$y2][$x2] < 5
1373 0 0 if $bad00 and $badD > 1 or $blobby or $smallBlobby and $badD >= 2
1377 0 0 if $inBlob and $qRound
1379 0 0 if grep(($rays->[$y][$x][($dir + $_) % 8] && $rays->[$y][$x][($dir + $_) % 8][0] =~ /^A/), 2, -2)
1380 0 0 if ($qRound) { }
1383 0 0 if grep(($questEdges[$y1][$x1][($dir1 + $_) % 8] || $questEdges[$y][$x][($dir + $_) % 8]), 1, -1) or $dblCoordEdges[$y + $y1][$x + $x1] > 1 or $$midLong{join $;, $x + $x1, $y + $y1}
1400 0 0 unless $outType[$y][$x][($dir + 2 * $D) % 8]
1401 0 0 unless $edge->[$y1][$x1][($dir + $D) % 8] and not $outCont[$y][$x][($dir + 2 * $D) % 8][1 + $D]
1403 0 0 if $compete
1432 0 82 unless my $RAYS = $rays->[$y][$x]
1433 76 6 unless @$RAYS
1435 0 8 if ($RAYS->[$dir][0] =~ /^\260/)
1444 0 0 unless $r and $r->[0] =~ /^[4x2]/
1445 0 0 unless grep $edge->[$y2][$x2][($dir + $rot * $_) % 8], -1..2
1446 0 0 if 1 == ($cntedge->[$y1][$x1] || 0) and grep $edge->[$y1][$x1][($dir - $rot * $_) % 8], 0, 1, 2
1454 0 0 if @rot = grep($edge->[$y][$x][($dir1 + $_) % 8], 0, -1, 1) or @rot = grep($$midLong{join $;, 2 * $x + $dx[$dir1] + $dx[($dir1 + $_) % 8], 2 * $y + $dy[$dir1] + $dy[($dir1 + $_) % 8]}, -1, 1) or not $dir % 2 and 2 == grep($edge->[$y][$x][($dir + $_) % 8], -2, 2) || !$cntedge->[$y][$x] && 2 == grep($$edge[2 * $y - $y1][2 * $x - $x1][($dir + $_) % 8], -2, 2) && !grep($$edge[2 * $y - $y1][2 * $x - $x1][($dir + $_) % 8], 1, 0, -1) && push(@cont, [$x, $y, $dir1, 2 * $x - $x1, 2 * $y - $y1])
1460 0 0 if (not $cntedge->[$y][$x] and 1 == ($cntBlobby->[$y][$x] || 0))
1462 0 0 unless @rot = grep(($D == ($dir1 + $_) % 8), -1, 0, 1)
1467 0 0 if 1 == ($cntBlobby->[$y2][$x2] || 0) and !$$midLong{join $;, $x + $x2, $y + $y2} || $cnt->[$y2][$x2] == 3
1475 0 0 unless 1 == (($rot, my $junk) = grep(defined($_), @out)) and $rot
1478 0 0 unless $out[0]
1483 0 0 if $edge->[$y2][$x2] and $edge->[$y2][$x2][$dir] and not grep($edge->[$y2][$x2][($dir + $_) % 8], 4)
1488 0 0 unless not $edge->[$y][$x][$dir] and $rays->[$y1][$x1][$dir1][0] =~ /^([cdfF])/ and $Opp = $1 and not grep($edge->[$y][$x][($dir + $_) % 8], -1, 1) and not grep($edge->[$y1][$x1][($dir1 + $_) % 8], -1, 1) and 2 + !$cntedge->[$y1][$x1] > ($cntBlobby->[$y][$x] || 0) and 2 + !$cntedge->[$y][$x] > ($cntBlobby->[$y1][$x1] || 0) and not grep(($rays->[$y][$x][($dir + $_) % 8] && ($rays->[$y][$x][($dir + $_) % 8][0] || '') =~ /^[4x2]/ && !&$goodNearLong($x, $y, $dir, $_, $x1, $y1)), -1, 1) and not grep(($rays->[$y1][$x1][($dir1 + $_) % 8] && ($rays->[$y1][$x1][($dir1 + $_) % 8][0] || '') =~ /^[4x2]/ && !&$goodNearLong($x1, $y1, $dir1, $_, $x, $y)), -1, 1)
1515 0 0 if not defined $out and $c = grep(("f" ne ($candDegree{join $;, $x, $y, ($dir1 + $_) % 8} || 'f')), -1, 0, 1) and $c != 2
1516 0 0 if not defined $out1 and $c = grep(("f" ne ($candDegree{join $;, $x1, $y1, ($dir + $_) % 8} || 'f')), -1, 0, 1) and $c != 2
1517 0 0 unless defined $out and defined $out1
1530 0 0 if not ref $e and $e eq "erased"
1537 0 0 unless (@atBEG or @atEND)
1539 0 0 unless 1 == @DIR
1557 5 6 unless $edge->[$y]
1560 40 0 unless $edge->[$y][$x][$dir] and $rays->[$y][$x][$dir][0] eq "Tail"
1564 0 0 unless $rays->[$Y][$X][$DIR][0] eq "MFork"
1570 0 0 unless $cnt->[$y][$x] == 3 and $cntedge->[$y][$x] < 3
1575 0 0 if ($$cntedge[$y + $dy[$d]][$x + $dx[$d]] || 0) != 1 + !!$edge->[$y][$x][$d]
1576 0 0 $edge->[$y][$x][$d] ? :
1580 0 0 if 1 < abs $b
1582 0 0 if $b and grep $$edge[$y + $dy[$d] + $dy[$l]][$x + $dx[$d] + $dx[$l]][($l + $_ * $d0) % 8], 1, 2
1586 0 0 if (@bends == 2 and 2 == grep($_->[3], @bends) and 1 == (my(@O) = grep(($_->[2] == 1), @bends)) and not grep(($_->[2] == -1), @bends)) { }
1595 0 0 unless $edge->[$y][$x][$d]
1615 2 4 unless $cnt->[$y][$x] and ($cntedge->[$y][$x] || 0) <= 1 and not $$inLong{join $;, $x, $y}
1618 0 4 if $cnt->[$y][$x] + ($cntBlobby->[$y][$x] || 0) > 6
1620 4 0 $cntedge->[$y][$x] ? :
1621 4 0 if 1 + ($L != 100) > (my(@Neighbors) = @{$offs->[$y][$x];})
1630 0 0 if (not $cntedge->[$y][$x]) { }
1632 0 0 unless $e == $#Neighbors and $e == 2 and not grep((!$$cntedge[$y + $dy[$_]][$x + $dx[$_]]), @Neighbors)
1637 0 0 unless $e == $#Neighbors
1638 0 0 if (grep(($_ == $L), @Neighbors[0 .. $e1])) { }
1643 0 0 if @Neighbors > 3 or grep((!$$cntedge[$y + $dy[$_]][$x + $dx[$_]]), @Neighbors) and @Neighbors > 1 || grep($$near[$y + $dy[$Neighbors[0]]][$x + $dx[$Neighbors[0]]][($Neighbors[0] + $_) % 8], 2, 3, -2, -3)
1653 0 0 if (@cont >= 2) { }
0 0 elsif (@cont) { }
1654 0 0 if @cont > 2 or @Neighbors > 2 or grep(($$cnt[$y + $dy[$_]][$x + $dx[$_]] > 4), @Neighbors) or $L < 8 and grep((1 < abs(($L - $_) % 8 - 4)), @cont)
1659 0 0 if (@Neighbors == 3) { }
0 0 elsif (@Neighbors == 2) { }
0 0 elsif (@Neighbors == 1) { }
1660 0 0 if $mid % 2 or grep((!$$edge[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8]), 2, -2)
1661 0 0 unless $mid == $cont[0] and $L > 7 || 2 > abs(($L - $cont[0]) % 8 - 4) or ($cont[0] + 4) % 8 == $L
1664 0 0 if $ang and $ang > 1 || $near->[$y][$x][($L + 4) % 8]
1668 0 0 if $L < 8 and 1 < abs(($L - $cont[0]) % 8 - 4)
1672 0 0 if (@Neighbors == 3) { }
0 0 elsif (@Neighbors == 2) { }
0 0 elsif (@Neighbors == 1) { }
1674 0 0 if $mid % 2 or grep((!$$edge[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8]), 2, -2)
1675 0 0 $L > 7 ? :
1683 0 0 if ($mid % 2) { }
1687 0 0 if grep((!$$edge[$y + $dy[$mid]][$x + $dx[$mid]][$_]), @ed)
1691 0 0 if grep((abs(($_ + 4 - $mid) % 8 - 4) > 1), @NN) and not @ed && ($L > 7 || abs(($L - $mid) % 8 - 4) < 2) && $cnt->[$y][$x] < 3
1698 0 0 if grep((!$$edge[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8]), 2, -2) and not grep($$edge[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8], 2, -2) && !grep(($$near[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8] && !$$edge[$y + $dy[$mid]][$x + $dx[$mid]][($mid + $_) % 8]), 2, -2)
1705 0 0 if $L < 8 and 2 > abs(($L - $Neighbors[0]) % 8 - 4)
1873 0 0 if 1 >= @$CC and not $green_at_left || $green_at_right
1875 0 0 if ($green_at_left) { }
1877 0 0 if ($green_at_right) { }
1880 0 0 unless (@jumps)
1881 0 0 if ($green_at_left or $green_at_right) { }
1883 0 0 $green_at_left ? :
1886 0 0 if ($extended->{'0'} and $CC->[0] < $CC->[1] - 1) { }
0 0 elsif ($extended->{'0'} and $CC->[0] == $CC->[1] - 1) { }
1891 0 0 if ($CC->[0] + $addHalf == $CC->[1]) { }
0 0 elsif ($CC->[0] < $CC->[1]) { }
1915 0 0 if (int $slope_min != int $slope_max) { }
0 0 elsif (%$extended) { }
1922 0 0 if $H <= $_
0 0 unless @ok = grep({$H + !!$add >= $_ if $H <= $_;} @ok)
1936 0 0 if $cur[0] > $H + $add
1937 0 0 if $#cur and $cur[1] > $H + $add
1938 0 0 if $H <= $_
0 0 unless @cur = grep({$H + $add >= $_ if $H <= $_;} @cur)
1947 0 0 if $jU[$n]
1948 0 0 if $jD[$n]
1952 0 0 if 2 + !!$U + !!$D < keys %seen
1957 0 0 if @JUMPS > 1 and $max - $min > 1 + !!$U + !!$D
1959 0 0 if ($min_can_U)
1960 0 0 if $jumps[$_] == $min
0 0 if grep {$jumps[$_ + 1] == $min if $jumps[$_] == $min;} 0 .. $#jumps - 1
1962 0 0 if ($max_can_D)
1963 0 0 if $jumps[$_] == $max
0 0 if grep {$jumps[$_ + 1] == $max if $jumps[$_] == $max;} 0 .. $#jumps - 1
1966 0 0 if not $green_at_left and (my $l_O = $CC->[0] - $min - 1) > 0 or not $green_at_right and (my $r_O = $CC->[-1] - $min - 1) > 0
1971 0 0 if $j == $min
1974 0 0 unless my($sl, $sh) = &encodes_line(\@rect, !($green_at_left || $l_O), !($green_at_right || $r_O))
1980 0 0 $green_at_left ? :
1990 0 0 unless 2 >= (my(@D) = keys %seen)
1991 0 0 if (@D == 1)
1997 0 0 unless 1 >= (my(@DD) = keys %dup)
1998 0 0 @DD ? :
2001 0 0 if $dir == 7 and not $D[0] * $D[1]
2003 0 0 if ($sep % 2 and $seen{$sep} and $seen{$sep} <= 2 and @d > 2 and $seen{$sep} == (my(@eSEP) = grep(($d[$_] == $sep), 0, -1)))
2005 0 0 if @eSEP <= 1
2010 0 0 if ($d[$i] == $sep) { }
2020 0 0 unless my($slope, $offset) = &encodes_line(\@col)
2025 0 0 if $dup % 2
2041 0 0 unless my $r = ($edges->[$i][0] - $$edges[$i - 1][0]) % 8
2045 0 0 if $r == $last_r
2052 0 0 if ($runs[$j] - $runs[$j - 1] > 1) { }
0 0 elsif (++$last_snake != $j) { }
2053 0 0 if $parts[-1] and $parts[-1][1]
2061 0 0 if $parts[-1][1]
2069 0 0 if ($part->[0]) { }
2101 0 0 unless $donext++
2105 0 0 unless my $snake = $part->[1]
2111 0 0 if ($line)
2114 0 0 if $J
2115 0 0 unless $j == $#parts
2120 0 0 unless $b
2121 0 0 if $e == $edges->$#*
2122 0 0 if $b == $b1 and $e == $e1
2124 0 0 unless (($line) = &stroke_2_line(\@S))
2126 0 0 unless $J
2133 0 0 if ($b == $b1) { }
2134 0 0 if $J
2138 0 0 if ($e == $e1) { }
2139 0 0 unless $j == $#parts
2154 0 0 if ($opp) { }
2162 0 0 unless $endEq * $stEq < 0
2164 0 0 if $opp
2166 0 0 if $new > ($frac + 1) / 2
2168 0 0 if $opp
2181 2 2 if ($i == $#d or abs(($d[$i + 1] - $d[$i]) % 8 - 4) <= 2)
2183 0 2 if (@SS <= 1) { }
2 0 elsif (2 == @SS) { }
0 0 elsif (my($Line) = &stroke_2_line(\@SS)) { }
2199 4 0 unless my $line = $part->[2]
2201 0 0 if $prev_corner != $corners[-1][0]
2204 0 0 if $part->[0] == $part->[1]
2213 2 0 unless $corners[-1][0] == $#d + 1
2221 0 2 if ($corners[$i][1])
2223 0 0 unless $i || $closed and $corners[$i - 1][1]
2224 0 0 $corners[$i][2] ? :
2226 0 0 unless grep(($move_start->[$_] != $my_move_start->[$_]), 0, 1)
2228 0 0 unless my $cross_prev = &crosses_line($corners[$i - 1][1], $corners[$i][1], Deparse error: Can't locate object method "object_2svref" via package "B::SPECIAL" at /usr/local/lib/perl5/5.42.0/B/Deparse.pm line 5762. , $extend_tip)
2229 0 0 unless my $cross_our = &crosses_line($corners[$i][1], $corners[$i - 1][1], "opp", $extend_tip)
2247 2 0 unless $move_start or $move_end
2250 0 0 $move_start ? :
0 0 $move_end ? :
2251 0 0 if @do == 2 and not $do[1]
2254 0 0 $move_start && !$seg ? :
2255 0 0 $move_end && $seg == $len - 1 ? :
2257 0 0 unless defined $dir
2260 0 0 if ($seg) { }
2265 0 0 unless $kill
2267 0 0 if $i
2268 0 0 if $corners[$i + 1]
2279 0 0 if $corners[$i][3] or $corners[$i + 1][2]
2295 0 0 if ($blob->[$y1][$x1]) { }
0 0 elsif ($$blob[$y + $dy][$x + $dx]) { }
2303 0 0 if $nextEdge->[$dir][$y][$x]
2311 0 0 if $nextEdge->[$dir][$y][$x]
2321 0 0 if ($blob->[$y1][$x1]) { }
0 0 elsif ($$blob[$y + $dy][$x + $dx]) { }
2336 0 0 if ($nextEdge->[$dir][$y][$x])
2337 0 0 if @$p
2338 0 0 unless @$p
2352 0 4 if $$traversedEdges{join $;, $x, $y, $dir}++ and not $x1 == $X && $y1 == $Y
2355 2 2 unless defined(my $n = $nextEdge->[$y][$x][$dir])
2357 0 2 if (my $tip = $$tips{join $;, $x1, $y1})
2374 0 2 $endstip ? :
2383 5 6 unless $edge->[$y]
2385 39 0 unless $edge->[$y][$x] and my $t = $$tailEdge{join $;, $x, $y}
2387 0 0 unless 3 == $cntedge->[$y][$x]
2398 5 6 unless $edge->[$y]
2400 0 39 unless $edge->[$y][$x]
2402 32 8 unless $edge->[$y][$x][$dir]
2406 4 4 if ($cntedge->[$y1][$x1] == 2) { }
0 4 elsif ($$tailEdge{join $;, $x, $y}) { }
0 4 elsif ($$tailEdge{join $;, $x1, $y1}) { }
2425 2 2 if $seenEndEdge{join $;, $x, $y, $dir}++
2429 0 2 if ($closed)
2432 0 0 unless abs(($stroke->[$i][0] - $$stroke[$i - 1][0] + 4) % 8 - 4) < 2
2437 0 2 if ($closed < 0) { }
2458 8 0 if $traversedEdges{join $;, $x, $y, $dir}
2459 0 0 if ($T)
2460 0 0 $rot == 1 ? :
2463 0 0 $rot == -1 ? :
2474 82 0 unless !$blob->[$y][$x] == $inner
2477 0 0 $inner ? :
2478 0 0 if $nextEdgeBlob[$dir][$y][$blobX]
2479 0 0 if ($coarse_blobs) { }
2490 0 0 if @$stroke == 1 and not defined $stroke->[0][0]
2496 0 0 if abs(($d - $prevd) % 8 - 4) <= 2
2498 0 0 if $i > $stroke->$#*
2499 0 0 if $i
2501 0 0 if ($corner == 0) { }
2511 0 0 if not ref $e and $e eq "erased"