| line | !l | l&&!r | l&&r | condition | 
 
| 108 | 22 | 0 | 22 | $self->{'extract_sig'} and my(@sig) = _parse_header($self->{'header'}) | 
 
| 163 | 0 | 0 | 0 | $self->{'header'} and $self->{'sig'} | 
 
| 226 | 96 | 0 | 1 | $sig->{'x'} and $sig->{'x'} < time | 
 
| 233 | 78 | 0 | 18 | $txt and !ref($txt) || ref $txt eq 'ARRAY' | 
 
|  | 77 | 0 | 1 | exists $self->{'records'}{$dns} and not $txt | 
 
| 268 | 63 | 2 | 0 | $v->{'l'} and not $v->{'l'} =~ /^\d{1,76}\z/ | 
 
| 299 | 42 | 2 | 0 | defined $v->{'x'} and not $v->{'x'} =~ /^\+?\d{1,12}\z/ | 
 
| 303 | 0 | 0 | 21 | $v->{'b'} && ($v->{'b:bin'} = _decode64($v->{'b'})) | 
 
|  | 0 | 0 | 21 | $v->{'bh'} && ($v->{'bh:bin'} = _decode64($v->{'bh'})) | 
 
|  | 21 | 0 | 0 | $v->{'t'} and not $v->{'t'} =~ /^\d{1,12}\z/ | 
 
| 310 | 1 | 0 | 0 | $v->{'t'} and $v->{'x'} < $v->{'t'} | 
 
| 355 | 0 | 1 | 17 | $v and %$v | 
 
| 395 | 0 | 2 | 20 | ref $sig and $sig->{'h_auto'} | 
 
| 406 | 120 | 0 | 20 | exists $oh{$k} and --$oh{$k} == 0 | 
 
| 415 | 0 | 22 | 0 | not $sig{'t'} and exists $sig{'t'} | 
 
| 417 | 21 | 1 | 0 | $sig{'x'} and $sig{'x'} =~ /^\+(\d+)$/ | 
 
| 478 | 0 | 0 | 22 | $dkh =~ /\n([^\n]+)\z/ && length $1 | 
 
| 495 | 38 | 57 | 1 | defined $sig->{'bh:computed'} and $sig->{'bh:computed'} ne $sig->{'bh:bin'} | 
 
| 512 | 17 | 0 | 0 | $param->{'t'}{'s'} and $sig->{'i:domain'} | 
 
|  | 0 | 0 | 0 | $param->{'t'}{'s'} and $sig->{'i:domain'} and $sig->{'i:domain'} ne $sig->{'d'} | 
 
| 515 | 17 | 0 | 0 | $param->{'g'} and not $sig->{'i'} =~ /$param->{'g'}/ | 
 
| 725 | 1 | 0 | 43 | not $sig->{'error'} and my $digest = $digest{$sig->{'a:hash'}}() | 
 
|  | 1 | 0 | 43 | not $sig->{'error'} and my $digest = $digest{$sig->{'a:hash'}}() and my $transform = $bodyc{$sig->{'c:body'}}() | 
 
| 867 | 0 | 0 | 0 | defined $self->[3] and $self->[3] ne '' | 
| line | l | !l | condition | 
 
| 65 | 0 | 44 | $args{'dns'} || {} | 
 
| 75 | 2 | 20 | $_->{'h'} //= 'from' | 
 
| 78 | 2 | 20 | $s->{'h_auto'} //= 1 | 
 
| 113 | 0 | 22 | $self->{'sig'} ||= [] | 
 
| 202 | 0 | 1 | $sig->{'s'} // 'UNKNOWN' | 
 
|  | 0 | 1 | $sig->{'d'} // 'UNKNOWN' | 
 
| 261 | 22 | 0 | $v = parse_taglist($v, $error) or return | 
 
| 265 | 22 | 22 | $v->{'v'} //= '1' | 
 
| 268 | 66 | 0 | $v->{'v'} // '' | 
 
| 269 | 1 | 0 | $v->{'v'} || '' | 
 
| 279 | 43 | 22 | $v->{'q'} // 'dns/txt' | 
 
| 287 | 55 | 10 | $v->{'a'} // 'rsa-sha256' | 
 
| 288 | 55 | 10 | $v->{'c'} // 'simple/simple' | 
 
| 304 | 0 | 0 | $v->{'b'} || '' | 
 
| 306 | 0 | 0 | $v->{'bh'} || '' | 
 
| 322 | 0 | 0 | $$error ||= '[i]dentity does not match [d]omain' | 
 
| 335 | 53 | 12 | $bodyc ||= 'simple' | 
 
| 354 | 18 | 0 | $v = parse_taglist($v, $error) or return | 
 
| 360 | 17 | 0 | $v->{'v'} ||= 'DKIM1' | 
 
|  | 0 | 17 | $v->{'k'} //= 'rsa' | 
 
| 375 | 0 | 17 | $v->{'t'} || '' | 
 
| 376 | 0 | 17 | $v->{'h'} || 'sha1:sha256' | 
 
| 377 | 0 | 17 | $v->{'s'} || '*' | 
 
| 400 | 20 | 0 | $sig->{'h'} || '' | 
 
| 430 | 178 | 108 | delete $sig{$_} // (next) | 
 
| 435 | 22 | 0 | delete $sig{$_} // (next) | 
 
| 583 | 37 | 0 | $sig_prefix{$algo} || die("unsupport digest $algo") | 
 
| 636 | 149 | 296 | $kv{$k} ||= [$hdr =~ /^($k:[^\n]*\n(?:[ \t][^\n]*\n)*)/mig] | 
 
| 639 | 167 | 278 | pop @$v // '' | 
 
| 868 | 0 | 0 | $self->[0]{'d'} // 'unknown' | 
 
| 882 | 0 | 0 | $sig->{'s'} || 'UNKNOWN' | 
 
|  | 0 | 0 | $sig->{'d'} || 'UNKNOWN' | 
| line | l | !l&&r | !l&&!r | condition | 
 
| 233 | 18 | 0 | 0 | !ref($txt) || ref $txt eq 'ARRAY' | 
 
| 333 | 0 | 0 | 0 | $$error ||= "invalid canonicalization $v->{'c'}" | 
 
| 337 | 0 | 0 | 0 | $$error ||= "unsupported algorithm $v->{'a'}" | 
 
| 378 | 17 | 0 | 0 | $v->{'s'}{'*'} or $v->{'s'}{'email'} | 
 
| 417 | 0 | 0 | 0 | $sig{'t'} || time | 
 
| 425 | 22 | 0 | 0 | $sig{'bh:computed'} || $sig{'bh:bin'} | 
 
| 724 | 41 | 44 | 0 | $sig->{'bh:collecting'} ||= do {
	if (not $sig->{'error'} and my $digest = $digest{$sig->{'a:hash'}}() and my $transform = $bodyc{$sig->{'c:body'}}()) {
	+{'digest', $digest, 'transform', $transform, $sig->{'l'} ? ('l', $sig->{'l'}) : (defined $sig->{'l'} ? ('l', \$sig->{'l'}) : ())};
}
else {
	+{'done', 1};
}
} | 
 
| 757 | 0 | 1 | 0 | $bh->{'_data_after_l'} ||= substr($tbuf, $bh->{'l'}, -$bh->{'l'}, '') =~ /\S/ & 1 | 
 
| 760 | 0 | 0 | 0 | $bh->{'_data_after_l'} ||= $tbuf =~ /\S/ & 1 |