commit 1b0e7d299fc02f562d2a1750f754d3d25d8f4b2e Author: art1@andreas-romeyke.de Date: Fri Oct 5 10:24:50 2018 +0200 - init diff --git a/Changes b/Changes new file mode 100644 index 0000000..e69de29 diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..ae6eac1 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,11 @@ +Changes +Makefile.PL +MANIFEST +README +t/File/FormatIdentification/Pronom.t +t/File/FormatIdentification/Regex.t +t/DROID_SignatureFile_V93.xml +lib/File/FormatIdentification/Pronom.pm +lib/File/FormatIdentification/Regex.pm +bin/pronom2wxhexeditor.pl +bin/pronom_statistics.pl diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..eaad9d3 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,31 @@ +use 5.024001; +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. +WriteMakefile( + NAME => 'File::FormatIdentification::Pronom', + VERSION_FROM => 'lib/File/FormatIdentification/Pronom.pm', # finds $VERSION, requires EU::MM from perl >= 5.5 + PREREQ_PM => { + "XML::LibXML" => 0, + "Carp" => 0, + "List::Util" => 0, + "Scalar::Util" => 0, + "YAML::XS" => 0, + "Moose" => 0, + "String::LCSS" => 0, + "Carp" => 0, + "Regexp::Assemble" => 0, + "Regexp::Optimizer" => 0, + + }, + ABSTRACT_FROM => 'lib/File/FormatIdentification/Pronom.pm', # retrieve abstract from module + AUTHOR => 'Andreas Romeyke ', + LICENSE => 'perl_5', + test => { + "TESTS" => "t/File/FormatIdentification/*.t" + }, + EXE_FILES => [ + "bin/pronom2wxhexeditor.pl", + "bin/pronom_statistics.pl" + ], +); diff --git a/README b/README new file mode 100644 index 0000000..31e018c --- /dev/null +++ b/README @@ -0,0 +1,73 @@ +File-FormatIdentification-Pronom version 0.01 +============================================= + +The module allows to handle Droid signatures. Droid is a utility which +uses the PRONOM database to identify file formats. + +See https://www.nationalarchives.gov.uk/PRONOM/ for details. + +With this module you could: + +* convert Droid signatures to Perl regular expressions +* analyze files and display which/where pattern of Droid signature matches via tag-files for wxHexEditor +* calc statistics about Droid signatures + +The module is in early alpha state and should not be used in production. + +INSTALLATION + +To install this module type the following: + + perl Makefile.PL + make + make test + make install + +DEPENDENCIES + +This module requires these other modules and libraries: + +* XML::LibXML +* Carp +* List::Util +* Scalar::Util +* YAML::XS +* Moose +* String::LCSS +* Regexp::Assemble +* Regexp::Optimizer + +The script is only tested under GNU/Linux Debian (Stretch) + +CALL + +$> perl ./pronom2wxhexeditor.pl DROID-SIGNATURE.xml binaryfile + +The first run produces a file "DROID-SIGNATURE.xml.yaml" which holds the PCREs +to avoid parsing DROID-SIGNATURE.xml again and again. This file is human +readable + +The run produces a file "binaryfile.tags" which holds the tags used by +wxHexEditor when you open the file "binaryfile". + +The run also produces a file "binaryfile.html" which can be viewed in +Webbrowser to get all matches as an overview. + +$> perl ./pronom_statistics.pl DROID-SIGNATURE.xml + +This prints some useful statistics about the signature file. + +BUGS + +* Some droid recipes results in PCREs which are greedy and therefore the running + time could be exponential with size of binary file. + + +COPYRIGHT AND LICENCE + +Copyright (C) 2018 by Andreas Romeyke + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.24.1 or, +at your option, any later version of Perl 5 you may have available. + diff --git a/bin/pronom2wxhexeditor.pl b/bin/pronom2wxhexeditor.pl new file mode 100644 index 0000000..502eb32 --- /dev/null +++ b/bin/pronom2wxhexeditor.pl @@ -0,0 +1,334 @@ +#!/usr/bin/env perl +#=============================================================================== +# +# FILE: pronom2wxhexeditor.pl +# +# USAGE: ./pronom2wxhexeditor.pl +# +# DESCRIPTION: perl ./pronom2wxhexeditor.pl +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Andreas Romeyke, +# CREATED: 28.08.2018 14:26:43 +# REVISION: --- +#=============================================================================== +use strict; +use warnings 'FATAL'; +use utf8; +use v5.24; +use Fcntl qw(:seek); +use Digest::CRC qw( crc8 ); +use Scalar::Util; +use File::Map qw(:map :extra); +use File::FormatIdentification::Pronom; + +# calc a random color +sub rndcolor { + my $rgb = int( rand( 256 * 256 * 256 ) ); + return sprintf( "#%06x", $rgb ); +} + +sub puidcolor { + my $puid = shift; + my $crc = crc8($puid); + return sprintf( "#%02x%02x%02x", $crc, $crc, $crc ); +} + +sub dircolor { + my $direction = shift; + my $pos = shift; + if ( $direction > 0 ) { + return sprintf( "#ff%04x", $pos * $pos ); + } + elsif ( $direction < 0 ) { + return sprintf( "#%04xff", $pos * $pos ); + } + else { + return sprintf( "#%02xff%02x", $pos, $pos ); + } +} ## end sub dircolor + +# helper function to collect all things needed for output and adds to a given buffer +sub push_output ($$$$$$$$$$) { + my %tmp; + $tmp{puid} = shift; + $tmp{name} = shift; + $tmp{begin} = shift; + $tmp{end} = shift; + $tmp{regex} = shift; + + #$tmp{hexdump} = shift; + $tmp{position} = shift; + $tmp{signature} = shift; + $tmp{internal_signature} = shift; + $tmp{bytesequence} = shift; + my $ref_buffer = shift; + push @{$ref_buffer}, \%tmp; + return; +} ## end sub push_output + +#render HTML output +sub render_for_html { + my $ref_buffer = shift; + my $fh = shift; + my $binaryfile = shift; + my @tmp = sort { $a->{begin} <=> $b->{begin} } ( @{$ref_buffer} ); + say $fh < + +

Result for "$binaryfile"

+HEAD + foreach my $tagid ( 0 .. $#tmp ) { + my $pos = $tmp[$tagid]->{position}; + my $begin = $tmp[$tagid]->{begin}; + my $end = $tmp[$tagid]->{end}; + my $puid = $tmp[$tagid]->{puid}; + my $name = $tmp[$tagid]->{name}; + my $regex = $tmp[$tagid]->{regex}; + my $internal = $tmp[$tagid]->{internal_signature}; + my $bytesequence = $tmp[$tagid]->{bytesequence}; + my $partial = get_partial_regex( $pos, $regex ); + + #my $hexdump = $tmp[$tagid]->{hexdump}; + #if ( length($hexdump) > 10 ) { + # $hexdump = substr( $hexdump, 0, 10 ) . "..."; + #} + my $fgcolor = puidcolor($puid); + + #my $bgcolor = dircolor( $begin <=> $end, $pos ); + my $bgcolor = rndcolor(); + say $fh " +

$puid

+

Internal Signature: $internal

+

Byte Sequence: $bytesequence

+

Bytes $begin - $end

+

$name

+

regex=$regex

+

matching $pos-th partial regex: $partial

+" + + #

pos=$pos

+ #

hexdump:
$hexdump

" + } ## end foreach my $tagid ( 0 .. $#tmp) + + say $fh < + +FOOT + return; +} ## end sub render_for_html + +# render output for wxhexeditor +sub render_for_wxhexeditor { + my $ref_buffer = shift; + my $fh = shift; + my $binaryfile = shift; + my @tmp = sort { + if ( $a->{begin} == $b->{begin} ) { + return ( $a->{end} <=> $b->{end} ); + } + else { + return ( $a->{begin} <=> $b->{begin} ); + } + } ( @{$ref_buffer} ); + say $fh < + + +HEAD + + foreach my $tagid ( 0 .. $#tmp ) { + my $pos = $tmp[$tagid]->{position}; + my $begin = $tmp[$tagid]->{begin}; + my $end = $tmp[$tagid]->{end}; + my $puid = $tmp[$tagid]->{puid}; + my $name = $tmp[$tagid]->{name}; + my $regex = $tmp[$tagid]->{regex}; + my $internal = $tmp[$tagid]->{internal_signature}; + my $bytesequence = $tmp[$tagid]->{bytesequence}; + + #my $hexdump = $tmp[$tagid]->{hexdump}; + #if ( length($hexdump) > 10 ) { + # $hexdump = substr( $hexdump, 0, 10 ) . "..."; + #} + my $fgcolor = puidcolor($puid); + + #my $bgcolor = dircolor( $begin <=> $end, $pos ); + my $bgcolor = rndcolor(); + my $partial = get_partial_regex( $pos, $regex ); + say $fh " + + $begin + $end + $puid + $name + at Bytes($begin, $end) + $regex + matching $pos-th partial regex: $partial + Internal Signature: $internal + Byte Sequence: $bytesequence + + + $fgcolor + $bgcolor +"; + } ## end foreach my $tagid ( 0 .. $#tmp) + + say $fh < + +FOOT + return; +} ## end sub render_for_wxhexeditor + +sub get_partial_regex($$) { + my $position = shift; + my $regex = shift; + if ( $regex =~ m/\({$position}(.{20})/ ) { return "'$1'..."; } + return ""; +} + +################################################################################ +# main +################################################################################ + +my $pronomfile = shift @ARGV; +my $binaryfile = shift @ARGV; + +if ( !defined $pronomfile ) { + say "you need at least a pronom signature file"; +} +if ( !defined $binaryfile ) { + say "you need an binaryfile"; +} + +# write basic main.osd + +open( my $filehandle, "<", "$binaryfile" ); +binmode($filehandle); +seek( $filehandle, 0, SEEK_END ); +my $eof = tell($filehandle); + +my $pronom = File::FormatIdentification::Pronom->new( + "droid_signature_filename" => $pronomfile ); + +my @output_buffer; + +#my $pathobj = path($binaryfile); +#my $filestream = $pathobj->slurp_raw; +map_file my $filestream, $binaryfile, "<"; +advise( $filestream, 'random' ); +foreach my $internalid ( $pronom->get_all_internal_ids() ) { + my $sig = $pronom->get_signature_id_by_internal_id($internalid); + if ( !defined $sig ) { next; } + my $puid = $pronom->get_puid_by_signature_id($sig); + my $name = $pronom->get_name_by_signature_id($sig); + + my @regexes = $pronom->get_regular_expressions_by_internal_id($internalid); + my @res; + my $timer = time; + + #print "internalid=$internalid"; + foreach my $regex (@regexes) { + + # MATCHed? + #warn "$internalid, regex='$regex'\n"; + if ( !defined $regex ) { + warn "No regex found for internalid $internalid\n"; + } + + #say "REGEX='$regex'"; + if ( $filestream =~ /$regex/saa ) { + my $tmp; + $tmp->{matched} = 1; + $tmp->{regex} = $regex; + + #$tmp->{groups}; + + #use Data::Printer; + #p( @+ ); + #p( @- ); + my %groups; + for ( my $match = 0 ; $match <= $#- ; $match++ ) { + if ( defined $-[$match] && defined $+[$match] ) { + my $matches; + my $begin = $-[$match]; + my $end = $+[$match]; + $matches->{begin} = $begin; + $matches->{end} = $end; + $matches->{pos} = $match; + $groups{ ( $begin, $end ) } = $matches; + } + } + my @uniqgroups = values %groups; + + #use Data::Printer; + #p( @uniqgroups ); + $tmp->{groups} = \@uniqgroups; + + #p( $tmp->{groups} ); + #die "matched '$_'"; + push @res, $tmp; + } + else { + last; # break for loop + } + } + + if ( ( scalar @res ) == ( scalar @regexes ) ) { # all matches successfull + # my %tmp; + # $tmp{puid} = shift; + # $tmp{name} = shift; + # $tmp{begin} = shift; + # $tmp{end} = shift; + # $tmp{regex} = shift; + # #$tmp{hexdump} = shift; + # $tmp{position} = shift; + # $tmp{signature} = shift; + # my $ref_buffer = shift; + + for ( my $receiptidx = 0 ; $receiptidx <= $#res ; $receiptidx++ ) { + my $receipt = $res[$receiptidx]; + foreach my $group ( @{ $receipt->{groups} } ) { + push_output( + $puid, + $name, + $group->{begin}, + $group->{end}, + $receipt->{regex}, + $group->{pos}, + $sig, + $internalid, + $receiptidx, + + \@output_buffer + ); + } + } + } + + #say " ... time=", (time - $timer), "s"; +} ## end foreach my $internal ( keys...) + +open( my $OUT, ">", "$binaryfile.tags" ); +open( my $HTML, ">", "$binaryfile.html" ); + +render_for_wxhexeditor( + + #filter_matches_by_signature_priority( $signatures, \@output_buffer ), + \@output_buffer, + $OUT, $binaryfile +); +render_for_html( + + #filter_matches_by_signature_priority( $signatures, \@output_buffer ), + \@output_buffer, + $HTML, $binaryfile +); +close $HTML; +close $OUT; + +1; diff --git a/bin/pronom_statistics.pl b/bin/pronom_statistics.pl new file mode 100644 index 0000000..114c0a9 --- /dev/null +++ b/bin/pronom_statistics.pl @@ -0,0 +1,35 @@ +#!/usr/bin/env perl +#=============================================================================== +# +# FILE: pronom_statistics.pl +# +# USAGE: ./pronom_statistics.pl +# +# DESCRIPTION: perl ./pronom_statistics.pl +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Andreas Romeyke, +# CREATED: 28.08.2018 14:26:43 +# REVISION: --- +#=============================================================================== +use strict; +use warnings 'FATAL'; +use utf8; +use v5.24; +use File::FormatIdentification::Pronom; + +################################################################################ +# main +################################################################################ + +my $pronomfile = shift @ARGV; +if ( !defined $pronomfile ) { + say "you need at least a pronom signature file"; +} +my $pronom = File::FormatIdentification::Pronom->new( + "droid_signature_filename" => $pronomfile ); +$pronom->print_csv_statistics(); +1; diff --git a/lib/File/FormatIdentification/Pronom.pm b/lib/File/FormatIdentification/Pronom.pm new file mode 100644 index 0000000..b3c0c78 --- /dev/null +++ b/lib/File/FormatIdentification/Pronom.pm @@ -0,0 +1,996 @@ +package File::FormatIdentification::Pronom; + +use 5.024001; +use strict; +use warnings; +use diagnostics; +use XML::LibXML; +use Carp; +use List::Util qw( none first ); +use Scalar::Util; +use YAML::XS; +use File::FormatIdentification::Regex; +use Moose; + +our $VERSION = '0.01'; + +# Preloaded methods go here. +# flattens a regex-structure to a regex-string, expects a signature-pattern and a list of regex-structures +# returns regex +# +no warnings 'recursion'; + +sub _flatten_rx_recursive ($$$@) { + my $regex = shift; + my $lastpos = shift; + my $open_brackets = shift; + my @rx_groups = @_; + my $rx = shift @rx_groups; + + #use Data::Printer; + #say "_flatten_rx_recursive"; + #p( @rx_groups ); + #p( $rx ); + my $bracket_symbol = "("; + if ( !defined $regex ) { confess; } + + if ( !defined $rx ) { # do nothing + while ( $open_brackets > 0 ) { + $regex .= ")"; + $open_brackets--; + } + } + else { + my $pos_diff = $rx->{position} - $lastpos; + my $local_regex = $rx->{regex}; + if ( !defined $local_regex ) { + $local_regex = ''; + } + if ( 0 == $pos_diff ) { + + # TODO: + File::FormatIdentification::Regex::simplify_two_or_combined_regex( + $regex, $local_regex ); + $regex = + &_flatten_rx_recursive( "$regex|$local_regex", $lastpos, + $open_brackets, @rx_groups ); + } + elsif ( $pos_diff > 0 ) { # is deeper + # look a head, if same pos found, then use bracket, otherwise not + if ( + ( + scalar @rx_groups > 0 + && ( $rx_groups[0]->{position} == $rx->{position} ) + ) + || $pos_diff > 1 + ) + { # use ( + $regex = &_flatten_rx_recursive( + "$regex" . ( $bracket_symbol x $pos_diff ) . $local_regex, + $rx->{position}, $open_brackets += $pos_diff, @rx_groups ); + } + else { + $regex = &_flatten_rx_recursive( + "$regex$local_regex", $rx->{position}, + $open_brackets, @rx_groups + ); + } ## end else [ if ( scalar @rx_groups...)] + } + elsif ( $pos_diff < 0 ) { # is higher + $regex = &_flatten_rx_recursive( + "$regex)$local_regex", + $rx->{position}, + $open_brackets - 1, #($rx->{position} - $lastpos), + @rx_groups + ); + } + else { + confess +"FL: pos=$rx->{position} lastpos=$lastpos regex='$regex' open=$open_brackets\n"; + } + } + return $regex; +} ## end sub _flatten_rx_recursive ($$$@) +use warnings 'recursion'; + +sub _flatten_rx ($@) { + my $regex = shift; + my @rx_groups = @_; + + #say "calling flatten_rx with regex=$regex quality=$quality"; + #use Data::Printer; + #p( @rx_groups ); + $regex = _flatten_rx_recursive( $regex, 0, 0, @rx_groups ); + return $regex; +} ## end sub _flatten_rx ($@) + +# expands pattern of form "FFFB[10:EB]" to FFFB10, FFFB11, ... FFFBEB +sub _expand_pattern ($) { + my $pattern = shift; + $pattern =~ s/\[!/[^/g; + $pattern =~ s/([0-9A-F]{2}):([0-9A-F]{2})\]/$1-$2]/g; + $pattern =~ s/([0-9A-F]{2})/\\x$1/g; + + # substitute hex with printable ASCII-Output + $pattern =~ s#\\x(3[0-9]|[46][1-9A-F]|[57][0-9A])#chr( hex($1) );#egs; + return $pattern; +} ## end sub _expand_pattern ($) + +# expands offsets min,max to regex ".{$min,$max}" and uses workarounds if $min or $max exceeds 32766 +sub _expand_offsets($$) { + my $minoffset = shift; + my $maxoffset = shift; + my $byte = + '.'; # HINT: needs the character set modifier "aa" in $foo=~m/$regex/aa + #my $byte = '[\x00-\xff]'; + my $offset_expanded = ""; + if ( ( ( not defined $minoffset ) || ( length($minoffset) == 0 ) ) + && ( ( not defined $maxoffset ) || ( length($maxoffset) == 0 ) ) ) + { + $offset_expanded = ""; + } + elsif (( defined $minoffset ) + && ( length($minoffset) > 0 ) + && ( defined $maxoffset ) + && ( length($maxoffset) > 0 ) + && ( $minoffset == $maxoffset ) ) + { + if ( $minoffset > 0 ) { + my $maxloops = int( $maxoffset / 32766 ); + my $maxresidual = $maxoffset % 32766; + for ( my $i = 0 ; $i < $maxloops ; $i++ ) { + $offset_expanded .= $byte . "{32766}"; + } + $offset_expanded .= $byte . "{$maxresidual}"; + } ## end if ( $minoffset > 0 ) + } + else { + + # workaround, because perl quantifier limits, + # calc How many repetitions we need! Both offsets should be less than 32766 + #TODO: check if this comes from Droid or is calculated + + my $mintmp = 0; + my $maxtmp = 0; + if ( defined $minoffset && ( length($minoffset) > 0 ) ) { + $mintmp = $minoffset; + } + if ( defined $maxoffset && ( length($maxoffset) > 0 ) ) { + $maxtmp = $maxoffset; + } + + my $maxloops; + if ( $maxtmp >= $mintmp ) { + $maxloops = int( $maxtmp / 32766 ); + } + else { + $maxloops = int( $mintmp / 32766 ); + } + my $maxresidual = $maxtmp % 32766; + my $minresidual = $mintmp % 32766; + + #say "\tMaxloops=$maxloops maxres = $maxresidual minres=$minresidual"; + my @offsets; + my $minstr = ""; + my $maxstr = ""; + if ( defined $minoffset && length($minoffset) > 0 ) { + $minstr = $minresidual; + $mintmp = $mintmp - $minresidual; + } + + for ( my $i = 0 ; $i <= $maxloops ; $i++ ) { + + # loop, so we assure the special handling of residuals + if ( $maxtmp > $maxresidual ) { + $maxstr = 32766; + } + elsif ( $maxtmp < 0 ) { + $maxstr = 0; + } + else { + $maxstr = $maxresidual; + } + if ( $mintmp > $minresidual ) { + $minstr = 32766; + } + elsif ( $mintmp < 0 ) { + $minstr = 0; + } + else { + $minstr = $minresidual; + } + #### handle residuals + if ( $i == 0 ) { + $minstr = $minresidual; + $mintmp = $mintmp - $minresidual; + } + elsif ( $i == $maxloops ) { + $maxstr = $maxresidual; + $maxtmp = $maxtmp - $maxresidual; + } + + # mark offsets + my $tmp; + $tmp->{minoffset} = $minstr; + $tmp->{maxoffset} = $maxstr; + push @offsets, $tmp; + } ## end for ( my $i = 0 ; $i <=...) + my @filtered = map { + if ( !defined $maxoffset || length($maxoffset) == 0 ) { + $_->{maxoffset} = ""; + } + if ( !defined $minoffset || length($minoffset) == 0 ) { + $_->{minoffset} = ""; + } + $_; + } @offsets; + foreach my $tmp (@filtered) { + +# ? at the end - means non-greedy +#$offset_expanded .= $byte."{" . $tmp->{minoffset} . "," . $tmp->{maxoffset} . "}?"; + $offset_expanded .= + $byte . "{" . $tmp->{minoffset} . "," . $tmp->{maxoffset} . "}"; + } ## end foreach my $tmp (@filtered) + } ## end else [ if ( ( ( not defined $minoffset...)))] + +#say "DEBUG: minoffset='$minoffset' maxoffset='$maxoffset' --> offset_expanded='$offset_expanded'"; + + # minimization steps + $offset_expanded =~ s#{0,}#*#g; + $offset_expanded =~ s#{1,}#+#g; + $offset_expanded =~ s#{0,1}#?#g; + return $offset_expanded; +} ## end sub _expand_offsets($$) + +# got XPath-object and returns a regex-structure as hashref +sub _parse_fragments ($) { + my $fq = shift; + my $position = $fq->getAttribute('Position'); + my $minoffset = $fq->getAttribute('MinOffset'); + my $maxoffset = $fq->getAttribute('MaxOffset'); + my $rx = $fq->textContent; + my $expanded = _expand_pattern($rx); + my $ret; + $ret->{position} = $position; + $ret->{direction} = "left"; + $ret->{regex} = ""; + + my ($offset_expanded) = _expand_offsets( $minoffset, $maxoffset ); + + if ( $fq->localname eq "LeftFragment" ) { + $ret->{direction} = "left"; + $ret->{regex} = "($expanded)$offset_expanded"; + } + elsif ( $fq->localname eq "RightFragment" ) { + $ret->{direction} = "right"; + $ret->{regex} = "$offset_expanded($expanded)"; + } + + #say "pF: rx=$rx expanded=$expanded offset=$offset_expanded"; + return $ret; +} ## end sub _parse_fragments ($) + +# got XPath-object and search direction and returns a regex-structure as hashref +sub _parse_subsequence ($$) { + my $ssq = shift; + my $dir = shift; + my $position = $ssq->getAttribute('Position'); + my $minoffset = $ssq->getAttribute('SubSeqMinOffset'); + my $maxoffset = $ssq->getAttribute('SubSeqMaxOffset'); + + my $rx = $ssq->getElementsByTagName('Sequence')->get_node(1)->textContent; + + my @lnodes = $ssq->getElementsByTagName('LeftFragment'); + my @rnodes = $ssq->getElementsByTagName('RightFragment'); + my @lrx_fragments = map { _parse_fragments($_) } @lnodes; + my @rrx_fragments = map { _parse_fragments($_) } @rnodes; + my $lregex = _flatten_rx( "", @lrx_fragments ); + my $rregex = _flatten_rx( "", @rrx_fragments ); + my $expanded = _expand_pattern($rx); + + #if ( length($minoffset) > 0 + # && length($maxoffset) > 0 + # && $minoffset > $maxoffset ) { + # confess( + #"parse_subsequence: Maxoffset=$maxoffset < Minoffset=$minoffset! regex= '$rx'" + # ); + # } ## end if ( length($minoffset...)) + + my $offset_expanded = _expand_offsets( $minoffset, $maxoffset ); + my $prefix; + my $suffix; + my $ret; + my $regex; + if ( !defined $dir || length($dir) == 0 ) { + $regex = join( "", $lregex, $expanded, $rregex ); + } + elsif ( $dir eq "BOFoffset" ) { + $regex = + join( "", $offset_expanded, "(", $lregex, $expanded, $rregex, ")" ); + } + elsif ( $dir eq "EOFoffset" ) { + $regex = + join( "", "(", $lregex, $expanded, $rregex, ")", $offset_expanded ); + } + else { + warn "unknown reference '$dir' found\n"; + $regex = join( "", $lregex, $expanded, $rregex ); + } + $ret->{regex} = + File::FormatIdentification::Regex::peep_hole_optimizer($regex); + $ret->{position} = $position; + + return $ret; +} ## end sub _parse_subsequence ($$) + +# got XPath-object and returns regex-string +sub _parse_bytesequence ($) { + my $bsq = shift; + + #say "rx_groups in parse_byte_sequence:"; + my $reference = $bsq->getAttribute('Reference'); + ; # if BOFoffset -> anchored begin of file, EOFofset -> end of file + my @nodes = $bsq->getElementsByTagName('SubSequence'); + my @rx_groups = map { _parse_subsequence( $_, $reference ) } @nodes; + my $expanded = ""; + my $regex_flattened = _flatten_rx( $expanded, @rx_groups ); + + #my $ro = Regexp::Optimizer->new; + #my $ro = Regexp::Assemble->new; + #$ro->add( $regex_flattened); + #$regex_flattened = $ro->as_string($regex_flattened); + #$regex_flattened = $ro->re; + my $regex; + if ( !defined $reference || 0 == length($reference) ) { + $regex = "$regex_flattened"; + } + elsif ( $reference eq "BOFoffset" ) { + $regex = "\\A$regex_flattened"; + } + elsif ( $reference eq "EOFoffset" ) { + $regex = "$regex_flattened\\Z"; + } + else { + warn "unknown reference '$reference' found\n"; + $regex = "$regex_flattened"; + } + + use Regexp::Optimizer; + my $ro = Regexp::Optimizer->new; + + #say "regex='$regex'"; + #$regex = $ro->as_string( $regex ); + return $regex; +} ## end sub _parse_bytesequence ($) + +# ($%signatures, $%internal) = parse_signaturefile( $file ) +sub _parse_signaturefile($) { + my $pronomfile = shift; + my %signatures; + + # hash{internalid}->{regex} = $regex + # ->{signature} = $signature + my %internal_signatures; + + my $dom = XML::LibXML->load_xml( location => $pronomfile ); + $dom->indexElements(); + my $xp = XML::LibXML::XPathContext->new($dom); + $xp->registerNs( 'droid', + 'http://www.nationalarchives.gov.uk/pronom/SignatureFile' ); + +# find Fileformats +#my $tmp = $xp->find('/*[local-name() = "FFSignatureFile"]')->get_node(1); +#say "E:", $tmp->nodeName; +#say "EXISTS:", $xp->exists('/droid:FFSignatureFile'); +#say "EXISTS2", $xp->exists('/droid:FFSignatureFile/droid:FileFormatCollection/droid:FileFormat'); + + my $fmts = $xp->find( +'/*[local-name() = "FFSignatureFile"]/*[local-name() = "FileFormatCollection"]/*[local-name() = "FileFormat"]' + ); + foreach my $fmt ( $fmts->get_nodelist() ) { + my $id = $fmt->getAttribute('ID'); + my $mimetype = $fmt->getAttribute('MIMEtype'); + my $name = $fmt->getAttribute('Name'); + my $puid = $fmt->getAttribute('PUID'); + my $version = $fmt->getAttribute('Version'); + # + + ## + my @extensions = + map { $_->textContent() } $fmt->getElementsByTagName('Extension'); + my @internalsignatures = + map { $_->textContent() } + $fmt->getElementsByTagName('InternalSignatureID'); + my @haspriorityover = map { $_->textContent() } + $fmt->getElementsByTagName('HasPriorityOverFileFormatID'); + $signatures{$id}->{mimetype} = $mimetype; + $signatures{$id}->{name} = $name; + $signatures{$id}->{puid} = $puid; + $signatures{$id}->{version} = $version; # optional + $signatures{$id}->{extensions} = \@extensions; + $signatures{$id}->{internal_signatures} = \@internalsignatures; + + foreach my $prio (@haspriorityover) { + $signatures{$id}->{priorityover}->{$prio} = 1; + } + + foreach my $internal (@internalsignatures) { + $internal_signatures{$internal}->{signature} = $id; + } + } ## end foreach my $fmt ( $fmts->get_nodelist...) + + # find InternalSignatures + my $sigs = + $xp->find( +'/*[local-name() = "FFSignatureFile"]/*[local-name() = "InternalSignatureCollection"]/*[local-name() = "InternalSignature"]' + ); + + foreach my $sig ( $sigs->get_nodelist() ) { + + my $id = $sig->getAttribute('ID'); + my $specificity = $sig->getAttribute('Specificity'); + $internal_signatures{$id}->{specificity} = $specificity; + + #p( $sig->toString() ); + my @nodes = $sig->getElementsByTagName('ByteSequence'); + + #p( @nodes ); + my @rx_groups = map { _parse_bytesequence($_) } @nodes; + my @rx_quality = + map { File::FormatIdentification::Regex::calc_quality($_); } + @rx_groups; + + $internal_signatures{$id}->{regex} = \@rx_groups; + $internal_signatures{$id}->{quality} = \@rx_quality; + } ## end foreach my $sig ( $sigs->get_nodelist...) + + return ( \%signatures, \%internal_signatures ); +} ## end sub _parse_signaturefile($) + +sub uniq_signature_ids_by_priority { + my $self = shift; + my @signatures = @_; + my %found_signature_ids; + + # which PUIDs are in list? + foreach my $signatureid (@signatures) { + if ( defined $signatureid ) { + $found_signature_ids{$signatureid} = 1; + } + } + + # remove all signatures when actual signature has priority over + foreach my $signatureid ( keys %found_signature_ids ) { + foreach my $priority_over_sid ( + keys %{ $self->{signatures}->{$signatureid}->{priorityover} } ) + { + if ( exists $found_signature_ids{$priority_over_sid} ) { + delete $found_signature_ids{$priority_over_sid}; + } + } ## end foreach my $priority_over_sid... + } ## end foreach my $signatureid ( keys...) + + # reduce list to all signatures with correct priority + my @result = + grep { defined $found_signature_ids{ $_->{signature} } } @signatures; + return @result; +} ## end sub uniq_signature_ids_by_priority + +has 'droid_signature_filename' => ( + is => 'ro', + required => 1, + reader => 'get_droid_signature_filename', + trigger => sub { + my $self = shift; + + #say "TRIGGER"; + my $yaml_file = $self->get_droid_signature_filename() . ".yaml"; + if ( $self->{auto_load} && -e $yaml_file ) { + $self->load_from_yamlfile($yaml_file); + } + else { + my ( $signatures, $internal_signatures ) = + _parse_signaturefile( $self->{droid_signature_filename} ); + $self->{signatures} = $signatures; + $self->{internal_signatures} = $internal_signatures; + + #die; + if ( $self->{auto_store} ) { + $self->save_as_yamlfile($yaml_file); + } + } ## end else [ if ( $self->{auto_load...})] + foreach my $s ( keys %{ $self->{signatures} } ) { + my $puid = $self->{signatures}->{$s}->{puid}; + if ( defined $puid && length($puid) > 0 ) { + $self->{puids}->{$puid} = $s; + } + } + } +); + +sub save_as_yamlfile { + my $self = shift; + my $filename = shift; + my @res; + push @res, $self->{signatures}; + push @res, $self->{internal_signatures}; + YAML::XS::DumpFile( "$filename", @res ); +} ## end sub save_as_yamlfile + +sub load_from_yamlfile { + my $self = shift; + my $filename = shift; + my ( $sig, $int ) = YAML::XS::LoadFile($filename); + $self->{signatures} = $sig; + $self->{internal_signatures} = $int; +} ## end sub load_from_yamlfile + +has 'auto_store' => ( + is => 'ro', + default => 1, +); + +has 'auto_load' => ( + is => 'ro', + default => 1, +); + +sub get_all_signature_ids { + my $self = shift; + my @sigs = sort { $a <=> $b } keys %{ $self->{signatures} }; + return @sigs; +} + +sub get_signature_id_by_puid { + my $self = shift; + my $puid = shift; + my $sig = $self->{puids}->{$puid}; + no warnings; + return $sig; + use warnings; +} + +sub get_internal_ids_by_puid { + my $self = shift; + my $puid = shift; + my $sig = $self->get_signature_id_by_puid($puid); + my @ids = (); + if ( defined $sig ) { + @ids = grep { defined $_ } + @{ $self->{signatures}->{$sig}->{internal_signatures} }; + } + return @ids; +} + +sub get_file_endings_by_puid { + my $self = shift; + my $puid = shift; + my $sig = $self->get_signature_id_by_puid($puid); + my @endings = (); + if ( defined $sig ) { + @endings = $self->{signatures}->{$sig}->{extensions}; + } + return @endings; +} + +sub get_all_internal_ids { + my $self = shift; + my @ids = sort { $a <=> $b } keys %{ $self->{internal_signatures} }; + foreach my $id (@ids) { + if ( !defined $id ) { confess("$id not defined") } + } + return @ids; +} + +sub get_all_puids { + my $self = shift; + my @ids = + sort grep { defined $_ } + map { $self->{signatures}->{$_}->{puid}; } + grep { defined $_ } $self->get_all_signature_ids(); + return @ids; +} + +sub get_regular_expressions_by_internal_id { + my $self = shift; + my $internalid = shift; + if ( !defined $internalid ) { confess("internalid must exists!"); } + my @rx = @{ $self->{internal_signatures}->{$internalid}->{regex} }; + return @rx; +} + +sub get_all_regular_expressions { + my $self = shift; + my @ids = $self->get_all_internal_ids(); + my @regexes = (); + foreach my $id (@ids) { + my @rx = $self->get_regular_expressions_by_internal_id($id); + push @regexes, @rx; + } + my @ret = sort @regexes; + return @ret; +} + +sub get_qualities_by_internal_id { + my $self = shift; + my $internalid = shift; + if ( !defined $internalid ) { confess("internalid must exists!"); } + my $value = $self->{internal_signatures}->{$internalid}->{quality}; + if ( defined $value ) { + return @{$value}; + } + return; +} + +sub get_signature_id_by_internal_id { + my $self = shift; + my $internalid = shift; + if ( !defined $internalid ) { confess("internalid must exists!"); } + return $self->{internal_signatures}->{$internalid}->{signature}; +} + +sub get_name_by_signature_id { + my $self = shift; + my $signature = shift; + return $self->{signatures}->{$signature}->{name}; +} + +sub get_puid_by_signature_id { + my $self = shift; + my $signature = shift; + return $self->{signatures}->{$signature}->{puid}; +} + +sub get_puid_by_internal_id { + my $self = shift; + my $internalid = shift; + if ( !defined $internalid ) { confess("internalid must exists!"); } + my $signature = $self->get_signature_id_by_internal_id($internalid); + return $self->get_puid_by_signature_id($signature); +} + +sub get_quality_sorted_internal_ids { + my $self = shift; + my @ids = sort { + + # sort by regexes + my @a_rxq = @{ $self->{internal_signatures}->{$a}->{quality} }; + my @b_rxq = @{ $self->{internal_signatures}->{$b}->{quality} }; + my $aq = 0; + foreach my $as (@a_rxq) { $aq += $as; } + my $bq = 0; + foreach my $bs (@b_rxq) { $bq += $bs; } + + #use Data::Printer; + #p( $a ); + #p( $aq ); + $aq <=> $bq; + } $self->get_all_internal_ids(); + return @ids; +} + +sub get_combined_regex_by_puid { + my $self = shift; + my $puid = shift; + my @internals = $self->get_internal_ids_by_puid($puid); + + #use Data::Printer; + #p( $puid ); + #p( @internals ); + my @regexes = map { + my @regexes_per_internal = + $self->get_regular_expressions_by_internal_id($_); + my $combined = + File::FormatIdentification::Regex::and_combine(@regexes_per_internal); + + #p( $combined ); + $combined; + } @internals; + my $result = File::FormatIdentification::Regex::or_combine(@regexes); + + #p( $result ); + return $result; +} + +sub _prepare_statistics { + my $self = shift; + my $results; + + # count of PUIDs + # count of internal ids (IDs per PUID) + # count of regexes + # count of file endings only + # count of internal ids without PUID + # larges and shortest regex + # complex and simple regex + # common regexes + #say "stat"; + my @puids = $self->get_all_puids(); + my $puids = scalar(@puids); + my @internals = $self->get_all_internal_ids(); + my $internals = scalar(@internals); + my $regexes = 0; + my $fileendingsonly = 0; + my @fileendingsonly = (); + my $fileendings = 0; + my $int_per_puid = 0; + my $internal_without_puid = 0; + my @internal_without_puid = (); + my @quality_sorted_internal_ids = $self->get_quality_sorted_internal_ids(); + my %uniq_regexes; + + foreach my $internalid (@internals) { + my @regexes = + $self->get_regular_expressions_by_internal_id($internalid); + foreach my $rx (@regexes) { + my @tmp = (); + if ( exists $uniq_regexes{$rx} ) { + @tmp = @{ $uniq_regexes{$rx} }; + } + push @tmp, $internalid; + $uniq_regexes{$rx} = \@tmp; + } + + $regexes += scalar(@regexes); + my $sigid = $self->get_signature_id_by_internal_id($internalid); + if ( !defined $sigid ) { + $internal_without_puid++; + push @internal_without_puid, $internalid; + } + } + foreach my $puid (@puids) { + my @ints = $self->get_internal_ids_by_puid($puid); + my @fileendings = $self->get_file_endings_by_puid($puid); + if ( 0 == scalar(@ints) ) { + $fileendingsonly++; + push @fileendingsonly, $puid; + } + else { + $fileendings += scalar(@fileendings); + $int_per_puid += scalar(@ints); + } + } + foreach my $i (@quality_sorted_internal_ids) { + my $regex = + join( "#", $self->get_regular_expressions_by_internal_id($i) ); + my $quality = join( " ", $self->get_qualities_by_internal_id($i) ); + + } + + $results->{filename} = $self->get_droid_signature_filename(); + $results->{count_of_puids} = $puids; + $results->{count_of_internal_ids} = $internals; + $results->{count_of_regular_expressions} = $regexes; + $results->{count_of_fileendings} = $fileendings; + $results->{count_of_puid_with_fileendings_only} = $fileendingsonly; + $results->{puids_with_fileendings_only} = \@fileendingsonly; + $results->{count_of_orphaned_internal_ids} = $internal_without_puid; + $results->{internal_ids_without_puids} = \@internal_without_puid; + no warnings; + + for ( my $i = 0 ; $i <= 4 ; $i++ ) { + my $best_quality_internal = pop @quality_sorted_internal_ids; + if ( defined $best_quality_internal ) { + my $best_quality = join( ";", + $self->get_qualities_by_internal_id($best_quality_internal) ); + my $best_puid = + $self->get_puid_by_internal_id($best_quality_internal); + my $best_name = + $self->get_name_by_signature_id( + $self->get_signature_id_by_internal_id($best_quality_internal) + ); + my $best_regex = $self->get_combined_regex_by_puid($best_puid); + $results->{nth_best_quality}->[$i]->{internal_id} = + $best_quality_internal; + $results->{nth_best_quality}->[$i]->{puid} = $best_puid; + $results->{nth_best_quality}->[$i]->{name} = $best_name; + $results->{nth_best_quality}->[$i]->{quality} = $best_quality; + $results->{nth_best_quality}->[$i]->{combined_regex} = $best_regex; + } + } + for ( my $i = 0 ; $i <= 4 ; $i++ ) { + my $worst_quality_internal = shift @quality_sorted_internal_ids; + if ( defined $worst_quality_internal ) { + my $worst_quality = join( ";", + $self->get_qualities_by_internal_id($worst_quality_internal) ); + my $worst_puid = + $self->get_puid_by_internal_id($worst_quality_internal); + my $worst_name = + $self->get_name_by_signature_id( + $self->get_signature_id_by_internal_id($worst_quality_internal) + ); + my $worst_regex = $self->get_combined_regex_by_puid($worst_puid); + $results->{nth_worst_quality}->[$i]->{internal_id} = + $worst_quality_internal; + $results->{nth_worst_quality}->[$i]->{puid} = $worst_puid; + $results->{nth_worst_quality}->[$i]->{name} = $worst_name; + $results->{nth_worst_quality}->[$i]->{quality} = $worst_quality; + $results->{nth_worst_quality}->[$i]->{combined_regex} = + $worst_regex; + } + } + my @multiple_used_regex = grep { + my $tmp = $uniq_regexes{$_}; + my @tmp = @{$tmp}; + scalar(@tmp) > 1 + } sort keys %uniq_regexes; + $results->{count_of_multiple_used_regex} = scalar(@multiple_used_regex); + for ( my $i = 0 ; $i <= $#multiple_used_regex ; $i++ ) { + $results->{multiple_used_regex}->[$i]->{regex} = + $multiple_used_regex[$i]; + my @ids = join( ",", @{ $uniq_regexes{ $multiple_used_regex[$i] } } ); + $results->{multiple_used_regex}->[$i]->{internal_ids} = \@ids; + } + return $results; +} + +sub print_csv_statistics { + my $self = shift; + my $results = $self->_prepare_statistics(); + my $version = $results->{filename}; + $version =~ s/DROID_SignatureFile_V(\d+)\.xml/$1/; + $results->{version} = $version; + $results->{best_quality_puid} = $results->{nth_best_quality}->[0]->{puid}; + $results->{best_quality_internal_id} = + $results->{nth_best_quality}->[0]->{internal_id}; + $results->{best_quality_quality} = + $results->{nth_best_quality}->[0]->{quality}; + $results->{best_quality_combined_regex} = + $results->{nth_best_quality}->[0]->{combined_regex}; + $results->{worst_quality_puid} = $results->{nth_worst_quality}->[0]->{puid}; + $results->{worst_quality_internal_id} = + $results->{nth_worst_quality}->[0]->{internal_id}; + $results->{worst_quality_quality} = + $results->{nth_worst_quality}->[0]->{quality}; + $results->{worst_quality_combined_regex} = + $results->{nth_worst_quality}->[0]->{combined_regex}; + + my @headers = + qw(version filename count_of_puids count_of_internal_ids count_of_regular_expressions count_of_fileendings count_of_puid_with_fileendings_only count_of_orphaned_internal_ids count_of_multiple_used_regex best_quality_puid best_quality_internal_id best_quality_quality best_quality_combined_regex worst_quality_puid worst_quality_internal_id worst_quality_quality worst_quality_combined_regex); + say "#", join( ",", @headers ); + say join( + ",", + map { + my $result = $results->{$_}; + if ( !defined $result ) { $result = ""; } + $result; + } @headers + ); +} + +sub print_statistics { + my $self = shift; + my $verbose = shift; + my $results = $self->_prepare_statistics(); + + say "Statistics of file $results->{filename}"; + say "======================================="; + say ""; + say "Countings"; + say "---------------------------------------"; + say "Count of PUIDs: $results->{count_of_puids}"; + say +" internal IDs: $results->{count_of_internal_ids}"; + say +" regular expressions: $results->{count_of_regular_expressions}"; + say + " file endings: $results->{count_of_fileendings}"; + say +" PUIDs with file endings only: $results->{count_of_puid_with_fileendings_only}"; + + if ( defined $verbose ) { + say " (", + join( ",", @{ $results->{internal_ids_without_puids} } ), ")"; + } + say +" orphaned internal IDs: $results->{count_of_orphaned_internal_ids}"; + if ( defined $verbose ) { + say " (", + join( ",", @{ $results->{internal_ids_without_puids} } ), ")"; + } + say ""; + say "Quality of internal IDs"; + say "---------------------------------------"; + + my $nth = 1; + foreach my $n ( @{ $results->{nth_best_quality} } ) { + say +"$nth-best quality internal ID (PUID, name): $n->{internal_id} ($n->{puid}, $n->{name}) -> $n->{quality}"; + if ( defined $verbose ) { + say " combined regex: ", $n->{combined_regex}; + } + $nth++; + } + say ""; + $nth = 1; + foreach my $n ( @{ $results->{nth_worst_quality} } ) { + say +"$nth-worst quality internal ID (PUID, name): $n->{internal_id} ($n->{puid}, $n->{name}) -> $n->{quality}"; + if ( defined $verbose ) { + say " combined regex: ", $n->{combined_regex}; + } + $nth++; + } + say ""; + + say ""; + say "Regular expressions"; + say "---------------------------------------"; + say +"Count of multiple used regular expressions: $results->{count_of_multiple_used_regex}"; + if ( defined $verbose ) { + for ( my $i = 0 ; $i < $results->{count_of_multiple_used_regex} ; $i++ ) + { + say " common regex group no $i:"; + say " regex='" + . $results->{multiple_used_regex}->[$i]->{regex} . "'"; + say " internal IDs: ", + join( ",", + @{ $results->{multiple_used_regex}->[$i]->{internal_ids} } ); + } + } + say ""; + + #my @rx = $self->get_all_regular_expressions(); + #use Data::Printer; + #p( %uniq_regexes ); +} + +1; + +no Moose; +__PACKAGE__->meta->make_immutable; + +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +File::FormatIdentification::Pronom - Perl extension for parsing Pronom-Signatures using DROID-Signature file + +=head1 SYNOPSIS + + use File::FormatIdentification::Pronom; + my $pronomfile = "Droid-Signature.xml"; + my ( $signatures, $internals ) = parse_signaturefile($pronomfile); + + +=head1 DESCRIPTION + +Stub documentation for File::FormatIdentification::Pronom, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +art1, Eart1@E + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2018 by art1 + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.24.1 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/lib/File/FormatIdentification/Regex.pm b/lib/File/FormatIdentification/Regex.pm new file mode 100644 index 0000000..df6f5de --- /dev/null +++ b/lib/File/FormatIdentification/Regex.pm @@ -0,0 +1,251 @@ +package File::FormatIdentification::Regex; + +use 5.024001; +use strict; +use warnings; +use diagnostics; +use String::LCSS; + +use Regexp::Assemble; +use Regexp::Optimizer; +use Carp; +use Exporter 'import'; # gives you Exporter's import() method directly +our @EXPORT = + qw(and_combine or_combine calc_quality simplify_two_or_combined_regex peep_hole_optimizer ) + ; # symbols to export on request +our @EXPORT_OK = qw( hex_replace_from_bracket hex_replace_to_bracket ); + +our $VERSION = '0.01'; + + +sub and_combine (@) { + my @rx_groups = map { + my $rx = $_; + my $rxfill = ""; + my $ret = ''; + if ( $rx =~ m#^\^$# ) { $ret = $rx; } + elsif ( $rx =~ m#^\$$# ) { $ret = $rx; } + else { + if ( $rx =~ m#\$$# ) { + $rxfill = ".*"; + } + $ret = "(?=$rxfill$rx)"; + } + $ret; + } @_; + my $combined = join( "", @rx_groups ); + + #my $rx = Regexp::Assemble->new; + #$rx->add( $combined ); + #return $rx->as_string; + #my $o = Regexp::Optimizer->new; + #my $rcomb = qr/$combined/; + #return $o->as_string($rcomb); + return $combined; +} + +sub or_combine (@) { + my $ro = Regexp::Assemble->new; + foreach my $rx (@_) { + $ro->add($rx); + } + return $ro->as_string; +} + +sub simplify_two_or_combined_regex($$) { + my $rx1 = shift; + my $rx2 = shift; + my $common = ""; + if ( + # ($rx1 =~ m#\(([A-Za-z0-9]*)|(\\x[0-9A-F]{2})*\)#) && + # ($rx2 =~ m#\(([A-Za-z0-9]*)|(\\x[0-9A-F]{2})*\)#) + ( $rx1 =~ m#\(([A-Za-z0-9]*)\)# ) + && ( $rx2 =~ m#\(([A-Za-z0-9]*)\)# ) + + ) + { + # only left simplify supported yet + my $common = String::LCSS::lcss( $rx1, $rx2 ); + + #say ""; + #say "Found common='$common' of rx1='$rx1' rx2='$rx2'"; + #say ""; + } + return $common; +} + +sub hex_replace_to_bracket { + my $regex = shift; + $regex =~ s#\\x([0-9A-F]{2})#\\x{$1}#g; + return $regex; +} + +sub hex_replace_from_bracket { + my $regex = shift; + $regex =~ s#\\x\{([0-9A-F]{2})\}#\\x$1#g; + return $regex; +} + +sub peep_hole_optimizer ($) { + my $regex = shift + ; # only works if special Regexes within File::FormatIdentification:: used + $regex = hex_replace_to_bracket($regex); + my $oldregex = $regex; + ##### first optimize bracket-groups + my $subrg = + qr#(?:[A-Za-z0-9])|(?:\\x\{[0-9A-F]{2}\})#; # matches: \x00-\xff or text + #my $subrg = qr#(?:\($subra\))#; + my $subre = qr#(?:\($subrg(?:\|$subrg)+\))|(?:$subrg)# + ; # matches (…|…) or (…|…|…) ... + #$regex =~ s#\(\(($subra*)\)\)(?!\|)#(\1\)#g; # matches ((…)) + $regex =~ s#\(\(($subre+)\)\)#($1)#g; + $regex =~ s#\(\((\([^)|]*\)(\|\([^)|]*\))+)\)\)#($1)#g; + ##### optimize common subsequences + ##### part1, combine bar|baz -> ba(r|z) + #say "BEFORE: regex=$regex"; + while ($regex =~ m#\(($subrg*)\)\|\(($subrg*)\)# + || $regex =~ m#($subrg*)\|($subrg*)# ) + { + my $rx1 = $1; + my $rx2 = $2; + + #say "common subseq: $regex -> rx1=$rx1 rx2=$rx2"; + + my $common = String::LCSS::lcss( $rx1, $rx2 ); + if ( !defined $common || length($common) == 0 ) { last; } + if ( $common !~ m#^$subrg+$# ) { last; } + + #say "!ok: $regex -> common=$common"; + + # common prefix + if ( $rx1 =~ m#^(.*)$common$# && $rx2 =~ m#^(.*)$common$# ) { + + #say "suffix found"; + $rx1 =~ m#^(.*)$common$#; + my $rx1_prefix = $1; + $rx2 =~ m#^(.*)$common$#; + my $rx2_prefix = $1; + my $subst = "($rx1_prefix|$rx2_prefix)$common"; + if ( $regex =~ m#\(($subrg*)\)\|\(($subrg*)\)# ) { + $regex =~ s#\($subrg*\)\|\($subrg*\)#$subst#g; + } + elsif ( $regex =~ m#($subrg*)\|($subrg*)# ) { + $regex =~ s#$subrg*\|$subrg*#$subst#g; + } + } + + # common suffix + elsif ( $rx1 =~ m#^$common(.*)$# && $rx2 =~ m#^$common(.*)$# ) { + + #say "prefix found"; + $rx1 =~ m#^$common(.*)$#; + my $rx1_suffix = $1; + $rx2 =~ m#^$common(.*)$#; + my $rx2_suffix = $1; + my $subst = "$common($rx1_suffix|$rx2_suffix)"; + + #say "subst=$subst"; + if ( $regex =~ m#\(($subrg*)\)\|\(($subrg*)\)# ) { + $regex =~ s#\($subrg*\)\|\($subrg*\)#$subst#g; + } + elsif ( $regex =~ m#($subrg*)\|($subrg*)# ) { + $regex =~ s#$subrg*\|$subrg*#$subst#g; + } + + #say "regex=$regex"; + } + else { + last; + } + } + ##### part2, combine barbara -> (bar){2}a + while ( $regex =~ m#($subrg{3,}?)(\1+)(?!$subrg*\})# ) { + my $sub = $1; + if ( $sub =~ m#^($subrg)\1+$# ) { + last; + } + my $l1 = length($1); + my $l2 = length($2); + my $matches = 1 + ( $l2 / $l1 ); + +#say "Found1 in regex='$regex' sub='$sub' with \$2=$2 l1=$l1 l2=$l2 matches=$matches"; + + if ( $sub =~ m#^$subrg$# ) { + $regex =~ s#($subrg{3,}?)\1+(?!$subrg*\})#$sub\{$matches\}#; + } + else { + $regex =~ s#($subrg{3,}?)\1+(?!$subrg*\})#($sub)\{$matches\}#; + } + } + ##### part2, combine toooor -> to{4}r + while ( $regex =~ m#($subrg)(\1{3,})(?!$subrg*\})# ) { + my $sub = $1; + my $l1 = length($1); + my $l2 = length($2); + my $matches = 1 + ( $l2 / $l1 ); + +#say "Found2 in regex='$regex' sub='$sub' with \$2=$2 l1=$l1 l2=$l2 matches=$matches"; + + if ( $sub =~ m#^$subrg$# ) { + $regex =~ s#($subrg)\1{3,}(?!$subrg*\})#$sub\{$matches\}#; + } + else { + $regex =~ s#($subrg)\1{3,}(?!$subrg*\})#($sub)\{$matches\}#; + } + } + ##### part2, combine foooo -> fo{4} + #while ($regex =~ m#($subrg)\1{3,}(?!$subrg*\})#) { + # my $sub = $1; + # my $matches = $#+; $matches++; + # say "Found in regex='$regex' sub='$sub' with matches=$matches"; + # $regex =~ s#($subrg)\1{3,}(?!$subrg*\}#$sub\{$matches\}#; + #} + #### restore \x{ff} to \xff + $regex = hex_replace_from_bracket($regex); + if ( $regex =~ m#\\x0\{# ) { + confess "wrong substitution of oldregex = \n\t'", $oldregex, + "'\n -> \n\t'", $regex, "'"; + } + return $regex; +} + +sub calc_quality ($) { + my $regex = shift; + + # replace all \xff with # + # replace all . with ( | | | | ) + # replace all [abc] with (a|b|c) + # replace all [^abc] with (d|e|f|..|) + # then $len = count of # and $or = count of | + # divide it with $len / (1+$or) + my $len = 0; + my $alt = 0; + while ( $regex =~ s/\\x[0-9a-f]{2}// ) { + $len++; + } + while ( $regex =~ s/\[\^(.*?)\]// ) { + $alt += ( 256 - length($1) ); + $len++; + } + while ( $regex =~ s/\[(.*?)\]// ) { + $alt += length($1); + $len++; + } + while ( $regex =~ s/\.// ) { + $alt += 256; + $len++; + } + while ( $regex =~ s/[A-Za-z0-9 ]// ) { + $len++; + } + my $tmp = $len / ( 1 + $alt ); + + my $quality = ( $tmp == 0 ) ? 0 : int( 1000 * log($tmp) ) / 1000; + + #say "rest: $regex len=$len alt=$alt quality=$quality ($tmp)"; + return $quality; +} + +# see https://stackoverflow.com/questions/869809/combine-regexp#870506 + +1; diff --git a/t/DROID_SignatureFile_V93.xml b/t/DROID_SignatureFile_V93.xml new file mode 100644 index 0000000..5ca979a --- /dev/null +++ b/t/DROID_SignatureFile_V93.xml @@ -0,0 +1,42544 @@ + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + + + 474946383961 + 7 + 3 + 2 + 4 + 6 + 5 + 1 + + + + + 3B + -2 + -1 + + + + + + + 474946383761 + 7 + 2 + 3 + 4 + 6 + 5 + 1 + + + + + 3B + -2 + -1 + + + + + + + 255044462D312E34 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 255044462D312E36 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 255044462D312E35 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 255044462D312E33 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 3C3F786D6C2076657273696F6E3D22312E3022 + 20 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 13 + 17 + + + 3C737667 + 5 + 4 + 1 + 3 + 2 + + + 7376673E + 5 + 1 + 2 + 4 + 3 + + + + + + + 3C3F786D6C2076657273696F6E3D22312E3022 + 20 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 13 + 17 + + + 3C737667 + 5 + 4 + 1 + 3 + 2 + + + 76657273696F6E3D22312E3122 + 14 + 1 + 3 + 2 + 6 + 12 + 9 + 7 + 8 + 11 + 10 + 13 + + + 7376673E + 5 + 1 + 2 + 4 + 3 + + + + + + + 5C616E7369637067 + 9 + 8 + 7 + 3 + 1 + 4 + 6 + 2 + 5 + 616E7369 + 6D6163 + 7063 + 706361 + 5C + 66 + 6631 + 7B5C7274 + + + 5C737473686664626368 + 11 + 10 + 3 + 2 + 4 + 5 + 1 + 7 + 8 + 5C73747368666C6F6368 + 5C737473686668696368 + 5C73747368666269 + + + + + + + 7B5C7274 + 5 + 3 + 2 + 1 + 4 + 66 + 6631 + 5C + 616E7369 + 6D6163 + 7063 + 706361 + + + + + + + 3C3F786D6C2076657273696F6E3D + 15 + 9 + 14 + 1 + 13 + 7 + 4 + 10 + 11 + 2 + 3 + 6 + 5 + 8 + 12 + 22 + 27 + 312E30 + 22 + 27 + + + + + + + 20222D2F2F + 6 + 5 + 4 + 3 + 1 + 5055424C4943 + 7075626C6963 + 20 + 48544D4C + 68746D6C + 20 + 444F4354595045 + 646F6374797065 + 3C21 + 2F2F + 445444 + 647464 + 20 + 48544D4C + 68746D6C + 20322E30 + + + + + + + 20222D2F2F + 6 + 5 + 4 + 3 + 1 + 5055424C4943 + 7075626C6963 + 20 + 48544D4C + 68746D6C + 20 + 444F4354595045 + 646F6374797065 + 3C21 + 2F2F + 445444 + 647464 + 20 + 48544D4C + 68746D6C + 20332E32 + + + + + + + 20222D2F2F + 6 + 5 + 4 + 3 + 1 + 5055424C4943 + 7075626C6963 + 20 + 48544D4C + 68746D6C + 20 + 444F4354595045 + 646F6374797065 + 3C21 + 2F2F + 445444 + 647464 + 20 + 48544D4C + 68746D6C + 20342E + 3020 + 302F + + + + + + + 20222D2F2F + 6 + 5 + 4 + 3 + 1 + 5055424C4943 + 7075626C6963 + 20 + 48544D4C + 68746D6C + 20 + 444F4354595045 + 646F6374797065 + 3C21 + 2F2F + 445444 + 647464 + 20 + 48544D4C + 68746D6C + 20342E3031 + + + + + + + 3C21444F43545950452068746D6C205055424C494320222D2F2F5733432F2F445444205848544D4C20312E30 + 45 + 4 + 43 + 22 + 21 + 2 + 14 + 1 + 3 + 17 + 44 + 27 + 16 + 11 + 36 + 8 + 25 + 5 + 6 + 41 + 29 + 7 + 28 + 18 + 9 + 38 + 34 + 31 + 32 + 33 + + + + + 3C68746D6C20786D6C6E733D22687474703A2F2F7777772E77332E6F72672F313939392F7868746D6C22 + 43 + 37 + 1 + 16 + 7 + 11 + 17 + 8 + 25 + 42 + 31 + 13 + 5 + 2 + 3 + 33 + 15 + 26 + 14 + 32 + 4 + 18 + 6 + + + 3C7469746C653E + 8 + 7 + 1 + 2 + 5 + 3 + 4 + + + 3C2F7469746C653E + 9 + 7 + 8 + 1 + 2 + 5 + 3 + 4 + + + + + + + 3C21444F43545950452068746D6C205055424C494320222D2F2F5733432F2F445444205848544D4C20312E31 + 45 + 4 + 43 + 22 + 21 + 2 + 14 + 1 + 17 + 44 + 27 + 16 + 11 + 36 + 8 + 25 + 5 + 6 + 41 + 29 + 7 + 28 + 18 + 9 + 38 + 34 + 31 + 32 + 33 + + + + + 3C68746D6C20786D6C6E733D22687474703A2F2F7777772E77332E6F72672F313939392F7868746D6C22 + 43 + 37 + 1 + 16 + 7 + 11 + 17 + 8 + 25 + 42 + 31 + 13 + 5 + 2 + 3 + 33 + 15 + 26 + 14 + 32 + 4 + 18 + 6 + + + 3C7469746C653E + 8 + 7 + 1 + 2 + 5 + 3 + 4 + + + 3C2F7469746C653E + 9 + 7 + 8 + 1 + 2 + 5 + 3 + 4 + + + + + + + 3C + 2 + 1 + 48544D4C + 68746D6C + + + + + 3C2F + -3 + -2 + -1 + 424F4459 + 48544D4C + 626F6479 + 68746D6C + 3E + + + + + + + 46575301 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575302 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575303 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575304 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575305 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575306 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 46575307 + 5 + 1 + 4 + 2 + 3 + + + + + 0000 + -3 + -1 + + + + + + + 464C5601 + 5 + 1 + 4 + 3 + 2 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 41564920 + + + 6864726C61766968 + 9 + 4 + 7 + 1 + 2 + 5 + 6 + 3 + 4C495354 + + + 4C495354 + 5 + 3 + 4 + 2 + 1 + 6D6F7669 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 62657874 + 5 + 4 + 3 + 1 + 2 + 0100 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 0100 + + + + + + + 2356524D4C2056312E30206173636969 + 17 + 6 + 16 + 8 + 7 + 9 + 12 + 13 + 14 + 10 + 5 + 3 + 1 + 4 + + + + + + + 2356524D4C2056322E302075746638 + 16 + 5 + 15 + 7 + 6 + 8 + 1 + 11 + 12 + 13 + 9 + 2 + 3 + 4 + + + + + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 6D766864 + + + + + + + 53494D504C4520203D202020202020202020202020202020202020202054 + 31 + 2 + 22 + 25 + 29 + 26 + 28 + 27 + 30 + 1 + 42495450495820203D + 2038 + 2B38 + 3038 + 3136 + 3332 + 3634 + 4E415849532020203D + + + + + + + 89504E470D0A1A0A0000000D49484452 + 17 + 6 + 9 + 5 + 10 + 2 + 13 + 3 + 4 + 14 + 15 + 1 + 16 + + + + + 0000000049454E44AE426082 + -13 + -1 + -10 + -8 + -6 + -5 + -7 + -11 + -12 + -9 + + + + + + + 0A0501 + 4 + 1 + 2 + 3 + 01 + 02 + 04 + 08 + 00 + 20 + 00 + 01 + 02 + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 + + + + + + + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 55 + 1 + 00 + 01 + 02 + 00 + 01 + 02 + 04 + 08 + 0A0401 + + + + + + + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 55 + 1 + 00 + 01 + 02 + 00 + 01 + 02 + 04 + 08 + 0A0301 + + + + + + + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 55 + 1 + 00 + 01 + 02 + 00 + 01 + 02 + 04 + 08 + 0A0201 + + + + + + + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 55 + 1 + 00 + 01 + 02 + 00 + 01 + 02 + 04 + 08 + 0A0001 + + + + + + + 4A464946000100 + 8 + 1 + 2 + 4 + 5 + 7 + FFD8FFE0 + 00 + 01 + 02 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 4A464946000101 + 8 + 3 + 1 + 4 + 5 + 7 + FFD8FFE0 + 00 + 01 + 02 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 4A464946000102 + 8 + 3 + 2 + 1 + 4 + 5 + 7 + FFD8FFE0 + 00 + 01 + 02 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + FFD8FF + 4 + 2 + 1 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + FFD8FFE800205350494646000100 + 15 + 1 + 2 + 9 + 4 + 6 + 7 + 8 + 13 + 11 + 12 + 00 + 01 + 02 + 03 + 04 + 00 + 01 + 02 + 03 + 04 + 05 + FFE8 + + + + + + + 09000400 + 5 + 1 + 2 + 4 + 1000 + + + + + + + 09020600 + 5 + 1 + 3 + 2 + 4 + 1000 + + + + + + + 09040600 + 5 + 1 + 3 + 2 + 4 + 1000 + + + + + + + 09040600 + 5 + 1 + 3 + 2 + 4 + 0000 + 0004 + 0001 + + + + + + + 00050500 + 5 + 1 + 2 + 0908 + + + + + + + 00060500 + 5 + 1 + 2 + 3 + 0908 + + + + + + + 3026B2758E66CF11A6D900AA0062CE6C + 17 + 4 + 9 + 15 + 16 + 3 + 11 + 1 + 13 + 12 + 8 + 5 + 14 + 2 + 10 + 7 + 0102 + + + + + + + 3026B2758E66CF11A6D900AA0062CE6C + 17 + 4 + 9 + 15 + 16 + 3 + 11 + 1 + 13 + 12 + 8 + 5 + 14 + 2 + 10 + 7 + 0102 + + + + + 9107DCB7B7A9CF118EE600C00C205365 + 17 + 6 + 15 + 4 + 9 + 3 + 2 + 1 + 8 + 16 + 11 + 12 + 5 + 10 + 14 + 7 + 409E69F84D5BCF11A8FD00805F5C442B + 6101 + 6201 + 6301 + + + + + + + 3026B2758E66CF11A6D900AA0062CE6C + 17 + 4 + 9 + 15 + 16 + 3 + 11 + 1 + 13 + 12 + 8 + 5 + 14 + 2 + 10 + 7 + 0102 + + + + + 9107DCB7B7A9CF118EE600C00C205365 + 17 + 6 + 15 + 4 + 9 + 3 + 2 + 1 + 8 + 16 + 11 + 12 + 5 + 10 + 14 + 7 + C0EF19BC4D5BCF11A8FD00805F5C442B + 574D56 + 31 + 32 + 33 + + + + + + + 4D43302E30 + 6 + 2 + 1 + 4 + 5 + + + + + + + 4143312E32 + 6 + 2 + 3 + 1 + 5 + 4 + + + + + + + 4143312E33 + 6 + 2 + 3 + 1 + 5 + 4 + + + + + + + 4143312E3430 + 7 + 3 + 1 + 4 + 2 + 6 + 5 + + + + + + + 4143312E3530 + 7 + 3 + 1 + 4 + 2 + 6 + 5 + + + + + + + 4143322E3130 + 7 + 3 + 1 + 2 + 4 + 6 + 5 + + + + + + + 4143 + 3 + 2 + 1 + 31303031 + 322E3231 + 322E3232 + + + + + + + 414331303032 + 7 + 2 + 4 + 1 + 6 + 5 + + + + + + + 414331303033 + 7 + 2 + 4 + 1 + 6 + 5 + + + + + + + 414331303034 + 7 + 2 + 4 + 1 + 6 + 5 + + + + + + + 414331303036 + 7 + 2 + 4 + 1 + 6 + 5 + + + + + + + 414331303039 + 7 + 2 + 4 + 1 + 6 + 5 + + + + + + + 414331303132 + 7 + 3 + 2 + 1 + 6 + 5 + + + + + + + 414331303134 + 7 + 3 + 2 + 1 + 6 + 5 + + + + + + + 414331303135 + 7 + 3 + 2 + 1 + 6 + 5 + + + + + + + 414331303138 + 7 + 3 + 2 + 1 + 6 + 5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4D43302E300D0A + 26 + 1 + 2 + 11 + 22 + 4 + 3 + 10 + 25 + 19 + 6 + 18 + 16 + 7 + 15 + 17 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143312E320D0A + 26 + 1 + 2 + 11 + 22 + 4 + 5 + 3 + 25 + 7 + 6 + 18 + 16 + 15 + 17 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143312E330D0A + 26 + 1 + 2 + 11 + 22 + 4 + 5 + 3 + 25 + 7 + 6 + 18 + 16 + 15 + 17 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143312E34300D0A + 27 + 1 + 2 + 12 + 23 + 5 + 3 + 6 + 4 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143312E35300D0A + 27 + 1 + 2 + 12 + 23 + 5 + 3 + 6 + 4 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143322E31300D0A + 27 + 1 + 2 + 12 + 23 + 5 + 3 + 4 + 6 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143 + 21 + 3 + 4 + 6 + 17 + 5 + 20 + 2 + 1 + 13 + 11 + 10 + 12 + 31303031 + 322E3231 + 322E3232 + 0D0A + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143313030320D0A + 27 + 1 + 2 + 12 + 23 + 4 + 6 + 3 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143313030330D0A + 27 + 1 + 2 + 12 + 23 + 4 + 6 + 3 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143313030340D0A + 27 + 1 + 2 + 12 + 23 + 4 + 6 + 3 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143313030360D0A + 27 + 1 + 2 + 12 + 23 + 4 + 6 + 3 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 53454354494F4E + 8 + 5 + 6 + 3 + 1 + 2 + 7 + 4 + 0A + 0D0A + 30 + 0A + 0D0A + 202032 + 0A + 0D0A + 484541444552 + 0A + 0D0A + + + 2441434144564552 + 9 + 8 + 5 + 6 + 4 + 2 + 1 + 3 + 0A + 0D0A + 39 + 0A + 0D0A + 202031 + 0A + 0D0A + 414331303039 + 0A + 0D0A + + + 454E44534543 + 7 + 1 + 4 + 2 + 5 + 3 + 0A + 0D0A + 30 + 0A + 0D0A + + + + + 454F46 + -4 + -1 + -3 + -2 + 0A + 0D0A + 30 + 0A + 0D0A + + + + + + + 53454354494F4E + 8 + 5 + 6 + 3 + 1 + 2 + 7 + 4 + 0A + 0D + 0D0A + 30 + 0A + 0D + 0D0A + 202032 + 0A + 0D + 0D0A + 484541444552 + + + 2441434144564552 + 9 + 8 + 5 + 6 + 4 + 2 + 1 + 3 + 0A + 0D + 0D0A + 39 + 0A + 0D + 0D0A + 202031 + 0A + 0D + 0D0A + 414331303132 + + + 454E44534543 + 7 + 1 + 4 + 2 + 5 + 3 + 0A + 0D + 0D0A + 30 + + + + + 454F46 + -4 + -1 + -3 + -2 + 0A + 0D + 0D0A + 30 + + + + + + + 53454354494F4E + 8 + 5 + 6 + 3 + 1 + 2 + 7 + 4 + 0A + 0D + 0D0A + 30 + 0A + 0D + 0D0A + 202032 + 0A + 0D + 0D0A + 484541444552 + + + 2441434144564552 + 9 + 8 + 5 + 6 + 4 + 2 + 1 + 3 + 0A + 0D + 0D0A + 39 + 0A + 0D + 0D0A + 202031 + 0A + 0D + 0D0A + 414331303134 + + + 454E44534543 + 7 + 1 + 4 + 2 + 5 + 3 + 0A + 0D + 0D0A + 30 + + + + + 454F46 + -4 + -1 + -3 + -2 + 0A + 0D + 0D0A + 30 + + + + + + + 53454354494F4E + 8 + 5 + 6 + 3 + 1 + 2 + 7 + 4 + 0A + 0D + 0D0A + 30 + 0A + 0D + 0D0A + 202032 + 0A + 0D + 0D0A + 484541444552 + + + 2441434144564552 + 9 + 8 + 5 + 6 + 4 + 2 + 1 + 3 + 0A + 0D + 0D0A + 39 + 0A + 0D + 0D0A + 202031 + 0A + 0D + 0D0A + 414331303135 + + + 454E44534543 + 7 + 1 + 4 + 2 + 5 + 3 + 0A + 0D + 0D0A + 30 + + + + + 454F46 + -4 + -1 + -3 + -2 + 0A + 0D + 0D0A + 30 + + + + + + + 300D0A53454354494F4E0D0A2020320D0A4845414445520D0A + 26 + 1 + 2 + 12 + 25 + 11 + 6 + 20 + 5 + 4 + 8 + 18 + 16 + 17 + 3 + 22 + 19 + + + 390D0A24414341445645520D0A2020310D0A4143313031380D0A + 27 + 1 + 2 + 12 + 23 + 5 + 4 + 3 + 26 + 8 + 7 + 19 + 17 + 16 + 18 + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 300D0A53454354494F4E0D0A + 13 + 1 + 2 + 12 + 7 + 8 + 5 + 3 + 4 + 9 + 6 + 320D0A + + + 300D0A454E445345430D0A + 12 + 1 + 2 + 11 + 3 + 6 + 4 + 7 + 5 + + + + + 300D0A454F460D0A + -9 + -3 + -2 + -1 + -4 + -6 + -5 + + + + + + + 0000 + 3 + 1 + 01 + 01 + 04 + 08 + + + + + + + 00000000 + 5 + 1 + 424D + 0C000000 + 0100 + 01 + 04 + 08 + 18 + 00 + + + + + + + 00000000 + 5 + 1 + 424D + 28000000 + 0100 + 01 + 04 + 08 + 18 + 20 + 00 + 00 + 01 + 02 + 000000 + + + + + + + 0003000000 + 6 + 1 + 4 + 10 + 20 + 0100 + 28000000 + 00000000 + 424D + + + + + + + 00000000 + 5 + 1 + 424D + 6C000000 + 0100 + 01 + 04 + 08 + 10 + 18 + 20 + 00 + 00 + 01 + 02 + 03 + 00000000 + + + + + + + 00000000 + 5 + 1 + 424D + 7C000000 + 0100 + 01 + 04 + 08 + 10 + 18 + 20 + 00 + 00 + 01 + 02 + 03 + 04 + 05 + 00000000 + + + + + + + 000001BA + 5 + 3 + 2 + 1 + 000001BB + + + + + + + 255044462D312E30 + 9 + 8 + 4 + 2 + 1 + 3 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 255044462D312E31 + 9 + 8 + 4 + 2 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 255044462D312E32 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + + + + + + + 00000000 + 5 + 1 + 9BA5 + + + + + + + 00000000 + 5 + 1 + DBA5 + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 57006F007200640044006F00630075006D0065006E007400 + 25 + 1 + 16 + 24 + 12 + 18 + 6 + 8 + 4 + 14 + 20 + 2 + 10 + 02 + 00 + 01 + + + + + 4D6963726F736F667420576F726420 + 16 + 1 + 15 + 5 + 13 + 2 + 8 + 14 + 4 + 3 + 10 + 7 + 362E30 + 362E302D446F6B756D656E74 + 666F722057696E646F7773203935 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 62657874 + 5 + 4 + 3 + 1 + 2 + 0000 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 0100 + + + + + + + FF575043 + 5 + 1 + 2 + 3 + 4 + 0A0000 + 0000 + + + + + + + FF575043 + 5 + 1 + 2 + 3 + 4 + 0A0001 + 0000 + + + + + + + FF575043 + 5 + 1 + 2 + 3 + 4 + 01160100 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 0053454354494F4E000248454144455200 + 18 + 1 + 8 + 5 + 14 + 4 + 3 + 7 + 12 + 10 + 11 + 2 + 16 + 13 + + + 092441434144564552000141433130303600 + 19 + 1 + 8 + 18 + 17 + 3 + 5 + 2 + 7 + 6 + 13 + 11 + 10 + 12 + + + 00454E4453454300 + 9 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 00454F4600 + -6 + -1 + -2 + -4 + -3 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 0053454354494F4E000248454144455200 + 18 + 1 + 8 + 5 + 14 + 4 + 3 + 7 + 12 + 10 + 11 + 2 + 16 + 13 + + + 092441434144564552000141433130303900 + 19 + 1 + 8 + 18 + 17 + 3 + 5 + 2 + 7 + 6 + 13 + 11 + 10 + 12 + + + 00454E4453454300 + 9 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 00454F4600 + -6 + -1 + -2 + -4 + -3 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 0053454354494F4E000248454144455200 + 18 + 1 + 8 + 5 + 14 + 4 + 3 + 7 + 12 + 10 + 11 + 2 + 16 + 13 + + + 092441434144564552000141433130313200 + 19 + 1 + 8 + 18 + 17 + 4 + 3 + 2 + 7 + 6 + 13 + 11 + 10 + 12 + + + 00454E4453454300 + 9 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 00454F4600 + -6 + -1 + -2 + -4 + -3 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 000053454354494F4E00020048454144455200 + 20 + 1 + 9 + 5 + 15 + 4 + 3 + 7 + 13 + 11 + 12 + 2 + 17 + 14 + + + 0900244143414456455200010041433130313400 + 21 + 1 + 9 + 20 + 18 + 4 + 3 + 2 + 7 + 6 + 14 + 12 + 11 + 13 + + + 0000454E4453454300 + 10 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 0000454F4600 + -7 + -1 + -3 + -5 + -4 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 000053454354494F4E00020048454144455200 + 20 + 1 + 9 + 5 + 15 + 4 + 3 + 7 + 13 + 11 + 12 + 2 + 17 + 14 + + + 0900244143414456455200010041433130313500 + 21 + 1 + 9 + 20 + 18 + 4 + 3 + 2 + 7 + 6 + 14 + 12 + 11 + 13 + + + 0000454E4453454300 + 10 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 0000454F4600 + -7 + -1 + -3 + -5 + -4 + + + + + + + 4175746F4341442042696E617279204458460D0A1A00 + 23 + 1 + 3 + 4 + 2 + 8 + 17 + 14 + 18 + 7 + 5 + 6 + 11 + 13 + 12 + 19 + 10 + 20 + 21 + 9 + + + 000053454354494F4E00020048454144455200 + 20 + 1 + 9 + 5 + 15 + 4 + 3 + 7 + 13 + 11 + 12 + 2 + 17 + 14 + + + 0900244143414456455200010041433130313800 + 21 + 1 + 9 + 20 + 18 + 4 + 3 + 2 + 7 + 6 + 14 + 12 + 11 + 13 + + + 0000454E4453454300 + 10 + 1 + 2 + 5 + 3 + 6 + 4 + + + + + 0000454F4600 + -7 + -1 + -3 + -5 + -4 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E73756E2E786D6C2E777269746572 + 39 + 7 + 19 + 24 + 25 + 16 + 2 + 4 + 8 + 9 + 12 + 21 + 28 + 1 + 14 + 3 + 13 + 18 + 6 + 10 + 33 + 504B0304140000000000 + + + 6D6574612E786D6C3C3F786D6C2076657273696F6E3D22312E3022 + 28 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 24 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 25 + 13 + 17 + 504B0304140000000000 + 6F66666963653A76657273696F6E3D22312E30223E + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E73756E2E786D6C2E696D7072657373 + 40 + 8 + 20 + 25 + 26 + 17 + 3 + 7 + 9 + 6 + 13 + 22 + 5 + 4 + 1 + 24 + 14 + 19 + 11 + 34 + 504B0304140000000000 + + + 6D6574612E786D6C3C3F786D6C2076657273696F6E3D22312E3022 + 28 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 24 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 25 + 13 + 17 + 504B0304140000000000 + 6F66666963653A76657273696F6E3D22312E30223E + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E73756E2E786D6C2E63616C63 + 37 + 5 + 17 + 3 + 1 + 14 + 29 + 20 + 2 + 7 + 10 + 19 + 26 + 12 + 21 + 11 + 16 + 8 + 31 + 504B0304140000000000 + + + 6D6574612E786D6C3C3F786D6C2076657273696F6E3D22312E3022 + 28 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 24 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 25 + 13 + 17 + 504B0304140000000000 + 6F66666963653A76657273696F6E3D22312E30223E + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E73756E2E786D6C2E64726177 + 37 + 5 + 17 + 2 + 23 + 4 + 29 + 20 + 6 + 7 + 10 + 19 + 26 + 3 + 12 + 21 + 11 + 16 + 1 + 8 + 31 + 504B0304140000000000 + + + 6D6574612E786D6C3C3F786D6C2076657273696F6E3D22312E3022 + 28 + 14 + 1 + 3 + 2 + 4 + 19 + 6 + 18 + 24 + 12 + 9 + 15 + 16 + 7 + 8 + 11 + 10 + 25 + 13 + 17 + 504B0304140000000000 + 6F66666963653A76657273696F6E3D22312E30223E + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 01 + 07 + 11 + 00 + + + 6578696665766572 + 9 + 2 + 5 + 6 + 1 + 3 + 7 + 4C495354 + 30323030 + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 01 + 07 + 11 + 00 + + + 6578696665766572 + 9 + 2 + 5 + 6 + 1 + 3 + 7 + 4C495354 + 30323130 + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 01 + 07 + 11 + 00 + + + 6578696665766572 + 9 + 2 + 5 + 6 + 1 + 3 + 7 + 4C495354 + 30323230 + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + 4578696600004D4D002A + 11 + 2 + 1 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 900000070000000430323030 + 13 + 6 + 5 + 9 + 1 + 3 + 12 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 4578696600004D4D002A + 11 + 2 + 1 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 900000070000000430323130 + 13 + 6 + 5 + 9 + 1 + 2 + 3 + 12 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 4578696600004D4D002A + 11 + 2 + 1 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 900000070000000430323230 + 13 + 6 + 5 + 9 + 1 + 2 + 12 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 45786966000049492A00 + 11 + 1 + 2 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 009007000400000030323030 + 13 + 5 + 8 + 10 + 1 + 3 + 11 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 45786966000049492A00 + 11 + 1 + 2 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 009007000400000030323130 + 13 + 5 + 8 + 10 + 1 + 2 + 3 + 11 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 45786966000049492A00 + 11 + 1 + 2 + 10 + 3 + 7 + 8 + 9 + FFD8FFE1 + + + 009007000400000030323230 + 13 + 5 + 8 + 10 + 1 + 2 + 11 + + + + + FFD9 + -3 + -2 + -1 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323030 + -13 + -1 + -5 + -3 + -9 + -10 + -2 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323130 + -13 + -2 + -8 + -4 + -9 + -11 + -10 + -1 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323230 + -13 + -2 + -8 + -4 + -9 + -10 + -1 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323030 + -13 + -2 + -8 + -4 + -9 + -10 + -1 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323130 + -13 + -1 + -5 + -3 + -9 + -11 + -10 + -2 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323230 + -13 + -1 + -5 + -3 + -9 + -10 + -2 + + + + + + + 5C616E7369637067 + 9 + 8 + 7 + 3 + 1 + 4 + 6 + 2 + 5 + 616E7369 + 6D6163 + 7063 + 706361 + 5C + 66 + 6631 + 7B5C7274 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 62657874 + 5 + 4 + 3 + 1 + 2 + 0000 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 5000 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 57415645 + + + 62657874 + 5 + 4 + 3 + 1 + 2 + 0100 + + + 666D7420 + 5 + 1 + 4 + 3 + 2 + 5000 + + + + + + + 4175746F4341442044584220312E300D0A1A00 + 20 + 1 + 3 + 4 + 2 + 8 + 6 + 5 + 7 + 14 + 9 + 15 + 11 + 10 + 16 + 17 + 18 + + + + + 00 + -2 + -1 + + + + + + + 6D646174 + 5 + 2 + 3 + 4 + 1 + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 6D766864 + + + + + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 636D6F76 + 64636F6D + + + + + + + 6D646174 + 5 + 2 + 3 + 4 + 1 + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 636D6F76 + 64636F6D + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 50006F0077006500720050006F0069006E007400200044006F00630075006D0065006E007400 + 39 + 1 + 18 + 16 + 28 + 12 + 6 + 24 + 8 + 4 + 14 + 30 + 2 + 10 + 34 + + + + + 4D6963726F736F66742028522920506F776572506F696E74202852292057696E646F777320200007 + 41 + 2 + 1 + 3 + 15 + 13 + 40 + 21 + 14 + 11 + 38 + 8 + 23 + 33 + 10 + 9 + 7 + 22 + 5 + 17 + 6 + 00 + 01 + 0000F00300005F + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 50006F0077006500720050006F0069006E007400200044006F00630075006D0065006E007400 + 39 + 1 + 18 + 16 + 28 + 12 + 6 + 24 + 8 + 4 + 14 + 30 + 2 + 10 + 34 + + + + + + + 252150532D41646F62652D322E3020455053462D312E32 + 24 + 9 + 22 + 23 + 4 + 2 + 10 + 3 + 1 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + C5D0D3C6 + 5 + 4 + 1 + 3 + 2 + + + + + 252150532D41646F62652D322E3020455053462D312E32 + 24 + 9 + 22 + 23 + 4 + 2 + 10 + 3 + 1 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + 3C46465369676E617475726546696C6520 + 18 + 1 + 17 + 5 + 14 + 10 + 2 + 12 + 4 + 3 + 11 + 7 + 9 + 8 + 56657273696F6E3D + + + + + + + 3C46696C65436F6C6C656374696F6E20 + 17 + 1 + 16 + 11 + 15 + 6 + 7 + 4 + 8 + 2 + 3 + 5 + 3C44524F494456657273696F6E3E + 3C2F44524F494456657273696F6E3E + + + + + + + 252150532D41646F62652D322E3020455053462D322E30 + 24 + 9 + 22 + 23 + 4 + 2 + 1 + 3 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + C5D0D3C6 + 5 + 4 + 1 + 3 + 2 + + + + + 252150532D41646F62652D322E3020455053462D322E30 + 24 + 9 + 22 + 23 + 4 + 2 + 1 + 3 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + 252150532D41646F62652D332E3020455053462D332E30 + 24 + 9 + 22 + 23 + 4 + 2 + 1 + 3 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + C5D0D3C6 + 5 + 4 + 1 + 3 + 2 + + + + + 252150532D41646F62652D332E + 14 + 12 + 13 + 3 + 1 + 2 + 8 + 11 + 10 + 5 + 7 + 4 + 6 + 30 + 31 + 20455053462D332E30 + 0A + 0A0D + 0D + 0D0A + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 5000500034003000 + 9 + 1 + 2 + 4 + 6 + + + + + 4D6963726F736F667420506F776572506F696E74 + 21 + 11 + 20 + 5 + 18 + 7 + 13 + 3 + 2 + 4 + 6 + 15 + 1 + 8 + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 57006F007200640044006F00630075006D0065006E007400 + 25 + 1 + 16 + 24 + 12 + 18 + 6 + 8 + 4 + 14 + 20 + 2 + 10 + 02 + 00 + 01 + + + + + 4D6963726F736F667420576F7264 + 15 + 5 + 14 + 4 + 12 + 1 + 7 + 13 + 3 + 2 + 9 + 6 + 2031302E30 + 20382E30 + 20392E30 + 2D446F6B756D656E74 + + + + + + + 89504E470D0A1A0A0000000D49484452 + 17 + 6 + 9 + 5 + 10 + 2 + 13 + 3 + 4 + 14 + 15 + 1 + 16 + + + 69434350 + 5 + 2 + 1 + 4 + + + + + 0000000049454E44AE426082 + -13 + -1 + -10 + -8 + -6 + -5 + -7 + -11 + -12 + -9 + + + + + + + 89504E470D0A1A0A0000000D49484452 + 17 + 6 + 9 + 5 + 10 + 2 + 13 + 3 + 4 + 14 + 15 + 1 + 16 + + + 73504C54 + 5 + 2 + 3 + 1 + 4 + + + + + 0000000049454E44AE426082 + -13 + -1 + -10 + -8 + -6 + -5 + -7 + -11 + -12 + -9 + + + + + + + 89504E470D0A1A0A0000000D49484452 + 17 + 6 + 9 + 5 + 10 + 2 + 13 + 3 + 4 + 14 + 15 + 1 + 16 + + + 73524742 + 5 + 1 + 2 + 3 + 4 + + + + + 0000000049454E44AE426082 + -13 + -1 + -10 + -8 + -6 + -5 + -7 + -11 + -12 + -9 + + + + + + + 89504E470D0A1A0A0000000D49484452 + 17 + 6 + 9 + 5 + 10 + 2 + 13 + 3 + 4 + 14 + 15 + 1 + 16 + + + 69545874 + 5 + 3 + 2 + 4 + 1 + + + + + 0000000049454E44AE426082 + -13 + -1 + -10 + -8 + -6 + -5 + -7 + -11 + -12 + -9 + + + + + + + 252150532D41646F62652D312E30 + 15 + 13 + 14 + 4 + 2 + 1 + 3 + 9 + 12 + 11 + 6 + 8 + 5 + 7 + + + + + 2525454F46 + -6 + -1 + -3 + -5 + -4 + 0A + 0A0A + 0D + 0D0A + + + + + + + 252150532D41646F62652D322E30 + 15 + 13 + 14 + 4 + 2 + 1 + 3 + 9 + 12 + 11 + 6 + 8 + 5 + 7 + + + + + + + 252150532D41646F62652D322E31 + 15 + 13 + 14 + 4 + 2 + 1 + 3 + 9 + 12 + 11 + 6 + 8 + 5 + 7 + + + + + + + 252150532D41646F62652D332E30 + 15 + 13 + 14 + 4 + 2 + 1 + 3 + 9 + 12 + 11 + 6 + 8 + 5 + 7 + + + + + + + 0000000877696465 + 9 + 6 + 5 + 2 + 1 + 3 + 4 + 6D646174 + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 6D766864 + + + + + + + 0000000877696465 + 9 + 6 + 5 + 2 + 1 + 3 + 4 + 6D646174 + + + 6D6F6F76 + 5 + 4 + 2 + 1 + 636D6F76 + 64636F6D + + + + + + + 4D5A + 3 + 2 + 1 + + + + + + + 4D5A + 3 + 2 + 1 + + + 4E45 + 3 + 1 + 2 + + + + + + + 4D5A + 3 + 2 + 1 + + + 50450000 + 5 + 1 + 3 + 4 + + + + + + + 504B0304 + 5 + 2 + 1 + 3 + 4 + + + 4D4554412D494E462F4D414E49464553542E4D46 + 21 + 16 + 3 + 12 + 10 + 6 + 1 + 8 + 2 + 9 + 5 + 4 + + + + + 504B0506 + -5 + -3 + -4 + -2 + -1 + + + + + + + 504B0304 + 5 + 2 + 1 + 3 + 4 + + + + + 504B0506 + -5 + -3 + -4 + -2 + -1 + 504B01 + + + + + + + 1F8B08 + 4 + 1 + 3 + 2 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E + 44 + 1 + 24 + 18 + 7 + 9 + 4 + 16 + 32 + 5 + 3 + 8 + 12 + 15 + 2 + 6 + 23 + 38 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E74657874 + 48 + 5 + 28 + 22 + 11 + 13 + 3 + 20 + 36 + 9 + 7 + 12 + 16 + 19 + 1 + 10 + 27 + 2 + 42 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E7370726561647368656574 + 55 + 12 + 35 + 7 + 18 + 6 + 2 + 4 + 27 + 43 + 16 + 14 + 19 + 10 + 9 + 5 + 1 + 17 + 34 + 49 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E70726573656E746174696F6E + 56 + 13 + 36 + 5 + 19 + 21 + 8 + 3 + 44 + 17 + 1 + 2 + 12 + 11 + 9 + 4 + 18 + 35 + 50 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E6772617068696373 + 52 + 9 + 32 + 6 + 2 + 17 + 12 + 8 + 4 + 3 + 40 + 13 + 11 + 16 + 5 + 7 + 1 + 10 + 14 + 31 + 46 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E73756E2E786D6C2E62617365 + 37 + 5 + 17 + 3 + 4 + 23 + 14 + 1 + 20 + 6 + 7 + 10 + 19 + 26 + 2 + 21 + 11 + 16 + 8 + 31 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E30 + 20 + 4 + 2 + 1 + 3 + 13 + 5 + 15 + 11 + 17 + 8 + 6 + 7 + 10 + 9 + 12 + + + + + + + D0CF11E0A1B11AE1 + 9 + 6 + 2 + 4 + 3 + 7 + 8 + 5 + 1 + FEFF + + + + + 49504D2E4E6F7465 + 9 + 5 + 8 + 6 + 4 + 7 + 1 + 3 + 2 + + + + + 720065006300690070005F00760065007200730069006F006E00 + 27 + 1 + 16 + 22 + 12 + 6 + 2 + 4 + 18 + 10 + 8 + 14 + + + + + + + CAFEBABE + 5 + 2 + 1 + 4 + 3 + + + + + + + 727473703A2F2F + 8 + 1 + 3 + 4 + 7 + 5 + 6 + + + + + + + 6D646174 + 5 + 2 + 3 + 4 + 1 + + + + + + + 33442047656F6D657472792046696C6520466F726D617420202020202020203401000000 + 37 + 1 + 4 + 6 + 36 + 5 + 35 + 19 + 33 + 15 + 21 + 23 + 22 + 16 + 18 + 17 + 14 + 26 + + + + + + + 33442047656F6D657472792046696C6520466F726D617420202020202020203101000000 + 37 + 1 + 4 + 6 + 5 + 36 + 35 + 19 + 33 + 15 + 21 + 23 + 22 + 16 + 18 + 17 + 14 + 26 + + + + + + + 33442047656F6D657472792046696C6520466F726D617420202020202020203201000000 + 37 + 1 + 4 + 6 + 5 + 36 + 35 + 19 + 33 + 15 + 21 + 23 + 22 + 16 + 18 + 17 + 14 + 26 + + + + + + + 33442047656F6D657472792046696C6520466F726D617420202020202020203301000000 + 37 + 1 + 4 + 6 + 5 + 35 + 19 + 33 + 15 + 21 + 23 + 22 + 16 + 18 + 17 + 14 + 26 + + + + + + + 56355F434656320000 + 10 + 1 + 3 + 8 + 6 + 5 + 4 + 7 + + + 2E43415450617274 + 9 + 8 + 6 + 7 + 4 + 5 + 3 + 2 + 1 + + + + + + + 0606EDF5D81D46E5BD31EFE7FE74B71D444F43554D454E54 + 25 + 23 + 9 + 15 + 6 + 8 + 3 + 18 + 4 + 2 + 7 + 1 + 5 + 11 + 10 + 16 + 20 + 17 + 13 + 22 + 14 + 21 + 12 + + + + + + + 0E536B657463685570204D6F64656C08 + 17 + 1 + 16 + 7 + 6 + 15 + 9 + 11 + 4 + 3 + 10 + 14 + 2 + 5 + 8 + 12 + + + + + + + 4F532F32 + 5 + 2 + 1 + 4 + 3 + 636D6170 + 676C7966 + 68656164 + 68686561 + 686D7478 + 6C6F6361 + 6D617870 + 6E616D65 + 706F7374 + + + + + + + FFFEFF0E53006B0065007400630068005500700020004D006F00640065006C00 + 33 + 1 + 29 + 12 + 10 + 28 + 16 + 20 + 6 + 4 + 18 + 26 + 2 + 8 + 14 + 22 + 31 + 30 + + + + + + + 4143313032310000 + 9 + 1 + 5 + 3 + 4 + 8 + 7 + + + + + + + FF575043 + 5 + 1 + 2 + 3 + 4 + 010A0201 + + + + + + + 0000000C6A5020200D0A870A + 13 + 10 + 1 + 9 + 4 + 5 + 7 + 8 + 2 + 667479706A7032 + + + + + + + 3433302C + 5 + 1 + 2 + 3 + 4 + 2C + 2C + + + + + + + 3432302C + 5 + 1 + 2 + 3 + 4 + 2C + 2C + + + + + + + 3430302C + 5 + 1 + 2 + 4 + 2C + 2C + + + + + + + 3339302C + 5 + 1 + 2 + 4 + 3 + 2C + 2C + + + + + + + 3338302C + 5 + 1 + 2 + 4 + 3 + 2C + 2C + + + + + + + 3330302C + 5 + 1 + 2 + 4 + 2C + 2C + + + + + + + 5B436F6E74656E745F54797065735D2E786D6C20A2 + 22 + 2 + 6 + 20 + 12 + 21 + 7 + 13 + 9 + 3 + 4 + 15 + 19 + 10 + 8 + 14 + 5 + 11 + 1 + 504B0304 + + + 504B0102 + 5 + 2 + 1 + 3 + 4 + + + 504B0506 + 5 + 2 + 1 + 3 + 4 + + + + + + + 2142444E + 5 + 4 + 3 + 2 + 1 + 534D + 0E00 + 0F00 + + + + + + + 2142444E + 5 + 4 + 3 + 2 + 1 + 534D1700 + + + + + + + 4C0000000114020000000000C000000000000046 + 21 + 2 + 16 + 14 + 15 + 1 + 20 + 8 + + + + + + + 5B496E7465726E657453686F72746375745D + 19 + 17 + 9 + 18 + 1 + 4 + 11 + 8 + 12 + 7 + 6 + 2 + 3 + + + + + + + 255044462D312E + 8 + 7 + 3 + 1 + 2 + 5 + 4 + 6 + [30:37] + + + + + 687474703A2F2F7777772E6169696D2E6F72672F706466612F6E732F6964 + 31 + 15 + 3 + 26 + 7 + 1 + 8 + 12 + 30 + 2 + 16 + 5 + 14 + 10 + 13 + 4 + 28 + 21 + 22 + 27 + 786D6C6E733A7064666169643D + + + 7064666169643A636F6E666F726D616E6365 + 19 + 12 + 4 + 2 + 13 + 1 + 8 + 14 + 5 + 3 + 7 + 18 + 6 + 22 + 27 + 3C2F7064666169643A706172743E + 31 + 3D22 + 3D27 + 3E + 7064666169643A70617274 + 3D22 + 3D27 + 3E + 41 + 22 + 27 + 3C2F7064666169643A636F6E666F726D616E63653E + + + + + + + 00 + 2 + 1 + [30:37][20:37] + [21:EF] + [30:37][20:37]00 + [30:37][20:37]00 + [30:37] + 00 + 20 + [30:37] + 00 + 20 + [30:37][00:37] + 00 + 20 + + + + + + + FFFB + -3 + -2 + -1 + [10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + + + FFF3 + -3 + -2 + -1 + [10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + + + FFFA + -3 + -2 + -1 + [10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + + + FFF2 + -3 + -2 + -1 + [10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + + + 01000000 + 5 + 1 + 4 + + + + + 41636365737356657273696F6E + 14 + 13 + 7 + 11 + 6 + 3 + 1 + 2 + 5 + 4 + 30322E[30:39][30:39] + + + + + + + 000100005374616E64617264204A65742044420000000000 + 25 + 1 + 23 + 8 + 6 + 7 + 11 + 20 + 15 + 13 + 10 + 17 + 14 + 9 + + + + + 41636365737356657273696F6E + 14 + 13 + 7 + 11 + 6 + 3 + 1 + 2 + 5 + 4 + 30362E[30:39][30:39] + + + + + + + 000100005374616E64617264204A65742044420000000000 + 25 + 1 + 23 + 8 + 6 + 7 + 11 + 20 + 15 + 13 + 10 + 17 + 14 + 9 + + + + + 41636365737356657273696F6E + 14 + 13 + 7 + 11 + 6 + 3 + 1 + 2 + 5 + 4 + 30372E[30:39][30:39] + + + + + + + 000100005374616E64617264204A65742044420001000000 + 25 + 1 + 4 + 8 + 6 + 7 + 11 + 20 + 15 + 13 + 10 + 17 + 14 + 9 + + + + + 410063006300650073007300560065007200730069006F006E + 26 + 2 + 25 + 13 + 21 + 11 + 5 + 1 + 3 + 9 + 7 + 300038002E00[30:39]00[30:39] + + + + + + + 000100005374616E64617264204A65742044420001000000 + 25 + 1 + 4 + 8 + 6 + 7 + 11 + 20 + 15 + 13 + 10 + 17 + 14 + 9 + + + + + 410063006300650073007300560065007200730069006F006E + 26 + 2 + 25 + 13 + 21 + 11 + 5 + 1 + 3 + 9 + 7 + 300039002E00[30:39]00[30:39] + + + + + + + 000100005374616E64617264204143452044420002000000 + 25 + 1 + 23 + 4 + 8 + 11 + 6 + 10 + 7 + 9 + 20 + 15 + 13 + 17 + 14 + 19 + + + + + 410063006300650073007300560065007200730069006F006E + 26 + 2 + 25 + 13 + 21 + 11 + 5 + 1 + 3 + 9 + 7 + 300039002E00[30:39]00[30:39] + + + + + + + 38425053000100000000000000 + 14 + 1 + 8 + 13 + 12 + 11 + 10 + + + + + + + 66747970 + 5 + 4 + 1 + 3 + 2 + 69736F32 + 69736F6D + 6D703431 + 6D703432 + + + 6D6F6F76 + 5 + 4 + 2 + 1 + + + + + + + FFFB + 3 + 1 + 2 + [10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + FFFB[10:EB] + + + + + + + FFF3 + 3 + 1 + 2 + [10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + FFF3[10:EB] + + + + + + + FFFA + 3 + 1 + 2 + [10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + FFFA[10:EB] + + + + + + + FFF2 + 3 + 1 + 2 + [10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + FFF2[10:EB] + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323030 + 13 + 5 + 8 + 10 + 1 + 3 + 11 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323130 + 13 + 6 + 5 + 9 + 1 + 2 + 3 + 12 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323230 + 13 + 6 + 5 + 9 + 1 + 2 + 12 + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + 900000070000000430323030 + 13 + 6 + 5 + 9 + 1 + 3 + 12 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323130 + 13 + 5 + 8 + 10 + 1 + 2 + 3 + 11 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 009007000400000030323230 + 13 + 5 + 8 + 10 + 1 + 2 + 11 + + + + + + + 255044462D312E37 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2525454F + -5 + -1 + -3 + -4 + 46 + 460A + 460D + 460D00 + 460D0A + + + + + + + 0000270A0000000000000000000000000000000000000000 + 25 + 1 + 21 + 22 + E8030000 + 00000032 + + + + + + + 0000270A0000000000000000000000000000000000000000 + 25 + 1 + 21 + 22 + E8030000 + 00000001 + + + + + + + 504B0304 + 5 + 2 + 1 + 3 + 4 + + + 504B0304 + 5 + 2 + 1 + 3 + 4 + + + 786D6C6E733D22687474703A2F2F7777772E6261722E61646D696E2E63682F786D6C6E732F73696172642F312E302F6D657461646174612E78736422 + 61 + 1 + 5 + 14 + 15 + 17 + 49 + 55 + 6 + 42 + 32 + 2 + 12 + 31 + 22 + 27 + 13 + 26 + 50 + 20 + 3 + 7 + 44 + 4 + + + + + 504B0506 + -5 + -3 + -4 + -2 + -1 + 504B01 + + + + + + + 0D0A582D4D696D654F4C453A2050726F6475636564204279204D6963726F736F6674204D696D654F4C452056362E30302E + 50 + 48 + 49 + 7 + 46 + 1 + 2 + 5 + 38 + 27 + 8 + 9 + 14 + 10 + 36 + 6 + 47 + 22 + 29 + 11 + 17 + 13 + 12 + 18 + 21 + 19 + 16 + 32 + 26 + 2E + 0D0A + + + + + + + 0D0A582D436F6E7665727465642D42793A20456D61696C6368656D7920 + 30 + 28 + 29 + 1 + 16 + 13 + 15 + 25 + 11 + 27 + 9 + 6 + 17 + 4 + 5 + 8 + 7 + 3 + 23 + 24 + 20 + 19 + 22 + 2 + 2E + + + + + + + 664C614300000022 + 9 + 2 + 1 + 5 + 7 + 6 + 8 + + + + + + + 5C646F63756D656E74636C617373 + 15 + 14 + 3 + 5 + 13 + 8 + 4 + 9 + 7 + 12 + 1 + 6 + 10 + + + + + + + 5C + 2 + 1 + 626567696E7B + 636861707465727B + 73656374696F6E7B + 73756273656374696F6E7B + 7573657061636B6167657B + + + + + + + 43444601 + 5 + 1 + 4 + 3 + 2 + + + + + + + 43444602 + 5 + 1 + 4 + 3 + 2 + + + + + + + 47524942 + 5 + 1 + 4 + 2 + 3 + 01 + + + + + 37373737 + -5 + -1 + + + + + + + 47524942 + 5 + 1 + 4 + 2 + 3 + 02 + + + + + 37373737 + -5 + -1 + + + + + + + 894844460D0A1A0A01 + 10 + 1 + 2 + 5 + 3 + 7 + 6 + 8 + 9 + + + + + + + 894844460D0A1A0A02 + 10 + 1 + 2 + 5 + 3 + 7 + 6 + 8 + 9 + + + + + + + 7674695F656E636F64696E673A53527C757466382D6E6C0D0A + 26 + 1 + 2 + 5 + 6 + 13 + 11 + 12 + 22 + 19 + 17 + 21 + 7 + 14 + 16 + 3 + 4 + 18 + 8 + 9 + 25 + 10 + + + + + + + 0D0A574152432D547970653A + 13 + 11 + 12 + 6 + 1 + 9 + 7 + 8 + 5 + 10 + 2 + 3 + 4 + 574152432F + 0D0A + 574152432D446174653A + 2D + 2D + 54 + 3A + 3A + 5A0D0A + 0D0A0D0A + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E74657874 + 48 + 5 + 28 + 22 + 11 + 13 + 3 + 20 + 36 + 9 + 7 + 12 + 16 + 19 + 1 + 10 + 27 + 2 + 42 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3122 + 21 + 1 + 3 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E74657874 + 48 + 5 + 28 + 22 + 11 + 13 + 3 + 20 + 36 + 9 + 7 + 12 + 16 + 19 + 1 + 10 + 27 + 2 + 42 + 504B0304 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E74657874 + 48 + 5 + 28 + 22 + 11 + 13 + 3 + 20 + 36 + 9 + 7 + 12 + 16 + 19 + 1 + 10 + 27 + 2 + 42 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3222 + 21 + 1 + 3 + 4 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E70726573656E746174696F6E + 56 + 13 + 36 + 5 + 19 + 21 + 8 + 3 + 44 + 17 + 1 + 2 + 12 + 11 + 9 + 4 + 18 + 35 + 50 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3122 + 21 + 1 + 3 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E70726573656E746174696F6E + 56 + 13 + 36 + 5 + 19 + 21 + 8 + 3 + 44 + 17 + 1 + 2 + 12 + 11 + 9 + 4 + 18 + 35 + 50 + 504B0304 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E70726573656E746174696F6E + 56 + 13 + 36 + 5 + 19 + 21 + 8 + 3 + 44 + 17 + 1 + 2 + 12 + 11 + 9 + 4 + 18 + 35 + 50 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3222 + 21 + 1 + 3 + 4 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E7370726561647368656574504B030414 + 60 + 3 + 2 + 1 + 17 + 40 + 4 + 5 + 12 + 23 + 11 + 7 + 9 + 32 + 48 + 21 + 19 + 24 + 15 + 14 + 10 + 6 + 22 + 39 + 54 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3122 + 21 + 1 + 3 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E7370726561647368656574504B030414 + 60 + 3 + 2 + 1 + 17 + 40 + 4 + 5 + 12 + 23 + 11 + 7 + 9 + 32 + 48 + 21 + 19 + 24 + 15 + 14 + 10 + 6 + 22 + 39 + 54 + 504B0304 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E7370726561647368656574504B030414 + 60 + 3 + 2 + 1 + 17 + 40 + 4 + 5 + 12 + 23 + 11 + 7 + 9 + 32 + 48 + 21 + 19 + 24 + 15 + 14 + 10 + 6 + 22 + 39 + 54 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3222 + 21 + 1 + 3 + 4 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E6772617068696373 + 52 + 9 + 32 + 6 + 2 + 17 + 12 + 8 + 4 + 3 + 40 + 13 + 11 + 16 + 5 + 7 + 1 + 10 + 14 + 31 + 46 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3122 + 21 + 1 + 3 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E6772617068696373 + 52 + 9 + 32 + 6 + 2 + 17 + 12 + 8 + 4 + 3 + 40 + 13 + 11 + 16 + 5 + 7 + 1 + 10 + 14 + 31 + 46 + 504B0304 + + + + + + + 6D696D65747970656170706C69636174696F6E2F766E642E6F617369732E6F70656E646F63756D656E742E6772617068696373 + 52 + 9 + 32 + 6 + 2 + 17 + 12 + 8 + 4 + 3 + 40 + 13 + 11 + 16 + 5 + 7 + 1 + 10 + 14 + 31 + 46 + 504B0304 + + + 6F66666963653A76657273696F6E3D22312E3222 + 21 + 1 + 3 + 4 + 2 + 14 + 6 + 16 + 12 + 18 + 9 + 7 + 8 + 11 + 10 + 13 + + + + + + + 02000A000000 + 7 + 1 + 6 + 4 + 4D4D + 03 + 04 + 3D3D + + + + + + + 464F524D + 5 + 4 + 1 + 3 + 2 + 41494646 + + + + + + + 464F524D + 5 + 4 + 1 + 3 + 2 + 41494643 + + + + + + + 46483331 + 5 + 1 + 2 + 4 + 3 + + + + + + + 5B7665725D + 6 + 5 + 1 + 3 + 2 + 4 + 5B7374795D + + + 5B65646F635D + 7 + 6 + 1 + 2 + 4 + 5 + 3 + + + + + + + 414D495F4D45544146494C455F464F524D41542056455253494F4E + 28 + 8 + 10 + 6 + 14 + 3 + 17 + 11 + 1 + 2 + 5 + 4 + 9 + 7 + 15 + + + + + + + 205241535445522056455253494F4E3D + 17 + 9 + 1 + 14 + 7 + 4 + 2 + 3 + 6 + 5 + 12 + 8 + 424547494E + 5354415254 + 2A + + + + + 2A454E44205241535445520A + -13 + -12 + -5 + -1 + -7 + -4 + -2 + -3 + -6 + -8 + -9 + + + + + + + 2A424547494E205350524541445348454554532056455253494F4E3D + 29 + 9 + 28 + 1 + 17 + 27 + 16 + 7 + 25 + 14 + 4 + 2 + 3 + 20 + 6 + 5 + 11 + 8 + + + + + 2A454E44205350524541445348454554530A + -19 + -18 + -5 + -1 + -10 + -4 + -2 + -13 + -3 + -7 + -8 + -6 + -16 + + + + + + + 50494146494C4556455253494F4E5F322E302C435442564552312C636F6D70726573730D0A706D7A6C6962636F646563 + 49 + 12 + 13 + 22 + 32 + 31 + 23 + 33 + 46 + 27 + 29 + 25 + 45 + 37 + 43 + 35 + 36 + 48 + 24 + 38 + 28 + 26 + 34 + 6 + 1 + 3 + 2 + 7 + 8 + 10 + 4 + 11 + 17 + 14 + 9 + + + + + + + 50494146494C4556455253494F4E5F322E302C535442564552312C636F6D70726573730D0A706D7A6C6962636F646563 + 49 + 12 + 13 + 22 + 32 + 31 + 23 + 33 + 46 + 27 + 25 + 45 + 37 + 43 + 35 + 36 + 48 + 24 + 29 + 28 + 26 + 34 + 6 + 1 + 3 + 2 + 7 + 8 + 10 + 4 + 11 + 17 + 14 + 9 + + + + + + + 4175746F4341442D383620 + 12 + 1 + 4 + 2 + 3 + 6 + 7 + 5 + 8 + 9 + 10 + 626967666F6E74 + 736861706573 + 756E69666F6E74 + 20312E + + + + + + + 50494146494C4556455253494F4E5F322E302C504333564552312C636F6D70726573730D0A706D7A6C6962636F646563 + 49 + 12 + 13 + 22 + 32 + 31 + 23 + 33 + 27 + 46 + 28 + 25 + 45 + 37 + 43 + 35 + 36 + 29 + 24 + 38 + 26 + 34 + 6 + 1 + 3 + 2 + 7 + 8 + 10 + 4 + 11 + 17 + 14 + 9 + + + + + + + 4175746F43414420536C6964650D0A1A00 + 18 + 1 + 3 + 4 + 2 + 10 + 12 + 13 + 11 + 9 + 6 + 5 + 7 + 8 + 14 + 15 + 16 + + + + + + + 4175746F43414420536C696465204C69627261727920 + 23 + 1 + 17 + 18 + 16 + 8 + 14 + 4 + 6 + 11 + 10 + 7 + 13 + 19 + 3 + 20 + 21 + 2 + + + + + + + 1991 + 3 + 2 + 1 + [!4001C80000000000] + + + + + + + 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 92 + 1 + 08 + 11AF + FAF1 + 0000000000000000 + + + + + + + 28546869732066696C65206D75737420626520636F6E76657274656420776974682042696E486578 + 41 + 7 + 40 + 6 + 3 + 39 + 24 + 21 + 13 + 2 + 34 + 8 + 5 + 32 + 29 + 4 + 20 + 16 + 27 + 9 + 28 + 18 + 11 + 1 + + + + + + + 425A30 + 4 + 1 + 3 + 2 + + + + + + + 314159265359 + 7 + 3 + 6 + 5 + 2 + 1 + 425A68 + + + + + + + 737263646F6369643A + 10 + 1 + 4 + 2 + 3 + 5 + 8 + 9 + + + + + + + 434154494120534F4C5554494F4E53205634 + 19 + 3 + 1 + 14 + 18 + 7 + 10 + 5 + 6 + 4 + 8 + 9 + 2 + 4341544941202020 + 52454C4541534520 + + + + + + + 56355F434656320000 + 10 + 1 + 3 + 8 + 6 + 5 + 4 + 7 + + + 2E4341544D6174657269616C + 13 + 12 + 10 + 11 + 8 + 9 + 2 + 5 + 3 + 1 + 4 + 6 + + + + + + + 5C31637720332E + 8 + 3 + 1 + 6 + 2 + 7 + 5 + 4 + + + + + + + 56355F434656320000 + 10 + 1 + 3 + 8 + 6 + 5 + 4 + 7 + + + 2E43415450726F64756374 + 12 + 11 + 9 + 10 + 7 + 8 + 2 + 4 + 5 + 6 + 1 + 3 + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 31 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 31 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 31 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 31 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 12AF + 3 + 2 + 1 + 08 + F1 + + + + + + + 464C49420200 + 7 + 1 + 2 + 3 + 6 + 4 + 5 + 00 + 0000 + 00 + 0000 + 0000 + + + + + + + 2843484957524954455220342E + 14 + 3 + 13 + 1 + 2 + 12 + 5 + 11 + 7 + 4 + 6 + 9 + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 33 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 33 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 33 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 33 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 34 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 42 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 34 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 34 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 45 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 62 + 2 + 1 + 45 + 65 + 47 + 67 + 4D + 6D + 46 + 66 + + + 34 + 2 + 1 + 4E + 6E + 4F + 6F + 49 + 69 + 53 + 73 + 52 + 72 + 45 + 65 + 56 + 76 + 46 + 66 + 4D + 6D + + + + + 65 + -2 + -1 + 4E + 6E + 44 + 64 + 4D + 6D + 46 + 66 + 3B + + + + + + + 00 + 2 + 1 + [20:3F] + + + 10220001 + 5 + 2 + 1 + 4 + 3 + + + + + 0040 + -3 + -1 + -2 + + + + + + + 00 + 2 + 1 + [20:3F] + + + 10220002 + 5 + 2 + 1 + 4 + 3 + + + + + 0040 + -3 + -1 + -2 + + + + + + + 00 + 2 + 1 + [20:3F] + + + 10220003 + 5 + 2 + 1 + 4 + 3 + + + + + 0040 + -3 + -1 + -2 + + + + + + + 00 + 2 + 1 + [20:3F] + + + 10220004 + 5 + 2 + 1 + 4 + 3 + + + + + 0040 + -3 + -1 + -2 + + + + + + + 434D5831 + 5 + 1 + 4 + 3 + 2 + 46 + 58 + 524946 + 31 + + + + + + + 434452367672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452377672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452387672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452397672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452417672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452427672736E + 9 + 5 + 8 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 5441424C450D0A302C310D0A22 + 14 + 2 + 3 + 1 + 5 + 6 + 4 + 12 + 11 + 9 + 10 + 13 + 220D0A564543544F52530D0A + + + + + + + 02 + 2 + 1 + [01:1C][01:1F] + [00:03] + [41:5A] + [61:7A] + 43 + 4C + 4E + + + + + + + 000000 + 4 + 1 + 02 + [00:03] + [41:5A] + [61:7A] + 43 + 4C + 4E + + + + + + + 03 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 4C + 4D + 4E + + + + + + + 83 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 4C + 4D + 4E + + + + + + + 28445746205630 + 8 + 3 + 7 + 1 + 6 + 4 + 2 + 5 + 2E + 29 + + + + + + + 55484C31 + 5 + 1 + 3 + 2 + 4 + 45 + 57 + 4E + 53 + 445349 + + + + + + + 0000270AFFFF + 7 + 5 + 3 + 4 + 1 + FBF8 + FC14 + + + + + + + 4558502020 + 6 + 1 + 5 + 3 + 4 + [30:31] + + + + + 454F49 + -4 + -1 + -3 + -2 + 454F53 + 0A + + + + + + + 56 + 2 + 1 + 45 + 65 + 52 + 72 + 53 + 73 + 49 + 69 + 4E + 6E + 43 + 63 + 48 + 68 + 41 + 61 + 52 + 72 + 53 + 73 + 45 + 65 + 54 + 74 + + + 43 + 2 + 1 + 4F + 6F + 4C + 6C + 55 + 75 + 4D + 6D + 4E + 6E + 53 + 73 + + + + + + + 56 + 2 + 1 + 45 + 65 + 52 + 72 + 53 + 73 + 49 + 69 + 4E + 6E + 43 + 63 + 48 + 68 + 41 + 61 + 52 + 72 + 53 + 73 + 45 + 65 + 54 + 74 + + + 63 + 2 + 1 + 4F + 6F + 4C + 6C + 55 + 75 + 4D + 6D + 4E + 6E + 53 + 73 + + + + + + + 76 + 2 + 1 + 45 + 65 + 52 + 72 + 53 + 73 + 49 + 69 + 4E + 6E + 43 + 63 + 48 + 68 + 41 + 61 + 52 + 72 + 53 + 73 + 45 + 65 + 54 + 74 + + + 43 + 2 + 1 + 4F + 6F + 4C + 6C + 55 + 75 + 4D + 6D + 4E + 6E + 53 + 73 + + + + + + + 76 + 2 + 1 + 45 + 65 + 52 + 72 + 53 + 73 + 49 + 69 + 4E + 6E + 43 + 63 + 48 + 68 + 41 + 61 + 52 + 72 + 53 + 73 + 45 + 65 + 54 + 74 + + + 63 + 2 + 1 + 4F + 6F + 4C + 6C + 55 + 75 + 4D + 6D + 4E + 6E + 53 + 73 + + + + + + + 46494601 + 5 + 1 + 2 + 3 + C0 + + + + + + + 3C4D616B657246696C6520382E30483E + 17 + 6 + 4 + 3 + 5 + 16 + 1 + 10 + 2 + 15 + 14 + 7 + 9 + 13 + 8 + 11 + + + + + + + 3C4D494646696C6520 + 10 + 1 + 9 + 5 + 7 + 8 + 2 + 4 + 3 + 3E2023 + + + + + + + 0001000800 + 6 + 1 + 4 + 2 + 01 + 04 + 0002 + + + + + + + 4D5468640000000600 + 10 + 1 + 2 + 9 + 8 + 6 + 7 + [00:02] + 4D54726B + + + + + + + 21547970653A + 7 + 6 + 1 + 5 + 2 + 3 + 4 + + + 5E + 2 + 1 + + + + + + + AC9EBD8F0000 + 7 + 1 + 3 + 5 + 6 + 4 + 00 + + + + + + + 4F46584845414445523A313030 + 14 + 1 + 3 + 4 + 8 + 7 + 6 + 12 + 10 + 13 + 5 + 11 + 444154413A + + + 56455253494F4E3A313032 + 12 + 2 + 3 + 1 + 4 + 10 + 7 + 5 + 6 + 9 + 8 + 11 + 53454355524954593A + + + 454E434F44494E473A + 10 + 1 + 7 + 5 + 9 + 2 + 4 + 3 + 6 + + + 434841525345543A + 9 + 1 + 6 + 8 + 3 + 7 + 5 + 4 + 2 + + + 434F4D5052455353494F4E3A + 13 + 1 + 12 + 7 + 4 + 10 + 2 + 3 + 9 + 8 + 5 + + + 4F4C4446494C455549443A + 12 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + + + 4E455746494C455549443A + 12 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 9 + + + + + + + 4F46584845414445523A313030 + 14 + 1 + 3 + 4 + 8 + 7 + 6 + 12 + 10 + 13 + 5 + 11 + 444154413A + + + 56455253494F4E3A313033 + 12 + 2 + 3 + 1 + 4 + 10 + 7 + 5 + 6 + 9 + 8 + 11 + 53454355524954593A + + + 454E434F44494E473A + 10 + 1 + 7 + 5 + 9 + 2 + 4 + 3 + 6 + + + 434841525345543A + 9 + 1 + 6 + 8 + 3 + 7 + 5 + 4 + 2 + + + 434F4D5052455353494F4E3A + 13 + 1 + 12 + 7 + 4 + 10 + 2 + 3 + 9 + 8 + 5 + + + 4F4C4446494C455549443A + 12 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + + + 4E455746494C455549443A + 12 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 9 + + + + + + + 4F46584845414445523A3130300D0A444154413A + 21 + 6 + 7 + 8 + 10 + 1 + 2 + 5 + 13 + 19 + 17 + 20 + 12 + 3 + 18 + + + 0D0A56455253494F4E3A3136300D0A53454355524954593A + 25 + 10 + 11 + 12 + 14 + 13 + 1 + 7 + 8 + 4 + 16 + 17 + 5 + 9 + 3 + 6 + 22 + 2 + + + 0D0A454E434F44494E473A + 12 + 10 + 11 + 1 + 7 + 5 + 9 + 2 + 4 + 3 + 6 + + + 0D0A434841525345543A + 11 + 9 + 10 + 1 + 6 + 8 + 3 + 7 + 5 + 4 + 2 + + + 0D0A434F4D5052455353494F4E3A + 15 + 13 + 14 + 1 + 12 + 7 + 4 + 10 + 2 + 3 + 9 + 8 + 5 + + + 0D0A4F4C4446494C455549443A + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + + + 0D0A4E455746494C455549443A + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 9 + + + + + + + 0D0A53454355524954593D + 12 + 10 + 11 + 1 + 7 + 8 + 4 + 5 + 9 + 3 + 6 + 2 + 22 + 27 + 323033 + 22 + 27 + 0D0A56455253494F4E3D + 22 + 27 + 323030 + 22 + 27 + 4F46584845414445523D + 22 + 27 + + + 0D0A4F4C4446494C455549443D + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 22 + 27 + 22 + 27 + + + 0D0A4E455746494C455549443D + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 9 + 22 + 27 + + + + + + + 0D0A53454355524954593D + 12 + 10 + 11 + 1 + 7 + 8 + 4 + 5 + 9 + 3 + 6 + 2 + 22 + 27 + 323131 + 22 + 27 + 0D0A56455253494F4E3D + 22 + 27 + 323030 + 22 + 27 + 4F46584845414445523D + 22 + 27 + + + 0D0A4F4C4446494C455549443D + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 22 + 27 + 22 + 27 + + + 0D0A4E455746494C455549443D + 14 + 12 + 13 + 1 + 2 + 5 + 8 + 3 + 6 + 11 + 4 + 9 + 22 + 27 + + + + + + + 5053494400010076 + 9 + 2 + 3 + 5 + 6 + 8 + 7 + 1 + + + + + + + 5053494400 + 6 + 1 + 2 + 3 + 5 + 4 + 01 + 02 + 007C + + + + + + + 525349440002007C + 9 + 2 + 3 + 5 + 6 + 8 + 7 + 1 + 0000 + + + + + + + 4D563933696D617000000018000000010000002C + 21 + 2 + 5 + 9 + 1 + 17 + 18 + 20 + 19 + 14 + 16 + 15 + 13 + 52494658 + + + + + + + 3339564D70616D6918000000010000002C + 18 + 2 + 5 + 9 + 1 + 17 + 16 + 14 + 15 + 12 + 10 + 11 + 13 + 58464952 + + + + + + + 41542654464F524D + 9 + 6 + 8 + 4 + 1 + 3 + 2 + 5 + 444A564D4449524D + 444A5655494E464F + + + + + + + 53444A56 + 5 + 3 + 2 + 4 + 1 + + + + + + + 0000270AFFFFFE700000000000000000000000000000000000 + 26 + 1 + 22 + 23 + 18 + 19 + 20 + 00[00:01] + + + + + + + 47454F474353 + 7 + 2 + 5 + 3 + 4 + 1 + + + 444154554D + 6 + 4 + 5 + 1 + 3 + 2 + + + 53504845524F4944 + 9 + 1 + 5 + 6 + 2 + 3 + 7 + 4 + 8 + + + 5052494D454D + 7 + 2 + 4 + 1 + 6 + 5 + + + 554E4954 + 5 + 2 + 3 + 1 + 4 + + + + + 5D5D + -3 + -1 + + + + + + + 0000000001 + 6 + 2 + 1 + 2E + 01 + + + + + + + 5046460007020006 + 9 + 2 + 3 + 1 + 4 + 6 + 8 + + + + + + + 457874656E646564204D6F64756C653A20 + 18 + 1 + 2 + 17 + 8 + 6 + 3 + 4 + 13 + 7 + 15 + 5 + 16 + 1A + + + + + + + 525346545354594C + 9 + 6 + 1 + 8 + 4 + 3 + 2 + 00 + 10 + 00 + 10 + 0000 + 00 + FF + 00 + FF + 0008 + 00100100 + 10000001 + + + + + + + 454E444E454E4654 + 9 + 6 + 4 + 2 + 3 + 1 + 00 + 10 + 00 + 10 + 0000 + 00 + FF + 00 + FF + 0008 + 00100100 + 10000001 + + + + + + + FE + 2 + 1 + [00:0F] + 01 + 03 + 3F + 00 + 00 + 00 + + + + + + + FF + 2 + 1 + [00:0F] + 01 + 03 + 3F + 00 + 00 + 00 + + + + + + + 202040404020000040404040 + 13 + 5 + 7 + 1 + 0002 + 0000 + 0000 + 00 + 0000 + + + + + + + 454E444E454E5A33000000 + 12 + 1 + 4 + 9 + 7 + 6 + 5 + 000000260005 + 0000FFFFFFFF + + + + + + + 454E444E454C3273000000 + 12 + 1 + 5 + 9 + 7 + 6 + 8 + 4 + 000000260003 + 0000FFFFFFFF + + + + + + + 254120 + 4 + 1 + 3 + 2 + [41:5A] + + + 25 + 2 + 1 + 0A + 0A0D + 44 + 54 + 20 + [30:39] + [41:5A] + + + + + + + 2541 + 3 + 2 + 1 + [41:5A] + + + 25 + 2 + 1 + 0A + 0A0D + 44 + 54 + [30:39] + [41:5A] + + + + + + + 2F62696E2F73680A2320546869732069732061207368656C6C2061726368697665 + 34 + 26 + 8 + 25 + 29 + 23 + 7 + 32 + 5 + 1 + 4 + 3 + 9 + 30 + 6 + 13 + 2 + 2321 + + + + + + + 2320546869732069732061207368656C6C2061726368697665 + 26 + 8 + 25 + 23 + 7 + 5 + 1 + 4 + 3 + 9 + 6 + 13 + 2 + + + + + + + FFFFFFFF00000000 + 9 + 1 + 5 + 0000000000 + 00 + F106000000[01:02]0000 + + + + + + + 5B6175746F72756E5D + 10 + 9 + 1 + 8 + 2 + 5 + 4 + 6 + 3 + 49434F4E + 4F50454E + 69636F6E + 6F70656E + 3D + + + + + + + 0D0A284F44422E31 + 9 + 7 + 8 + 6 + 2 + 1 + 3 + 4 + 5 + 2F332E[30:33] + + + + + + + 2850726F6A6563742E31 + 11 + 10 + 2 + 1 + 9 + 4 + 5 + 6 + 7 + 8 + 3 + 0A + 0D0A + 2F322E[30:33] + 0A + 0D0A + 094E616D653A0922 + + + + + + + 576F726450726F0DFB000000000000000005985C8172030040CCC1BFFFBDF950 + 33 + 9 + 10 + 15 + 25 + 8 + 1 + 32 + 13 + 29 + 26 + 11 + 12 + 14 + 3 + 5 + 6 + 7 + 2 + 24 + 4 + + + + + + + 00000100 + 5 + 1 + 2 + [01:09]00 + 00[00:01]00 + 00 + 00 + + + 000028000000 + 7 + 1 + 4 + 0000 + 00000100[01:20]0000000000 + + + + + + + 657273696F6E5D0D0A + 10 + 1 + 2 + 3 + 9 + 6 + 4 + 5 + 8 + 7 + 56 + 76 + 5B + 53 + 73 + 69676E6174757265 + 3D + 24 + 4348494341474F + 4368696361676F + 24 + 0D0A + + + + + + + 657273696F6E5D0D0A + 10 + 1 + 2 + 3 + 9 + 6 + 4 + 5 + 8 + 7 + 56 + 76 + 5B + 53 + 73 + 69676E6174757265 + 3D + 2224 + 57494E444F5753 + 57696E646F7773 + 204E5424220D0A + + + + + + + 657273696F6E5D0D0A + 10 + 1 + 2 + 3 + 9 + 6 + 4 + 5 + 8 + 7 + 56 + 76 + 5B + 53 + 73 + 69676E6174757265 + 3D + 2224 + 57494E444F5753 + 57696E646F7773 + 20393524220D0A + + + + + + + 786D6C6E733D22687474703A2F2F7777772E786D6C2D636D6C2E6F72672F736368656D6122 + 38 + 1 + 16 + 12 + 8 + 26 + 32 + 2 + 6 + 4 + 9 + 5 + 13 + 3 + 34 + 11 + 27 + 10 + 7 + 28 + 21 + 19 + + + + + + + 205F61746F6D5F747970655F736361745F64697370657273696F6E5F7265616C + 33 + 32 + 5 + 2 + 19 + 15 + 3 + 8 + 1 + 27 + 6 + 7 + 12 + 4 + 9 + 17 + 24 + + + + + + + 54484E4C + 5 + 3 + 1 + 2 + 4 + + + + + + + 2E524D46000000 + 8 + 1 + 7 + 4 + 5 + 6 + 10 + 12 + + + + + + + 4D534346 + 5 + 2 + 1 + 4 + 3 + 0301 + + + + + + + 4A4153432042524F57532046494C4500 + 17 + 1 + 6 + 15 + 11 + 13 + 2 + 5 + 4 + 16 + 3 + 9 + 10 + 7 + 8 + + + + + + + 252150532D41646F62652D332E3120455053462D332E30 + 24 + 9 + 22 + 23 + 4 + 2 + 1 + 10 + 3 + 18 + 8 + 5 + 7 + 6 + 15 + 17 + 14 + 16 + 0A + 0A0D + 0D + 0D0A + + + + + + + 46616C63 + 5 + 4 + 3 + 1 + 2 + + + + + + + 53484F57 + 5 + 3 + 2 + 4 + 1 + + + + + + + 48474233 + 5 + 1 + 2 + 3 + 4 + + + + + + + 48474231 + 5 + 1 + 2 + 3 + 4 + + + + + + + 00 + 2 + 1 + 43415420 + 464F524D + 4C495354 + + + + + + + 494C424D424D4844 + 9 + 4 + 1 + 2 + 8 + 7 + 3 + 464F524D + + + + + + + 3853565856484452 + 9 + 8 + 2 + 3 + 1 + 7 + 4 + 5 + 464F524D + + + + + + + 53 + 2 + 1 + 202020202020 + 303030303030 + 31 + 0A + 0D0A + 4720202020202031 + 4730303030303031 + 5320202020202032 + 5330303030303032 + + + + + + + 000002000404 + 7 + 3 + 4 + 1 + + + + + + + 00000200060406000800 + 11 + 1 + 8 + 5 + 4 + 2 + + + + + + + 00001A0000100400 + 9 + 1 + 2 + 3 + 6 + + + + + + + 00001A0002100400 + 9 + 1 + 4 + 2 + 3 + 6 + + + + + + + 010000000100080044000000000C7F0906 + 18 + 5 + 13 + 1 + 11 + 2 + 4 + 9 + 3 + + + + + + + 000002000680 + 7 + 3 + 4 + 2 + 1 + 02 + 96 + 00 + + + + + + + 576F726450726F0000000000000000004C5750370000000000000000000000000000FFFFFFFF000000002E + 44 + 2 + 1 + 24 + 27 + 25 + 26 + 40 + 37 + 38 + 6 + + + + + + + 001102FF0C00 + 7 + 1 + 4 + 2 + 5 + 3 + + + + + + + 2077000240 + 6 + 3 + 2 + 5 + 1 + 4 + + + + + + + 20770033 + 5 + 2 + 4 + 1 + 3 + + + + + + + 5375626A6563743A + 9 + 1 + 8 + 6 + 3 + 4 + 5 + 2 + 7 + 46726F6D3A + + + 446174653A + 6 + 1 + 5 + 4 + 2 + 3 + + + 56657273696F6E3A + 9 + 1 + 8 + 7 + 4 + 2 + 3 + 6 + 5 + 4D494D45 + + + 6D756C7469706172742F72656C617465643B + 19 + 9 + 1 + 5 + 2 + 3 + 14 + 6 + 18 + 13 + 8 + 4 + 17 + 547970653A + 436F6E74656E74 + + + + + + + 2142444E + 5 + 4 + 3 + 2 + 1 + 4142 + + + + + + + 4D5058 + 4 + 3 + 2 + 1 + 2C + 3B + 2C + 3B + 34 + 2C + 2E + 30 + + + + + + + 4D5058 + 4 + 3 + 2 + 1 + 2C + 3B + 2C + 3B + 312E30 + + + + + + + 4D5058 + 4 + 3 + 2 + 1 + 2C + 3B + 2C + 3B + 332E30 + + + + + + + 0100000058000000 + 9 + 1 + 8 + 4 + 20454D4600000100 + 00000000 + + + + + + + 20454D4600000100 + 9 + 1 + 2 + 8 + 7 + 5 + 6 + 01000000 + 58000000 + + + + + + + 0100000064000000 + 9 + 1 + 8 + 4 + 20454D4600000100 + 00000000 + 00000000 + + + + + + + 20454D4600000100 + 9 + 1 + 2 + 8 + 7 + 5 + 6 + 01000000 + 64000000 + + + + + + + 20454D4600000100 + 9 + 1 + 2 + 8 + 7 + 5 + 6 + 01000000 + 64000000 + + + + + + + 010000006C000000 + 9 + 1 + 8 + 4 + 20454D4600000100 + 00000000 + 00000000 + + + + + + + 20454D4600000100 + 9 + 1 + 2 + 8 + 7 + 5 + 6 + 01000000 + 6C000000 + + + + + + + 20454D4600000100 + 9 + 1 + 2 + 8 + 7 + 5 + 6 + 01000000 + 6C000000 + + + + + + + FE3200C1 + 5 + 2 + 3 + 1 + 4 + + + + + + + FE3400 + 4 + 1 + 2 + 3 + 00 + C1 + + + + + + + FE37001C + 5 + 2 + 1 + 3 + 4 + + + + + + + FE370023 + 5 + 2 + 1 + 3 + 4 + + + + + + + 31BE000000AB0000000000000000 + 15 + 1 + 14 + 9 + 13 + 0000 + 00 + + + + + + + 31BE000000AB0000000000000000 + 15 + 1 + 14 + 9 + 13 + 0000 + 04 + + + + + + + 31BE000000AB0000000000000000 + 15 + 1 + 14 + 9 + 13 + 0000 + 07 + + + + + + + FFF6 + 3 + 1 + 2 + [10:EB] + FFF6[10:EB] + FFF6[10:EB] + FFF6[10:EB] + + + + + + + FFF7 + 3 + 1 + 2 + [10:EB] + FFF7[10:EB] + FFF7[10:EB] + FFF7[10:EB] + + + + + + + FFFE + 3 + 1 + 2 + [10:EB] + FFFE[10:EB] + FFFE[10:EB] + FFFE[10:EB] + + + + + + + FFFF + 3 + 1 + [10:EB] + FFFF[10:EB] + FFFF[10:EB] + FFFF[10:EB] + + + + + + + FFFC + 3 + 1 + 2 + [10:EB] + FFFC[10:EB] + FFFC[10:EB] + FFFC[10:EB] + + + + + + + FFFD + 3 + 1 + 2 + [10:EB] + FFFD[10:EB] + FFFD[10:EB] + FFFD[10:EB] + + + + + + + FFF4 + 3 + 1 + 2 + [10:EB] + FFF4[10:EB] + FFF4[10:EB] + FFF4[10:EB] + + + + + + + FFF5 + 3 + 1 + 2 + [10:EB] + FFF5[10:EB] + FFF5[10:EB] + FFF5[10:EB] + + + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + 000000 + -4 + -1 + FFFC[10:EB] + FFFC[10:EB] + FFFC[10:EB] + FFFC[10:EB] + FFFC[10:EB] + + + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + 000000 + -4 + -1 + FFFD[10:EB] + FFFD[10:EB] + FFFD[10:EB] + FFFD[10:EB] + FFFD[10:EB] + + + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + 000000 + -4 + -1 + FFF4[10:EB] + FFF4[10:EB] + FFF4[10:EB] + FFF4[10:EB] + FFF4[10:EB] + + + + + + + 494433 + 4 + 1 + 2 + 3 + + + + + 000000 + -4 + -1 + FFF5[10:EB] + FFF5[10:EB] + FFF5[10:EB] + FFF5[10:EB] + FFF5[10:EB] + + + + + + + B168DE3A + 5 + 1 + 3 + 4 + 2 + + + + + + + 766F7262697300000000 + 11 + 1 + 7 + 6 + 9 + 8 + 5 + 10 + 4F6767530002 + 4F676753 + + + + + + + 000000 + 4 + 1 + 10 + 30 + 40 + 424D + 0100 + + + + + + + 0100180004000000 + 9 + 1 + 8 + 4 + 6 + 28000000 + 424D + + + + + + + 0100010003000000 + 9 + 1 + 6 + 4 + 28000000 + 424D + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000300 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000400 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000500 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000600 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000700 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000800 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000900 + 35 + 1 + 2 + 9 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 5061696E742053686F702050726F20496D6167652046696C650A1A00000000000A00 + 35 + 1 + 2 + 8 + 14 + 13 + 19 + 23 + 28 + 17 + 10 + 16 + 27 + 12 + 11 + 18 + 31 + 21 + 25 + 22 + 30 + + + + + + + 00000000 + 5 + 1 + 0C + [01:20] + 00 + 02 + 0008 + + + + + + + 00000000 + 5 + 1 + [01:04] + 00 + 02 + 0008 + [03:04] + + + + + + + 00000000 + 5 + 1 + [05:09] + [01:04] + 00 + 02 + 0008 + + + + + + + 00000000 + 5 + 1 + 0A + 0B + [01:20] + 00 + 02 + 0008 + + + + + + + 1040000008 + 6 + 2 + 1 + 5 + 4 + 00100010 + 000100 + + + + + + + 255044462D312E + 8 + 7 + 3 + 1 + 2 + 5 + 4 + 6 + [30:37] + + + + + 687474703A2F2F7777772E6169696D2E6F72672F706466612F6E732F6964 + 31 + 15 + 3 + 26 + 7 + 1 + 8 + 12 + 30 + 2 + 16 + 5 + 14 + 10 + 13 + 4 + 28 + 21 + 22 + 27 + 786D6C6E733A7064666169643D + + + 7064666169643A636F6E666F726D616E6365 + 19 + 12 + 4 + 2 + 13 + 1 + 8 + 14 + 5 + 3 + 7 + 18 + 6 + 22 + 27 + 3C2F7064666169643A706172743E + 31 + 3D22 + 3D27 + 3E + 7064666169643A70617274 + 3D22 + 3D27 + 3E + 42 + 22 + 27 + 3C2F7064666169643A636F6E666F726D616E63653E + + + + + + + 5C616E7369637067 + 9 + 8 + 7 + 3 + 1 + 4 + 6 + 2 + 5 + 616E7369 + 6D6163 + 7063 + 706361 + 66 + 6631 + 7B5C7274 + + + 5C737473686664626368 + 11 + 10 + 3 + 2 + 4 + 5 + 1 + 7 + 8 + 5C73747368666C6F6368 + 5C737473686668696368 + 5C73747368666269 + + + 5C + 2 + 1 + 2A5C636F6C6F72736368656D656D617070696E67 + 2A5C6461746173746F7265 + 2A5C646566636870 + 6166656C6576 + + + + + + + 5C616E7369637067 + 9 + 8 + 7 + 3 + 1 + 4 + 6 + 2 + 5 + 616E7369 + 6D6163 + 7063 + 706361 + 66 + 6631 + 7B5C7274 + + + 5C737473686664626368 + 11 + 10 + 3 + 2 + 4 + 5 + 1 + 7 + 8 + 5C73747368666C6F6368 + 5C737473686668696368 + 5C73747368666269 + + + 5C6C73647374696D6178 + 11 + 10 + 2 + 7 + 4 + 9 + 3 + 6 + 5 + 1 + + + + + + + 2321414D520A + 7 + 1 + 5 + 6 + 4 + 3 + 2 + + + + + + + 20746578742F706C61696E20 + 13 + 1 + 7 + 4 + 10 + 3 + 5 + 2 + 6 + 8 + 9 + 20 + 2E + 2E + 2E + 20 + 66696C65646573633A2F2F + 0A31203020 + + + 0A55524C2049502D6164647265737320417263686976652D6461746520436F6E74656E742D7479706520417263686976652D6C656E677468 + 57 + 56 + 15 + 7 + 14 + 27 + 51 + 53 + 50 + 54 + 55 + 31 + 12 + 32 + 5 + 3 + 1 + 10 + 6 + 4 + 26 + 17 + 13 + 42 + 2 + 9 + 18 + + + + + + + 667479703367 + 7 + 2 + 6 + 1 + 3 + 5 + 4 + 65 + 67 + 68 + 70 + 72 + 73 + 74 + [34:39]0000[00:03]00 + + + + + + + 5B51756572795D + 8 + 6 + 7 + 1 + 4 + 3 + 5 + 2 + + + 636F70653D + 6 + 1 + 5 + 2 + 4 + 3 + 53 + 73 + 69 + 43 + 63 + + + + + 5B51756572795D + 8 + 6 + 7 + 1 + 4 + 3 + 5 + 2 + + + 6F6C756D6E733D + 8 + 1 + 6 + 4 + 3 + 7 + 2 + 5 + 43 + 63 + 69 + 43 + 63 + + + + + 5B51756572795D + 8 + 6 + 7 + 1 + 4 + 3 + 5 + 2 + + + 656D706C6174653D2F + 10 + 1 + 2 + 5 + 3 + 6 + 8 + 7 + 4 + 54 + 74 + 69 + 43 + 63 + + + + + 5B51756572795D + 8 + 6 + 7 + 1 + 4 + 3 + 5 + 2 + + + 65737472696374696F6E3D + 12 + 1 + 6 + 11 + 4 + 2 + 3 + 8 + 10 + 5 + 52 + 72 + 69 + 43 + 63 + 25 + + + + + + + 0C0000002C000000 + 9 + 1 + 8 + 4 + 1C010000 + FFFFFFFF0002 + + + + + + + 0000000000000000000000000000000000000000 + 21 + 1 + [41:42] + 0000 + 0000 + 00000000 + 0000803F + 00000000 + [40:49] + + + + + + + 4E554D424552204F46205452414345532020203D20 + 22 + 1 + 2 + 9 + 18 + 8 + 7 + 13 + 19 + 21 + 14 + 10 + 6 + 11 + 20 + [30:39] + + + 4E554D424552204F46205054532F54524320203D20 + 22 + 1 + 8 + 2 + 18 + 5 + 17 + 13 + 19 + 21 + 14 + 11 + 6 + 9 + 7 + 20 + [30:39] + + + + + 535552564559204D4F444520202020202020203D20 + -22 + -7 + -20 + -10 + -5 + -8 + -9 + -3 + -1 + -2 + -4 + -6 + + + + + + + 000400 + 4 + 1 + 2 + 0007 + FF00 + 02 + 04 + 100000 + 00 + 80 + 0000 + 00 + 80 + [41:42] + [31:39][30:39][30:39] + 434C4153 + 46494C45 + 0000 + FFFF + + + + + + + 40404040404040404040404040404040404040404040 + 23 + 1 + + + + + 0000 + 3 + 1 + [!00] + [!00] + 00[01:08] + 0100 + + + + + + + 40404040404040404040404040404040404040404040 + 23 + 1 + + + + + 0000 + 3 + 1 + [!00] + [!00] + 00[01:08] + 0100 + + + + + + + 4E49544630312E3130 + 10 + 3 + 1 + 2 + 6 + 8 + 9 + 7 + [30:33][30:39][30:32][30:39][30:35][30:39][30:35][30:39]5A + [30:39][30:39] + 43 + 52 + 53 + 54 + 55 + + + + + + + 4E49544630322E3030 + 10 + 3 + 1 + 4 + 6 + 8 + 9 + 7 + [30:39][31:39]20202020 + [30:33][30:39][30:32][30:39][30:35][30:39][30:35][30:39]5A + [30:39][30:39] + 43 + 52 + 53 + 54 + 55 + + + + + + + 4E49544630322E3130 + 10 + 3 + 1 + 2 + 4 + 6 + 8 + 9 + 7 + [30:39][31:39] + 31 + 32 + [30:39][30:39][30:39] + 30 + 31 + [30:39][30:33][30:39][30:32][30:39][30:35][30:39][30:35][30:39] + 43 + 52 + 53 + 54 + 55 + + + + + + + 687474703A2F2F7777772E6F70656E6769732E6E65742F676D6C + 27 + 8 + 4 + 22 + 6 + 3 + 26 + 10 + 1 + 2 + 7 + 15 + 14 + 9 + 5 + 17 + 22 + 27 + 786D6C6E733A676D6C3D + 22 + 27 + 312E30 + 22 + 27 + 3C3F786D6C2076657273696F6E3D + + + + + + + 3C3F786D6C2076657273696F6E3D + 15 + 9 + 14 + 1 + 13 + 7 + 4 + 10 + 11 + 2 + 3 + 6 + 5 + 8 + 12 + 22 + 27 + 312E30 + 22 + 27 + + + + + 736368656D613E + -8 + -7 + -6 + -2 + -4 + -3 + -5 + -1 + 2F + 2F78733A + 2F7873643A + 3C + + + + + + + 4C415346 + 5 + 3 + 1 + 4 + 2 + 0100 + [00:99] + + + + + + + 4C415346 + 5 + 3 + 1 + 4 + 2 + 0101 + [00:99] + + + + + + + 4C415346 + 5 + 3 + 1 + 4 + 2 + 0102 + [00:99] + + + + + + + 65020102 + 5 + 2 + 1 + 4 + 040000 + 0000 + 00030001 + + + + + + + 4461746173657448656164657220426567696E + 20 + 6 + 5 + 19 + 12 + 10 + 9 + 4 + 3 + 2 + 1 + 7 + 15 + 13 + + + + + 4461746173657448656164657220456E640A + -19 + -18 + -14 + -1 + -15 + -8 + -2 + -11 + -6 + -16 + -13 + -5 + -3 + + + + + + + 04 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4E + + + + + + + 43 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4E + + + + + + + 63 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4E + + + + + + + CB + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4D + 4E + + + + + + + 7B + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4D + 4E + + + + + + + 8B + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4D + 4E + + + + + + + 8E + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 43 + 44 + 46 + 4C + 4D + 4E + + + + + + + F5 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 42 + 43 + 44 + 49 + 4C + 4D + 4E + 50 + 54 + 59 + + + + + + + 30 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 42 + 43 + 44 + 49 + 4C + 4D + 4E + 50 + 54 + 59 + + + + + + + 31 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 42 + 43 + 44 + 49 + 4C + 4D + 4E + 50 + 54 + 59 + + + + + + + 32 + 2 + 1 + [01:0C][01:1F] + [41:5A] + [61:7A] + 42 + 43 + 44 + 49 + 4C + 4D + 4E + 50 + 54 + 59 + + + + + + + 000000 + 4 + 1 + 00 + [!00] + 000000[00:02] + [!00] + + + + + + + 000000 + 4 + 1 + 00 + [!00] + 000000[00:02] + [!00] + + + + + + + 000000010000000001000000 + 13 + 1 + 4 + 000000[00:02] + 000000[!00] + 00 + [!00] + + + + + + + FFFFFFFFFFFFFFFF + 9 + 1 + 03 + 010000000100 + 0000 + 0001 + 0A00[!00] + 0000 + 00 + FFFF + 0F0F + + + + + + + 504C4154464F524D00000043 + 13 + 2 + 10 + 1 + 8 + 11 + 5 + 7 + 12 + 6 + 9 + 00000061091D + [01:0C][01:1F] + F5 + 554E49515545494400000043 + 4F424A54595045000000004E + + + + + + + 504C4154464F524D00000043 + 13 + 2 + 10 + 1 + 8 + 11 + 5 + 7 + 12 + 6 + 9 + 000000880AE5 + [01:0C][01:1F] + 30 + 554E49515545494400000043 + 4F424A54595045000000004E + + + + + + + 566A4344303130300403020100000000000000000000 + 23 + 1 + 11 + 12 + 13 + 14 + 15 + 17 + 20 + 19 + 22 + 21 + + + + + + + 504C4154464F524D00000043 + 13 + 2 + 10 + 1 + 8 + 11 + 5 + 7 + 12 + 6 + 9 + [01:0C][01:1F] + 30 + 554E49515545494400000043 + 434C4153530000000000004D + + + + + + + 4E414D45000000000000004D + 13 + 2 + 11 + 9 + 1 + 12 + A80482 + [01:0C][01:1F] + 30 + 545950450000000000000043 + 49440000000000000000004E + 54494D455354414D5000004E + + + + + + + 4E414D45000000000000004D + 13 + 2 + 11 + 9 + 1 + 12 + 010488 + [01:0C][01:1F] + F5 + 545950450000000000000043 + 54494D455354414D5000004E + + + + + + + 2001000000010000 + 9 + 1 + 3 + 8 + 42 + 43 + 44 + 49 + 4C + 4D + 4E + 50 + 54 + 59 + [41:5A] + [61:7A] + 2802A5 + [01:0C][01:1F] + 30 + [41:5A] + [61:7A] + + + + + + + 0004000000000000000000000A00 + 15 + 1 + 13 + 2 + [!00] + 03000200FFFFFFFFFFFFFFFF + 01FFFF + 0F0F + [41:5A]000A + 2B00[0B:0F]0000002B00 + [!00]00[!00]00FFFFFFFFFFFFFFFF + + + + + + + 0B00000001001800 + 9 + 1 + 4 + 8 + 2 + 00000001000000 + 00000040 + 0000 + + + + + + + 4C424C53495A453D + 9 + 1 + 7 + 2 + 4 + 6 + 5 + 3 + [30:39] + 464F524D41543D27 + 42595445 + 434F4D50 + 434F4D504C4558 + 444F5542 + 46554C4C + 48414C46 + 4C4F4E47 + 5245414C + 574F5244 + 27 + + + + + + + 524946462400000043444441666D742018 + 18 + 10 + 1 + 2 + 13 + 6 + 9 + 7 + 14 + 16 + 17 + 5 + 4 + 3 + + + + + + + 00000200 + 5 + 1 + 2 + [01:09]00 + 00 + 00 + 00 + 00 + + + 000028000000 + 7 + 1 + 4 + 0000 + 00000100[01:20]0000000000 + + + + + 000028000000 + 7 + 1 + 4 + 0000 + 00000100[01:20]0000000000 + + + + + + + 52494646 + 5 + 1 + 3 + 4 + 41434F4E + + + 616E69682400000024000000 + 13 + 1 + 4 + 12 + 9 + 10 + 11 + [!00] + + + 6672616D69636F6E + 9 + 6 + 3 + 8 + 4 + 5 + 1 + 2 + 7 + 4C495354 + + + + + + + 424547494E3A5643414C454E444152 + 16 + 10 + 2 + 15 + 8 + 3 + 5 + 13 + 12 + 6 + 4 + 1 + 9 + + + 56455253494F4E + 8 + 6 + 3 + 1 + 2 + 5 + 4 + 7 + 3A312E30 + + + + + 454E443A5643414C454E444152 + -14 + -4 + -7 + -6 + -3 + -1 + -8 + -2 + -13 + -5 + + + + + + + 424547494E3A5643414C454E444152 + 16 + 10 + 2 + 15 + 8 + 3 + 5 + 13 + 12 + 6 + 4 + 1 + 9 + + + 56455253494F4E + 8 + 6 + 3 + 1 + 2 + 5 + 4 + 7 + 3A322E30 + + + + + 454E443A5643414C454E444152 + -14 + -4 + -7 + -6 + -3 + -1 + -8 + -2 + -13 + -5 + + + + + + + 3C3F786D6C2076657273696F6E3D + 15 + 9 + 14 + 1 + 13 + 7 + 4 + 10 + 11 + 2 + 3 + 6 + 5 + 8 + 12 + 22 + 27 + 312E30 + 22 + 27 + + + 3C6B6D6C20786D6C6E733D + 12 + 7 + 11 + 1 + 10 + 4 + 5 + 3 + 2 + 6 + + + + + 3C2F6B6D6C3E + -7 + -2 + -1 + -6 + -3 + -5 + -4 + + + + + + + 7E56 + 3 + 1 + 2 + + + 564552532E + 6 + 1 + 4 + 3 + 2 + 5 + + + 43574C5320 + 6 + 1 + 5 + 3 + 2 + 4 + 3A + 312E32 + 4C4153 + 4C4F47204153434949205354414E44415244 + 4C6F67204153434949205374616E64617264 + 56 + 455253494F4E + 657273696F6E + 20312E32 + + + 7E57 + 3 + 1 + 2 + + + 7E43 + 3 + 1 + 2 + + + 7E41 + 3 + 1 + 2 + + + + + + + 7E56 + 3 + 1 + 2 + + + 564552532E + 6 + 1 + 4 + 3 + 2 + 5 + + + 322E + 3 + 1 + 2 + + + 20322E + 4 + 3 + 1 + 2 + 455253494F4E + 657273696F6E + 56 + 4C4153 + 4C4F47204153434949205354414E44415244 + 4C6F67204153434949205374616E64617264 + 6C6F67204153434949205374616E64617264 + 20 + 43574C53 + 4C4153 + [30:31] + + + 7E57 + 3 + 1 + 2 + + + 7E43 + 3 + 1 + 2 + + + 7E41 + 3 + 1 + 2 + + + + + + + 7E56 + 3 + 1 + 2 + 455253494F4E + 657273696F6E + + + 564552532E + 6 + 1 + 4 + 3 + 2 + 5 + + + 56455253494F4E20332E30 + 12 + 4 + 2 + 1 + 3 + 10 + 7 + 5 + 6 + 9 + 8 + 11 + 4C4153 + 4C4F47204153434949205354414E44415244 + 43574C5320 + 3A + 332E30 + + + 7E57 + 3 + 1 + 2 + 454C4C + 656C6C + + + + + + + 6D736964 + 5 + 1 + 2 + 4 + 3 + + + + + FFD2FFA1 + -5 + -4 + -2 + -1 + + + + + + + 000233512E2126402324212626 + 14 + 13 + 12 + 3 + 5 + 4 + 1 + 9 + 11 + 6 + 10 + + + + + + + 20746578742F706C61696E20 + 13 + 1 + 7 + 4 + 10 + 3 + 5 + 2 + 6 + 8 + 9 + 20 + 2E + 2E + 2E + 20 + 66696C65646573633A2F2F + 0A31203120 + + + 0A55524C2049502D6164647265737320417263686976652D6461746520436F6E74656E742D7479706520417263686976652D6C656E677468 + 57 + 56 + 15 + 7 + 14 + 27 + 51 + 53 + 50 + 54 + 55 + 31 + 12 + 32 + 5 + 3 + 1 + 10 + 6 + 4 + 26 + 17 + 13 + 42 + 2 + 9 + 18 + + + + + + + 255044462D312E33 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2F4754535F50444658436F6E666F726D616E6365 + 21 + 20 + 11 + 14 + 13 + 19 + 15 + 17 + 18 + 12 + 16 + 4 + 2 + 1 + 8 + 5 + 3 + 7 + 6 + 285044462F582D31613A3230303129 + + + + + + + 255044462D312E33 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 2F4754535F5044465856657273696F6E + 17 + 16 + 10 + 9 + 15 + 11 + 13 + 14 + 7 + 8 + 12 + 6 + 3 + 1 + 2 + 5 + 4 + 285044462F582D333A3230303229 + + + + + + + 5031 + 3 + 1 + 2 + 09 + 0A + 0D0A + 20 + + + + + 0A + -2 + -1 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + 0A + 0D + 20 + 30 + 31 + + + + + + + 5034 + 3 + 1 + 2 + 0A + 0D + 20 + 23 + 0A + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5033 + 3 + 1 + 2 + 09 + 0A + 0D0A + 20 + + + + + 20 + -2 + -1 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5036 + 3 + 1 + 2 + 0A + 0D + 20 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5032 + 3 + 1 + 2 + 09 + 0A + 0D0A + 20 + + + + + 20 + -2 + -1 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5035 + 3 + 1 + 2 + 0A + 0D + 20 + 23 + 0A + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5037 + 3 + 1 + 2 + + + 454E44484452 + 7 + 2 + 6 + 3 + 5 + 1 + 5749445448 + + + + + + + 526172211A0700 + 8 + 1 + 2 + 3 + 4 + 7 + 6 + 5 + 73 + 14 + + + + + + + 526172211A0700 + 8 + 1 + 2 + 3 + 4 + 7 + 6 + 5 + 73 + 1D + + + + + + + 2E7261FD0003 + 7 + 2 + 1 + 6 + 4 + 5 + 3 + + + + + + + 2E7261FD000400002E726134 + 13 + 5 + 7 + 4 + 1 + 2 + 3 + 9 + + + + + + + 2E524D46000000 + 8 + 1 + 7 + 4 + 5 + 6 + 10 + 12 + + + + + + + 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 51 + 1 + 4354000000000000000000000000 + 00 + 01 + 00 + 07 + 08 + FF + + + + + + + 6F6C696420 + 6 + 1 + 2 + 3 + 4 + 5 + 2073 + 73 + + + 6661636574206E6F726D616C20 + 14 + 1 + 3 + 11 + 10 + 13 + 2 + 4 + 7 + 6 + 5 + 9 + 6F75746572206C6F6F70 + 76657274657820 + + + + + + + 255044462D312E33 + 9 + 8 + 4 + 2 + 3 + 1 + 6 + 5 + 7 + + + + + 3C706466783A4754535F5044465856657273696F6E3E5044462F582D333A32303032 + 35 + 7 + 9 + 2 + 1 + 6 + 5 + 34 + 13 + 11 + 10 + 28 + 12 + 26 + 27 + 20 + 8 + 25 + 32 + 19 + 31 + 16 + 14 + 15 + 33 + 18 + 17 + 30 + + + + + + + 59A66A95 + 5 + 4 + 2 + 1 + 3 + 000000 + 000000 + 000000 + + + + + + + 537570657243616C63207665722E + 15 + 5 + 1 + 9 + 14 + 8 + 6 + 3 + 7 + 12 + 2 + 13 + 4 + 312E + + + + + + + 537570657243616C63207665722E + 15 + 5 + 1 + 9 + 14 + 8 + 6 + 3 + 7 + 12 + 2 + 13 + 4 + 342E + + + + + + + 54525545564953494F4E2D5846494C452E00 + -19 + -18 + -11 + -17 + -4 + -13 + -6 + -15 + -10 + -9 + -2 + -7 + -1 + -3 + -5 + -12 + + + + + + + 537570657243616C63207665722E + 15 + 5 + 1 + 9 + 14 + 8 + 6 + 3 + 7 + 12 + 2 + 13 + 4 + 352E + + + + + + + 49443B50 + 5 + 2 + 3 + 4 + 1 + + + + + 0D0A + -3 + -2 + -1 + 45 + 450A + 450D0A + + + + + + + 01 + 2 + 1 + 01 + 09 + 0F + 10 + 18 + 20 + 08 + 0F + 10 + 18 + 20 + + + + + + + F702 + 3 + 1 + 2 + + + + + DFDFDFDF + -5 + -1 + 02 + F9 + + + + + + + 57415645666D7420100000000100 + 15 + 1 + 2 + 6 + 7 + 13 + 11 + 12 + 14 + 10 + 9 + 8 + 52494646 + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + 57415645666D7420 + 9 + 1 + 7 + 5 + 6 + 8 + 4 + 3 + 2 + 52494646 + [!10] + [!FEFF] + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + 57415645666D7420 + 9 + 1 + 7 + 5 + 6 + 8 + 4 + 3 + 2 + 52494646 + FEFF + + + 64617461 + 5 + 1 + 4 + 2 + + + + + + + D7CDC69A0000 + 7 + 1 + 3 + 4 + 5 + 6 + 01000900 + + + + + + + 1D7D000050 + 6 + 2 + 5 + 1 + 4 + 7D001D + + + + + + + 1D7D000055 + 6 + 2 + 5 + 1 + 4 + 7D001D + + + + + + + 1D7D000060 + 6 + 2 + 5 + 1 + 4 + 7D001D + + + + + + + 1D7D000070 + 6 + 2 + 5 + 1 + 4 + 7D001D + + + + + + + 31BE000000AB0000000000000000 + 15 + 1 + 14 + 9 + 13 + [!0000] + + + + + + + 32BE000000AB0000000000000000 + 15 + 1 + 14 + 9 + 13 + [!0000] + + + + + + + 23646566696E6520 + 9 + 1 + 8 + 7 + 2 + 5 + 4 + 3 + 5F776964746820 + 23646566696E6520 + 5F68656967687420 + 73746174696320 + 63686172 + 756E7369676E65642063686172 + 20 + + + 5F626974735B5D203D207B + 12 + 2 + 3 + 6 + 5 + 11 + 10 + 9 + 7 + 8 + 1 + + + + + + + 23646566696E6520 + 9 + 1 + 8 + 7 + 2 + 5 + 4 + 3 + 5F776964746820 + 23646566696E6520 + 5F68656967687420 + + + 73746174696320756E7369676E65642073686F727420 + 23 + 1 + 20 + 17 + 8 + 9 + 11 + 5 + 12 + 10 + 4 + 3 + 6 + 2 + 15 + 5F626974735B5D203D207B + + + + + + + 00000007000000 + 8 + 1 + 4 + 000000 + 00 + 01 + 02 + 000000[01:20] + 000000 + 00 + 01 + 000000 + 08 + 10 + 20 + 000000 + 00 + 01 + 000000 + 08 + 10 + 20 + 000000 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 0A + 0B + 0C + 0D + 0E + 0F + 10 + 18 + 20 + 000000[00:05] + + + + + + + 0000002800000006 + 9 + 2 + 1 + 5 + 000000 + 000000 + 00 + 01 + + + + + + + 2F2A2058504D202A2F + 10 + 3 + 2 + 1 + 4 + 5 + 6 + + + 0A7374617469632063686172202A20 + 16 + 15 + 1 + 2 + 5 + 7 + 6 + 10 + 4 + 14 + 11 + + + + + 7D + -2 + -1 + 203B + 3B + + + + + + + DCA7C4FD + 5 + 3 + 2 + 4 + 1 + + + + + FC83 + -3 + -2 + -1 + + + + + + + 2E736E64000000 + 8 + 1 + 7 + 4 + 5 + 6 + 000000 + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 17 + 18 + 19 + 1A + 1B + 000000 + + + + + + + 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 51 + 1 + 00 + 01 + 02 + 03 + 00 + 01 + 03 + 04 + 00 + 01 + 02 + 03 + 00 + 01 + 02 + 00 + 01 + 01DA + + + + + + + 5034 + 3 + 1 + 2 + 0A + 0D + 20 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5035 + 3 + 1 + 2 + 0A + 0D + 20 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 5036 + 3 + 1 + 2 + 0A + 0D + 20 + 23 + 0A + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 0A + 0D + 20 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + + + + + + + 0000000000 + 6 + 1 + 02 + 03 + 0A + 0B + 00 + 08 + 0F + 10 + 18 + 20 + + + + + + + 1C0100000200041C0114000200141C0116000200091C011E000A4672656548616E6431311C01280008 + 42 + 2 + 4 + 23 + 35 + 1 + 21 + 16 + 28 + 25 + 5 + 18 + 3 + 6 + 15 + 11 + 10 + 8 + 12 + 9 + 14 + 30301C014600083230 + + + + + 6400F300F00086466C6174654465636F646500FFFFFFFF1C090A000400 + -30 + -2 + -28 + -25 + -26 + -24 + -13 + -8 + -10 + -15 + -1 + -12 + -9 + -16 + -11 + -7 + -5 + -3 + -20 + + + + + + + 5374756666497421 + 9 + 1 + 3 + 8 + 4 + 2 + 6 + + + + + 020255 + -4 + -1 + -3 + + + + + + + 454E49474D41205452414E53504F525441424C452046494C45 + 26 + 5 + 9 + 8 + 1 + 4 + 22 + 3 + 2 + 21 + 15 + 12 + 13 + 11 + 14 + 10 + 5E686561646572 + 5E3031202246696E616C65285229 + + + + + + + 454E49474D412042494E4152592046494C45000000000000000000000000000046696E616C65285229 + 42 + 10 + 28 + 3 + 1 + 31 + 34 + 24 + 9 + 38 + 26 + 25 + 37 + 32 + 2 + 29 + 6 + 4 + 8 + 5 + 7 + + + + + + + 424F4F4B4D4F4249 + 9 + 2 + 1 + 5 + 4 + 3 + + + + + + + 5445587452454164 + 9 + 2 + 3 + 4 + 8 + 6 + 1 + 5 + + + + + + + 424547494E3A5643415244 + 12 + 6 + 3 + 11 + 4 + 1 + 10 + 9 + 8 + 7 + 2 + 5 + 56455253494F4E3A + + + + + 454E443A5643415244 + -10 + -4 + -7 + -6 + -3 + -1 + -2 + -8 + -5 + + + + + + + 01427564310000 + 8 + 1 + 7 + 3 + 6 + 4 + 5 + + + + + + + 000001BA + 5 + 3 + 2 + 1 + 000001 + BB + BD + BE + E0 + + + + + 000001BF03D400 + 8 + 1 + 5 + 3 + 4 + 2 + 000001BF03FA01 + + + + + + + 0000000000000000FFFF01001000434861727269734D6174726978446F63 + 31 + 17 + 20 + 18 + 16 + 3 + 15 + 9 + 8 + 1 + 5 + 2 + 6 + 10 + 7 + 4 + 21 + + + + + 00000001000000 + -8 + -1 + -4 + 02266E00 + + + + + + + 434452437672736E + 9 + 5 + 7 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 434452447672736E + 9 + 8 + 5 + 6 + 1 + 3 + 2 + 4 + 46 + 58 + 524946 + + + + + + + 43445245 + 5 + 4 + 3 + 1 + 2 + 46 + 58 + 524946 + 504B + + + + + + + 43445246 + 5 + 4 + 3 + 1 + 2 + 46 + 58 + 524946 + 504B + + + + + + + 434152417672736E + 9 + 5 + 8 + 6 + 1 + 3 + 2 + 4 + 52494646 + + + + + + + 434152427672736E + 9 + 7 + 5 + 8 + 6 + 1 + 3 + 2 + 4 + 52494646 + + + + + + + 434152437672736E + 9 + 7 + 5 + 6 + 1 + 3 + 2 + 4 + 52494646 + + + + + + + 53454354494F4E + 8 + 5 + 6 + 3 + 1 + 2 + 7 + 4 + 30 + 202032 + 484541444552 + + + 2441434144564552 + 9 + 8 + 5 + 6 + 4 + 2 + 1 + 3 + 39 + 202031 + 414331303234 + + + 454E44534543 + 7 + 1 + 4 + 2 + 5 + 3 + 30 + + + + + 454F46 + -4 + -1 + -3 + -2 + 30 + + + + + + + 4143313032340000 + 9 + 1 + 5 + 6 + 4 + 3 + 8 + 7 + + + + + + + 000001BA + 5 + 3 + 2 + 1 + 000001BB + 000001B3 + 000001B5 + + + + + + + 12C601000400000001000000 + 13 + 1 + 4 + 8 + 12 + 11 + 49492A00 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 12C601000400000001000000 + -13 + -4 + -3 + -5 + -1 + -2 + + + + + + + C61200010000000401000000 + 13 + 1 + 4 + 5 + 11 + 12 + 4D4D002A + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + C61200010000000401000000 + -13 + -3 + -4 + -8 + -2 + -1 + + + + + + + 12C601000400000001010000 + 13 + 1 + 3 + 8 + 12 + 11 + 49492A00 + + + + + + + 49492A00 + 5 + 1 + 2 + 3 + + + + + 12C601000400000001010000 + -13 + -4 + -3 + -5 + -1 + -2 + + + + + + + C61200010000000401010000 + 13 + 1 + 3 + 5 + 11 + 12 + 4D4D002A + + + + + + + 4D4D002A + 5 + 2 + 1 + 3 + + + + + C61200010000000401010000 + -13 + -3 + -4 + -8 + -2 + -1 + + + + + + + 12C601000400000001020000 + 13 + 1 + 4 + 3 + 8 + 12 + 11 + 49492A00 + + + + + +