@ 260915.5

200414.1 · 5c3231af0b0833381da627c292cb23ff8be740f7

released 2.0.0 - new option -Q interactive query UI

reading declarations

Makefile.am

@@ -26,6 +26,7 @@ install-data-hook: 		 echo "| You can use the ugrep command to search files.       |"; \ 		 echo "|                                                      |"; \ 		 echo "| Some useful aliases to consider:                     |"; \+		 echo "|   alias uq     = 'ugrep --color --query'             |"; \ 		 echo "|   alias ug     = 'ugrep --color --pager'             |"; \ 		 echo "|   alias ux     = 'ugrep --color --pager -UX'         |"; \ 		 echo "|   alias uz     = 'ugrep --color --pager -z'          |"; \

Makefile.in

@@ -898,6 +898,7 @@ install-data-hook: 		 echo "| You can use the ugrep command to search files.       |"; \ 		 echo "|                                                      |"; \ 		 echo "| Some useful aliases to consider:                     |"; \+		 echo "|   alias uq     = 'ugrep --color --query'             |"; \ 		 echo "|   alias ug     = 'ugrep --color --pager'             |"; \ 		 echo "|   alias ux     = 'ugrep --color --pager -UX'         |"; \ 		 echo "|   alias uz     = 'ugrep --color --pager -z'          |"; \

README.md

@@ -23,18 +23,19 @@ search pdf and office documents using filters </div> <br> -- Unlimited pro edition-- Written in clean and efficient C++11, built for extreme speed-- Ultra fast with new algorithms, [beating](#speed) ripgrep, silver searcher, hyperscan grep, etc.+- Unlimited pro edition - free open source (BSD-3)+- Written in clean and efficient C++11, built for speed+- Ultra fast with new fuzzy match algorithms [beating](#speed) ripgrep, silver searcher, hyperscan, etc. - Multi-threaded search using high-performance lock-free job queue stealing - Multi-threaded decompression and search of decompressed streams - Optimized pattern matching (AVX, SSE2, ARM NEON/AArch64) - Optimized asynchronous IO - Compatible with the standard GNU/BSD grep command-line options - Comprehensive how-to [tutorial](#tutorial) for beginners to advanced users+- New interactive UI to enter search queries and patterns, with option -Q - Select files to search by file types, filename suffix, and/or "magic bytes" - Search archives (cpio, jar, tar, pax, zip)-- Search compressed files (.zip, .gz, .Z, .bz, .bz2, .lzma, .xz)+- Search compressed files (zip, gz, Z, bz, bz2, lzma, xz) - Search pdf, doc, docx, xls, xlxs, and more using filters - Search binary files and displays hexdumps with binary pattern matches - Search UTF-encoded files with Unicode pattern matches (by default)@@ -63,6 +64,7 @@ Table of contents - [Tutorial](#tutorial)   - [Examples](#examples)   - [Displaying helpful info](#help)+  - [Interactive search with -Q](#query)   - [Recursively list matching files with -l, -R, -r, and --depth](#recursion)   - [Search this but not that with -v, -e, -N, -f, -L, -w, -x](#not)   - [Searching ASCII, Unicode, and other encodings with --encoding](#unicode)@@ -117,7 +119,7 @@ Why use ugrep?   selected to filter files in archives with options `-g`, `-t`, `-O`, and `-M`,   respectively.  For example: -      ugrep -z -tc++ -w 'main' myprojects.tgz+      ugrep -z -tc++ -w main myprojects.tgz    looks for `main` in C++ files in the compressed tar file `myprojects.tgz`. @@ -125,7 +127,7 @@ Why use ugrep?   by file type, filename extension, file signature "magic bytes" or shebangs.   For example, to list all shell scripts in or below the working directory: -      ugrep -l -tShell ''+      ugrep -l -tShell ""    where `-l` lists matching files, `-tShell` selects shell files by file type   (i.e. shell extensions and shebangs), and the empty pattern `''` matches the@@ -160,7 +162,7 @@ Why use ugrep?        ugrep -3 -tPython -f python/imports -  where `-3` specifies recursive search up to two levels deep (`-R` gives+  where `-3` specifies recursive search up to three levels (`-R` gives   unlimited depth) while following symlinks, `-tPython` selects Python files   only (i.e. by file name extension `.py` and by Python shebangs), and the `-f`   option specifies predefined patterns to search for Python `import` statements@@ -172,7 +174,7 @@ Why use ugrep?   example to find exact matches of `main` in C/C++ source code while skipping   strings and comments that may have a match with `main` in them: -      ugrep -tc++ -nw 'main' -f c/zap_strings -f c/zap_comments+      ugrep -tc++ -nw main -f c/zap_strings -f c/zap_comments    where `-tc++` searches C/C++ source code files, `-n` shows line numbers in   the output, `-w` matches exact words (for example, `mainly` won't be@@ -181,7 +183,7 @@ Why use ugrep?   now easy to search a PHP file while zapping past any HTML between PHP code   segments: -      ugrep 'IsInjected' -f php/zap_html myfile.php+      ugrep IsInjected -f php/zap_html myfile.php  - **ugrep matches patterns across multiple lines** without a performance   penalty or requiring options.  For example:@@ -401,13 +403,15 @@ significant runtime overhead and should not be used for the final build. Binaries for Windows -------------------- -Download a .zip release from https://github.com/Genivia/ugrep/releases.+Download a .zip source code asset <https://github.com/Genivia/ugrep/releases>. -There are two Windows binaries in the .zip file: `ugrep\bin\win32\ugrep.exe`-and `ugrep\bin\win64\ugrep.exe`.  Depending on your system, add the 32 or 64-bit version to your execution path:  go to *Settings* and search for "Path" in-*Find a Setting*.  Select *environment variables* -> *Path* -> *New* and add-the directory `C:\<fill this part in>\ugrep\bin\win32`.+There are two Windows binaries in the .zip file:+- `ugrep\bin\win32\ugrep.exe`+- `ugrep\bin\win64\ugrep.exe`+Depending on your system, add the 32 or 64 bit version to your execution path:+go to *Settings* and search for "Path" in *Find a Setting*.  Select+*environment variables* -> *Path* -> *New* and add the directory `C:\<fill this+part in>\ugrep\bin\win32`.  Notes on using `ugrep.exe` from the Windows command line: - ugrep.exe expands globs such as `*.txt` and `*\dir\*`@@ -788,6 +792,84 @@ To show a list of `-t TYPES` option values:      ugrep -tlist +<a name="query"/>++### Interactive search with -Q++    -Q[DELAY], --query[=DELAY]+            Query mode: user interface to perform interactive searches.  This+            mode requires an ANSI capable terminal.  An optional DELAY argument+            may be specified to reduce or increase the response time to perform+            searches after the last key press, in increments of 100ms, where+            the default is 5 (500ms delay).  Initial patterns may be specified+            with -e PATTERN, i.e. a PATTERN argument requires option -e.  Press+            F1 or CTRL-Z to view the help screen.  No whitespace may be given+            between -Q and its argument DELAY.++This option starts a user interface to enter search patterns interactively:+- Press F1 or CTRL-Z to view a help screen and to enable or disable options.+- Press Alt with a key corresponding to a ugrep option letter or digit to+  enable or disable the ugrep option.  For example, pressing Alt-c enables+  option `-c` to count matches.  Pressing Alt-c again disables `-c`.  Options+  can be toggled with the Alt key while searching or when viewing the help+  screen.  If Alt/Meta keys are not supported (e.g. X11 xterm), then press+  CTRL-O followed by the key corresponding to the option.+- Press Enter to switch to selection mode to select lines to output when ugrep+  exits.  Normally, ugrep in query mode does not output any results unless+  results are selected.  While in selection mode, select or deselect lines with+  Enter or Del, or press A to select all results.+- Press CTRL-T to toggle colors on or off.  Normally ugrep in query mode uses+  colors and other markup to highlight the results.  When colors are turned+  off, selected results are also not colored in the output produced by ugrep+  when ugrep exits.  When colors are turned on (the default), selected results+  are colored depending on the `--color` option.+- The query engine is optimized to limit system load by performing on-demand+  searches to produce results only for the visible parts shown in the+  interface.  That is, results are shown on demand, when scrolling down and+  when exiting when all results are selected.  When the search pattern is+  modified, the previous search query is cancelled when incomplete.  This+  effectively limits the load on the system to maintain a high degree of+  responsiveness of the query engine to user input.  Because the search results+  are produced on demand, occasionally you may notice a flashing "Searching..."+  message when searching files on slower systems.+- To display results faster, specify a low `DELAY` value such as 1.  However,+  lower values may increase system load as a result of repeatedly initiating+  and cancelling searches by each key pressed.  Reducing the level of+  parallelism helps to reduce system load, i.e. with option `-J`, e.g. `-J2` to+  run 2 worker jobs at most.++To interactively search the files in the working directory and below:++    ugrep -Q++Same, but restricted to C++ files only and ignoring `.gitignore` files:++    ugrep -Q -tc++ --ignore-files++To interactively search all makefiles in the working directory and below:++    ugrep -Q -g 'Makefile*' -g 'makefile*'++Same, but for up to 2 directory levels (working and one subdirectory level):++    ugrep -Q -2 -g 'Makefile*' -g 'makefile*'++To interactively view the contents of `main.cpp` and search it, where `-y`+shows any nonmatching lines as context:++    ugrep -Q -y main.cpp++To interactively search `main.cpp`, starting with the search pattern `TODO` and+a match context of 5 lines (context can be interactively enabled and disabled,+this also overrides the default context size of 2 lines):++    ugrep -Q -C5 -e TODO main.cpp++To interactively select files from `project.zip` to decompress with `unzip`,+using selection mode (press Enter):++    unzip project.zip `zipinfo -1 project.zip | ugrep -Q`+ <a name="recursion"/>  ### Recursively list matching files with -l, -R, -r, or --depth@@ -813,10 +895,11 @@ To show a list of `-t TYPES` option values:             Recursively read all files under each directory, following symbolic             links only if they are on the command line.  When -J1 is specified,             files are searched in the same order as specified.-    --depth=NUM, -1, -2, -3, -4, -5, -6, -7, -8, -9-            Restrict recursive searches to NUM (NUM > 0) directory levels deep,-            where -1 searches the specified path without recursing into-            subdirectories.  Enables -R if -R or -r is not specified.+    --depth=[MIN,][MAX], -1, -2, -3, -4, -5, -6, -7, -8, -9+            Restrict recursive searches from MIN to MAX directory levels deep,+            where -1 (--depth=1) searches the specified path without recursing+            into subdirectories.  Note that -3-5 searches 3 to 5 levels deep.+            Enables -R if -R or -r is not specified.  To recursively list all non-empty files in the working directory, following symbolic links:@@ -941,14 +1024,14 @@ same line, like XOR:  ### Searching ASCII, Unicode, and other encodings with --encoding -    -Q ENCODING, --encoding=ENCODING+    --encoding=ENCODING             The input file encoding.  ASCII, UTF-8, UTF-16, and UTF-32 files do not require this option, assuming that UTF-16 and UTF-32 files include a UTF BOM as usual.  Other file encodings require option `--encoding=ENCODING`: -encoding               | `-Q` parameter+encoding               | parameter ---------------------- | -------------- ASCII                  | *n/a* UTF-8                  | *n/a*@@ -1325,6 +1408,11 @@ To search tarball `project.tar.gz` for C++ files with `TODO` and `FIXME` lines:      ugrep -z -tc++ -w -e 'TODO' -e 'FIXME' project.tar.gz +To search files matching the glob `*.txt` in `project.zip` for the word+`license` in any case (note that the `-g` glob argument must be quoted):++    ugrep -z -g '*.txt' -w -i 'license' project.zip+ To display and page through all C++ files in tarball `project.tgz`:      ugrep --color --pager -z -tc++ '' project.tgz@@ -1692,14 +1780,16 @@ implicit:             quote a wildcard or backslash character literally.  When GLOB             contains a `/', full pathnames are matched.  Otherwise basenames             are matched.  Note that --exclude patterns take priority over-            --include patterns.  This option may be repeated.+            --include patterns.  GLOB should be quoted to prevent shell+            globbing.  This option may be repeated.     --exclude-dir=GLOB             Exclude directories whose name matches GLOB from recursive             searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to             quote a wildcard or backslash character literally.  When GLOB             contains a `/', full pathnames are matched.  Otherwise basenames             are matched.  Note that --exclude-dir patterns take priority over-            --include-dir patterns.  This option may be repeated.+            --include-dir patterns.  GLOB should be quoted to prevent shell+            globbing.  This option may be repeated.     --exclude-from=FILE             Read the globs from FILE and skip files and directories whose name             matches one or more globs (as if specified by --exclude and@@ -1709,7 +1799,8 @@ implicit:     -g GLOB, --glob=GLOB             Search only files whose name matches GLOB, same as --include=GLOB.             When GLOB is preceded by a `!' or a `^', skip files whose name-            matches GLOB, same as --exclude=GLOB.+            matches GLOB, same as --exclude=GLOB.  GLOB should be quoted to+            prevent shell globbing.  This option may be repeated.     --ignore-files[=FILE]             Ignore files and directories specified in a FILE when encountered             in recursive searches.  The default is `.gitignore'.  Files and@@ -1722,14 +1813,16 @@ implicit:             and \ to quote a wildcard or backslash character literally.  If             GLOB contains a `/', full pathnames are matched.  Otherwise             basenames are matched.  Note that --exclude patterns take priority-            over --include patterns.  This option may be repeated.+            over --include patterns.  GLOB should be quoted to prevent shell+            globbing.  This option may be repeated.     --include-dir=GLOB             Only directories whose name matches GLOB are included in recursive             searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to             quote a wildcard or backslash character literally.  When GLOB             contains a `/', full pathnames are matched.  Otherwise basenames             are matched.  Note that --exclude-dir patterns take priority over-            --include-dir patterns.  This option may be repeated.+            --include-dir patterns.  GLOB should be quoted to prevent shell+            globbing.  This option may be repeated.     --include-from=FILE             Read the globs from FILE and search only files and directories             whose name matches one or more globs (as if specified by --include@@ -1851,15 +1944,16 @@ ignored by one or more .gitignore files, when any are present:             only.  Note that --exclude-fs mounts take priority over             --include-fs mounts.  This option may be repeated. -These options control recursive searches across file systems.  Mounted devices-and symbolic links to files and directories located on mounted file systems may-be included or excluded from recursive searches by specifying a mount point or-a pathname of any directory on the file system to specify the file system.+These options control recursive searches across file systems by comparing+device numbers.  Mounted devices and symbolic links to files and directories+located on mounted file systems may be included or excluded from recursive+searches by specifying a mount point or a pathname of any directory on the file+system to specify the applicable file system. -A list of mounted file systems is typically stored in `/etc/mtab`.+Note that a list of mounted file systems is typically stored in `/etc/mtab`.  To restrict recursive searches to the file system of the working directory-only, without crossing into other file systems:+only, without crossing into other file systems (similar to `find` option `-x`):      ugrep -Rl --include-fs=. 'xyz'  @@ -1992,8 +2086,8 @@ To display the line and column numbers of matches in XML with `--xml`:             When output is sent to the terminal, uses COMMAND to page through             the output.  The default COMMAND is `less -R'.  Enables --heading             and --line-buffered.-    --pretty-            When output is sent to the terminal, enables --color and --heading.+    --[no-]pretty+            When output is sent to the terminal, enables --color, --heading, -T.  To change the color palette, set the `GREP_COLORS` environment variable or use `--colors`.  Its value is a colon-separated list of ANSI SGR parameters that@@ -2321,10 +2415,11 @@ and `https` sites:  ### Limiting the number of matches with --depth, -m, --max-files, and --range -    --depth=NUM, -1, -2, -3, -4, -5, -6, -7, -8, -9-            Restrict recursive searches to NUM (NUM > 0) directory levels deep,+    --depth=[MIN,][MAX], -1, -2, -3, -4, -5, -6, -7, -8, -9+            Restrict recursive searches from MIN to MAX directory levels deep,             where -1 (--depth=1) searches the specified path without recursing-            into subdirectories.  Enables -R if -R or -r is not specified.+            into subdirectories.  Note that -3-5 searches 3 to 5 levels deep.+            Enables -R if -R or -r is not specified.     -m NUM, --max-count=NUM             Stop reading the input after NUM matches for each file processed.     --max-files=NUM@@ -2615,11 +2710,11 @@ in markdown:                   ence-recurse', read all files under each directory, recursively,                   following  symbolic links.  This is equivalent to the -R option. -           --depth=NUM, -1, -2, -3, -4, -5, -6, -7, -8, -9-                  Restrict recursive searches to NUM (NUM >  0)  directory  levels+           --depth=[MIN,][MAX], -1, -2, -3, -4, -5, -6, -7, -8, -9+                  Restrict recursive searches from MIN  to  MAX  directory  levels                   deep,  where  -1 (--depth=1) searches the specified path without-                  recursing into subdirectories.  Enables -R if -R or  -r  is  not-                  specified.+                  recursing into subdirectories.  Note that -3-5 searches 3  to  5+                  levels deep.  Enables -R if -R or -r is not specified.             -E, --extended-regexp                   Interpret  patterns as extended regular expressions (EREs). This@@ -2634,13 +2729,26 @@ in markdown:                   (`-'),  to  specify  a pattern after option -f or after the FILE                   arguments. +           --encoding=ENCODING+                  The encoding  format  of  the  input,  where  ENCODING  can  be:+                  `binary',  `ASCII',  `UTF-8',  `UTF-16', `UTF-16BE', `UTF-16LE',+                  `UTF-32',  `UTF-32BE',   `UTF-32LE',   `LATIN1',   `ISO-8859-1',+                  `ISO-8869-2',    `ISO-8869-3',    `ISO-8869-4',    `ISO-8869-5',+                  `ISO-8869-6',    `ISO-8869-7',    `ISO-8869-8',    `ISO-8869-9',+                  `ISO-8869-10',   `ISO-8869-11',   `ISO-8869-13',  `ISO-8869-14',+                  `ISO-8869-15',  `ISO-8869-16',  `MAC',   `MACROMAN',   `EBCDIC',+                  `CP437',   `CP850',   `CP858',   `CP1250',  `CP1251',  `CP1252',+                  `CP1253',  `CP1254',  `CP1255',  `CP1256',  `CP1257',  `CP1258',+                  `KOI8-R', `KOI8-U', `KOI8-RU'.+            --exclude=GLOB                   Skip files whose name matches GLOB using wildcard matching, same                   as -g !GLOB.  GLOB can use **, *, ?, and [...] as wildcards, and-                  \ to quote a wildcard or backslash  character  literally.   When-                  GLOB  contains  a  `/',  full  pathnames are matched.  Otherwise+                  \  to  quote  a wildcard or backslash character literally.  When+                  GLOB contains a `/',  full  pathnames  are  matched.   Otherwise                   basenames are matched.  Note that --exclude patterns take prior--                  ity over --include patterns.  This option may be repeated.+                  ity over --include patterns.  GLOB should be quoted  to  prevent+                  shell globbing.  This option may be repeated.             --exclude-dir=GLOB                   Exclude  directories  whose  name  matches  GLOB  from recursive@@ -2648,50 +2756,51 @@ in markdown:                   to quote a wildcard or backslash character literally.  When GLOB                   contains a `/', full pathnames are matched.  Otherwise basenames                   are  matched.   Note  that  --exclude-dir patterns take priority-                  over --include-dir patterns.  This option may be repeated.+                  over --include-dir patterns.  GLOB should be quoted  to  prevent+                  shell globbing.  This option may be repeated.             --exclude-from=FILE-                  Read the globs from FILE and skip files  and  directories  whose+                  Read  the  globs  from FILE and skip files and directories whose                   name matches one or more globs (as if specified by --exclude and-                  --exclude-dir).  Lines starting with a `#' and  empty  lines  in-                  FILE  are  ignored.  When FILE is a `-', standard input is read.+                  --exclude-dir).   Lines  starting  with a `#' and empty lines in+                  FILE are ignored.  When FILE is a `-', standard input  is  read.                   This option may be repeated.             --exclude-fs=MOUNTS-                  Exclude  file  systems  specified  by  MOUNTS   from   recursive-                  searches,  MOUNTS  is  a comma-separated list of mount points or-                  pathnames  of  directories   on   file   systems.    Note   that-                  --exclude-fs  mounts  take  priority  over  --include-fs mounts.+                  Exclude   file   systems  specified  by  MOUNTS  from  recursive+                  searches, MOUNTS is a comma-separated list of  mount  points  or+                  pathnames   of   directories   on   file   systems.   Note  that+                  --exclude-fs mounts  take  priority  over  --include-fs  mounts.                   This option may be repeated.             -F, --fixed-strings-                  Interpret pattern as a set of fixed strings, separated  by  new--                  lines,  any  of which is to be matched.  This makes ugrep behave+                  Interpret  pattern  as a set of fixed strings, separated by new-+                  lines, any of which is to be matched.  This makes  ugrep  behave                   as fgrep.  If PATTERN or -e PATTERN is also specified, then this                   option does not apply to -f FILE patterns.             -f FILE, --file=FILE-                  Read  newline-separated patterns from FILE.  White space in pat-+                  Read newline-separated patterns from FILE.  White space in  pat-                   terns is significant.  Empty lines in FILE are ignored.  If FILE-                  does  not  exist,  the GREP_PATH environment variable is used as-                  path  to   FILE.    If   that   fails,   looks   for   FILE   in-                  /usr/local/share/ugrep/patterns.   When  FILE is a `-', standard+                  does not exist, the GREP_PATH environment variable  is  used  as+                  path   to   FILE.    If   that   fails,   looks   for   FILE  in+                  /usr/local/share/ugrep/patterns.  When FILE is a  `-',  standard                   input is read.  Empty files contain no patterns; thus nothing is                   matched.  This option may be repeated.             --filter=COMMANDS                   Filter files through the specified COMMANDS first before search-                   ing.   COMMANDS  is  a  comma-separated  list  of  `exts:command-                  [option  ...]',  where `exts' is a comma-separated list of file--                  name extensions and `command' is a filter utility.   The  filter-                  utility  should  read  from standard input and write to standard+                  [option ...]', where `exts' is a comma-separated list  of  file-+                  name  extensions  and `command' is a filter utility.  The filter+                  utility should read from standard input and  write  to  standard                   output.  Files matching one of `exts' are filtered.  When `exts'                   is `*', files with non-matching extensions are filtered.  One or-                  more `option' separated by spacing may be specified,  which  are-                  passed  verbatim to the command.  A `%' as `option' expands into-                  the pathname to search.  For example, --filter='pdf:pdftotext  %-                  -'  searches PDF files.  The `%' expands into a `-' when search--                  ing standard input.  Option --label=.ext may be used to  specify+                  more  `option'  separated by spacing may be specified, which are+                  passed verbatim to the command.  A `%' as `option' expands  into+                  the  pathname to search.  For example, --filter='pdf:pdftotext %+                  -' searches PDF files.  The `%' expands into a `-' when  search-+                  ing  standard input.  Option --label=.ext may be used to specify                   extension `ext' when searching standard input.             --format=FORMAT@@ -2706,21 +2815,23 @@ in markdown:                   behave as traditional grep.             -g GLOB, --glob=GLOB-                  Search   only   files   whose   name   matches   GLOB,  same  as-                  --include=GLOB.  When GLOB is preceded by a `!' or a  `^',  skip-                  files whose name matches GLOB, same as --exclude=GLOB.+                  Search  only  files   whose   name   matches   GLOB,   same   as+                  --include=GLOB.   When  GLOB is preceded by a `!' or a `^', skip+                  files whose name matches GLOB,  same  as  --exclude=GLOB.   GLOB+                  should  be quoted to prevent shell globbing.  This option may be+                  repeated.             --group-separator[=SEP]                   Use SEP as a group separator for context options -A, -B, and -C.                   The default is a double hyphen (`--').             -H, --with-filename-                  Always print the  filename  with  output  lines.   This  is  the+                  Always  print  the  filename  with  output  lines.   This is the                   default when there is more than one file to search.             -h, --no-filename-                  Never  print  filenames  with output lines.  This is the default-                  when there is only one file (or only standard input) to  search.+                  Never print filenames with output lines.  This  is  the  default+                  when  there is only one file (or only standard input) to search.             --heading                   Group matches per file.  Adds a heading and a line break between@@ -2729,69 +2840,72 @@ in markdown:            --help Print a help message.             --hexdump=[1-8][b][c][h]-                  Output matches in 1 to 8 columns of 8  hexadecimal  bytes.   The-                  default  is  2 columns or 16 bytes per line.  Option `b' removes-                  all space breaks,  `c'  hides  the  character  column,  and  `h'-                  removes  the  hex  spacing  only.  Enables -X if -W or -X is not+                  Output  matches  in  1 to 8 columns of 8 hexadecimal bytes.  The+                  default is 2 columns or 16 bytes per line.  Option  `b'  removes+                  all  space  breaks,  `c'  hides  the  character  column, and `h'+                  removes the hex spacing only.  Enables -X if -W  or  -X  is  not                   specified. -           -I     Ignore matches in binary files.  This option  is  equivalent  to+           --[no-]hidden+                  Do (not) search hidden files and directories.++           -I     Ignore  matches  in  binary files.  This option is equivalent to                   the --binary-files=without-match option.             -i, --ignore-case-                  Perform  case  insensitive  matching.  By default, ugrep is case+                  Perform case insensitive matching.  By default,  ugrep  is  case                   sensitive.  This option applies to ASCII letters only.             --ignore-files[=FILE]-                  Ignore files and directories matching the  globs  in  each  FILE-                  when  encountered  in  recursive  searches.  The default FILE is-                  `.gitignore'.  Matching files and  directories  located  in  the+                  Ignore  files  and  directories  matching the globs in each FILE+                  when encountered in recursive searches.   The  default  FILE  is+                  `.gitignore'.   Matching  files  and  directories located in the                   directory tree rooted at a FILE's location are ignored by tempo--                  rarily overriding the --exclude and --exclude-dir  globs.   Note+                  rarily  overriding  the --exclude and --exclude-dir globs.  Note                   that files and directories specified as ugrep FILE arguments are                   not ignored.  This option may be repeated.             --include=GLOB-                  Search only files whose name matches GLOB using wildcard  match-+                  Search  only files whose name matches GLOB using wildcard match-                   ing, same as -g GLOB.  GLOB can use **, *, ?, and [...] as wild--                  cards, and \ to quote a wildcard or backslash  character  liter--                  ally.   When  GLOB  contains  a `/', full pathnames are matched.-                  Otherwise basenames are matched.  Note that  --exclude  patterns-                  take  priority  over  --include  patterns.   This  option may be-                  repeated.+                  cards,  and  \ to quote a wildcard or backslash character liter-+                  ally.  When GLOB contains a `/',  full  pathnames  are  matched.+                  Otherwise  basenames  are matched.  Note that --exclude patterns+                  take priority over --include patterns.  GLOB should be quoted to+                  prevent shell globbing.  This option may be repeated.             --include-dir=GLOB-                  Only directories whose name matches GLOB are included in  recur--                  sive  searches.   GLOB can use **, *, ?, and [...] as wildcards,-                  and \ to quote a  wildcard  or  backslash  character  literally.+                  Only  directories whose name matches GLOB are included in recur-+                  sive searches.  GLOB can use **, *, ?, and [...]  as  wildcards,+                  and  \  to  quote  a  wildcard or backslash character literally.                   When GLOB contains a `/', full pathnames are matched.  Otherwise-                  basenames are matched.  Note that  --exclude-dir  patterns  take-                  priority  over  --include-dir  patterns.   This  option  may  be-                  repeated.+                  basenames  are  matched.   Note that --exclude-dir patterns take+                  priority over --include-dir patterns.  GLOB should be quoted  to+                  prevent shell globbing.  This option may be repeated.             --include-from=FILE-                  Read the globs from FILE and search only files  and  directories-                  whose  name  matches  one  or  more  globs  (as  if specified by-                  --include and --include-dir).  Lines starting  with  a  `#'  and-                  empty  lines  in FILE are ignored.  When FILE is a `-', standard+                  Read  the  globs from FILE and search only files and directories+                  whose name matches  one  or  more  globs  (as  if  specified  by+                  --include  and  --include-dir).   Lines  starting with a `#' and+                  empty lines in FILE are ignored.  When FILE is a  `-',  standard                   input is read.  This option may be repeated.             --include-fs=MOUNTS-                  Only file systems specified by MOUNTS are included in  recursive-                  searches.   MOUNTS  is a comma-separated list of mount points or-                  pathnames  of  directories  on  file  systems.    --include-fs=.-                  restricts  recursive  searches to the file system of the working-                  directory only.  Note that  --exclude-fs  mounts  take  priority+                  Only  file systems specified by MOUNTS are included in recursive+                  searches.  MOUNTS is a comma-separated list of mount  points  or+                  pathnames   of  directories  on  file  systems.   --include-fs=.+                  restricts recursive searches to the file system of  the  working+                  directory  only.   Note  that  --exclude-fs mounts take priority                   over --include-fs mounts.  This option may be repeated.             -J NUM, --jobs=NUM-                  Specifies  the  number  of  threads spawned to search files.  By-                  default, or when NUM is specified as zero, an optimum number  of+                  Specifies the number of threads spawned  to  search  files.   By+                  default,  or when NUM is specified as zero, an optimum number of                   threads is spawned to search files simultaneously.  -J1 disables                   threading: files are searched in the same order as specified.             -j, --smart-case-                  Perform case insensitive matching unless a pattern  contains  an+                  Perform  case  insensitive matching unless a pattern contains an                   upper case letter.  This option applies to ASCII letters only.             --json Output file matches in JSON.  If -H, -n, -k, or -b is specified,@@ -2801,39 +2915,39 @@ in markdown:                   Start searching at line FIRST, stop at line LAST when specified.             -k, --column-number-                  The column number of a matched pattern is displayed in front  of-                  the  respective  matched  line,  starting at column 1.  Tabs are+                  The  column number of a matched pattern is displayed in front of+                  the respective matched line, starting at  column  1.   Tabs  are                   expanded when columns are counted, see also option --tabs.             -L, --files-without-match-                  Only the names of files not containing selected lines are  writ--                  ten  to  standard  output.   Pathnames  are listed once per file+                  Only  the names of files not containing selected lines are writ-+                  ten to standard output.  Pathnames  are  listed  once  per  file                   searched.   If  the  standard  input  is  searched,  the  string                   ``(standard input)'' is written.             -l, --files-with-matches                   Only the names of files containing selected lines are written to-                  standard output.  ugrep will only search a file  until  a  match-                  has  been  found,  making  searches  potentially less expensive.-                  Pathnames are listed once per file searched.   If  the  standard+                  standard  output.   ugrep  will only search a file until a match+                  has been found,  making  searches  potentially  less  expensive.+                  Pathnames  are  listed  once per file searched.  If the standard                   input is searched, the string ``(standard input)'' is written.             --label=LABEL-                  Displays  the LABEL value when input is read from standard input-                  where a file name would normally be printed in the output.   The+                  Displays the LABEL value when input is read from standard  input+                  where  a file name would normally be printed in the output.  The                   default value is `(standard input)'.             --line-buffered                   Force output to be line buffered instead of block buffered.             -M MAGIC, --file-magic=MAGIC-                  Only  files  matching  the signature pattern MAGIC are searched.-                  The signature "magic bytes" at the start of a file are  compared-                  to  the  MAGIC  regex  pattern.  When matching, the file will be-                  searched.  When MAGIC is preceded by a `!' or a `^', skip  files+                  Only files matching the signature pattern  MAGIC  are  searched.+                  The  signature "magic bytes" at the start of a file are compared+                  to the MAGIC regex pattern.  When matching,  the  file  will  be+                  searched.   When MAGIC is preceded by a `!' or a `^', skip files                   with matching MAGIC signatures.  This option may be repeated and-                  may be combined with options -O and -t  to  expand  the  search.-                  Every  file  on  the search path is read, making searches poten-+                  may  be  combined  with  options -O and -t to expand the search.+                  Every file on the search path is read,  making  searches  poten-                   tially more expensive.             -m NUM, --max-count=NUM@@ -2843,35 +2957,33 @@ in markdown:                   Match all input.  Same as specifying an empty pattern to search.             --max-files=NUM-                  Restrict  the  number of files matched to NUM.  Note that --sort-                  or -J1 may be  specified  to  produce  replicable  results.   If+                  Restrict the number of files matched to NUM.  Note  that  --sort+                  or  -J1  may  be  specified  to  produce replicable results.  If                   --sort is specified, the number of threads spawned is limited to                   NUM. +           --[no-]mmap[=MAX]+                  Do  (not)  use  memory maps to search files.  By default, memory+                  maps are used under certain conditions to  improve  performance.+                  When MAX is specified, use up to MAX mmap memory per thread.+            -N PATTERN, --neg-regexp=PATTERN-                  Specify a negative PATTERN used during the search of the  input:-                  an  input  line is selected only if it matches any of the speci--                  fied patterns when PATTERN does not match.  Same as  -e  (?^PAT--                  TERN).   Negative  PATTERN  matches are removed before any other-                  specified patterns are matched.  Note that longer patterns  take-                  precedence  over shorter patterns.  This option may be repeated.+                  Specify  a negative PATTERN used during the search of the input:+                  an input line is selected only if it matches any of  the  speci-+                  fied  patterns  when PATTERN does not match.  Same as -e (?^PAT-+                  TERN).  Negative PATTERN matches are removed  before  any  other+                  specified  patterns are matched.  Note that longer patterns take+                  precedence over shorter patterns.  This option may be  repeated.             -n, --line-number-                  Each output line is preceded by its relative line number in  the-                  file,  starting at line 1.  The line number counter is reset for+                  Each  output line is preceded by its relative line number in the+                  file, starting at line 1.  The line number counter is reset  for                   each file processed.             --no-group-separator-                  Removes the group separator line from  the  output  for  context+                  Removes  the  group  separator  line from the output for context                   options -A, -B, and -C. -           --[no-]hidden-                  Do (not) search hidden files and directories.--           --[no-]mmap-                  Do  (not)  use  memory maps to search files.  By default, memory-                  maps are used under certain conditions to improve performance.-            -O EXTENSIONS, --file-extensions=EXTENSIONS                   Search only files whose filename extensions match the  specified                   comma-separated  list  of  EXTENSIONS, same as --include='*.ext'@@ -2895,7 +3007,7 @@ in markdown:                   each file processed.             -P, --perl-regexp-                  Interpret PATTERN as a Perl regular expression.+                  Interpret PATTERN as a Perl regular expression using PCRE2.             -p, --no-dereference                   If  -R  or -r is specified, no symbolic links are followed, even@@ -2906,21 +3018,19 @@ in markdown:                   through  the output.  The default COMMAND is `less -R'.  Enables                   --heading and --line-buffered. -           --pretty-                  When output is sent to a terminal, enables --color  and  --head--                  ing.+           --[no-]pretty+                  When output is sent to a terminal, enables  --color,  --heading,+                  -T. -           -Q ENCODING, --encoding=ENCODING-                  The  encoding  format  of  the  input,  where  ENCODING  can be:-                  `binary', `ASCII', `UTF-8',  `UTF-16',  `UTF-16BE',  `UTF-16LE',-                  `UTF-32',   `UTF-32BE',   `UTF-32LE',   `LATIN1',  `ISO-8859-1',-                  `ISO-8869-2',    `ISO-8869-3',    `ISO-8869-4',    `ISO-8869-5',-                  `ISO-8869-6',    `ISO-8869-7',    `ISO-8869-8',    `ISO-8869-9',-                  `ISO-8869-10',  `ISO-8869-11',   `ISO-8869-13',   `ISO-8869-14',-                  `ISO-8869-15',   `ISO-8869-16',   `MAC',  `MACROMAN',  `EBCDIC',-                  `CP437',  `CP850',  `CP858',   `CP1250',   `CP1251',   `CP1252',-                  `CP1253',  `CP1254',  `CP1255',  `CP1256',  `CP1257',  `CP1258',-                  `KOI8-R', `KOI8-U', `KOI8-RU'.+           -Q[DELAY], --query[=DELAY]+                  Query  mode:  user  interface  to  perform interactive searches.+                  This mode requires an ANSI capable terminal.  An optional  DELAY+                  argument  may  be  specified  to reduce or increase the response+                  time to perform searches after the last key press, in increments+                  of  100ms,  where  the default is 5 (500ms delay).  Initial pat-+                  terns may be specified with -e PATTERN, i.e. a PATTERN  argument+                  requires option -e.  Press F1 or CTRL-Z to view the help screen.+                  No whitespace may be given between -Q and its argument DELAY.             -q, --quiet, --silent                   Quiet mode: suppress all output.  ugrep will only search until a@@ -3461,7 +3571,7 @@ in markdown:                   $ ugrep -Rl '' --ignore-files             List  all files containing a RPM signature, located in the `rpm' direc--           tory and recursively below up to two levels deeper:+           tory and recursively below up to two levels deeper (3 levels):                    $ ugrep -3 -l -tRpm '' rpm/ @@ -3485,7 +3595,7 @@ in markdown:   -    ugrep 1.8.1                     March 20, 2020                        UGREP(1)+    ugrep 2.0.0                     April 14, 2020                        UGREP(1)  <a name="patterns"/> 

bin/linux/ugrep

Binary file changed

bin/macosx/ugrep

Binary file changed

bin/win32/ugrep.exe

Binary file changed

bin/win64/ugrep.exe

Binary file changed

build.sh

@@ -27,12 +27,10 @@ echo echo "make -j clean all" echo -make clean- if ! make -j ; then-  echo "Failed to build ugrep, please open an issue at:"-  echo "https://github.com/Genivia/ugrep/issues"-  exit 1+echo "Failed to build ugrep, please open an issue at:"+echo "https://github.com/Genivia/ugrep/issues"+exit 1 fi  echo@@ -40,7 +38,18 @@ echo "make test" echo  if ! make test ; then-  echo "Testing failed, please open an issue at:"-  echo "https://github.com/Genivia/ugrep/issues"-  exit 1+echo "Testing failed, please open an issue at:"+echo "https://github.com/Genivia/ugrep/issues"+exit 1 fi++echo+echo "ugrep was successfully built and tested:"+ls -l bin/ugrep+echo+echo "Copy bin/ugrep to a bin/ location in your PATH"+echo+echo "To install ugrep and man page on your system, execute:"+echo "sudo make install"+echo+

configure

@@ -6632,7 +6632,7 @@ PLATFORM=${host}  # Mac OS X has slow memory mapped files so we're disabling mmap case "$PLATFORM" in-  *-apple-*)    EXTRA_CFLAGS="-DWITH_NO_MMAP ${EXTRA_CFLAGS}"+  *-apple-*)    EXTRA_CFLAGS="-DWITH_NO_MMAP -DWITH_MACOS_META_KEY ${EXTRA_CFLAGS}"                 ;; esac 

configure.ac

@@ -39,7 +39,7 @@ AC_SUBST(PLATFORM)  # Mac OS X has slow memory mapped files so we're disabling mmap case "$PLATFORM" in-  *-apple-*)    EXTRA_CFLAGS="-DWITH_NO_MMAP ${EXTRA_CFLAGS}"+  *-apple-*)    EXTRA_CFLAGS="-DWITH_NO_MMAP -DWITH_MACOS_META_KEY ${EXTRA_CFLAGS}"                 ;; esac 

lib/matcher.cpp

@@ -61,6 +61,13 @@ namespace reflex { #if defined(HAVE_AVX512BW) || defined(HAVE_AVX) || defined(HAVE_SSE2)  #ifdef _MSC_VER+#pragma intrinsic(_BitScanForward)+inline uint32_t ctz(uint32_t x)+{+  unsigned long r;+  _BitScanForward(&r, x);+  return r;+} #ifdef _WIN64 #pragma intrinsic(_BitScanForward64) inline uint32_t ctzl(uint64_t x)@@ -70,22 +77,15 @@ inline uint32_t ctzl(uint64_t x)   return r; } #endif-#pragma intrinsic(_BitScanForward)+#else inline uint32_t ctz(uint32_t x) {-  unsigned long r;-  _BitScanForward(&r, x);-  return r;+  return __builtin_ctz(x); }-#else inline uint32_t ctzl(uint64_t x) {   return __builtin_ctzl(x); }-inline uint32_t ctz(uint32_t x)-{-  return __builtin_ctz(x);-} #endif  uint64_t Matcher::get_HW()

man.sh

@@ -56,6 +56,7 @@ src/ugrep --help \   -e 's/\([^-0-9A-Za-z_]\)\(-.\)/\1\\fB\2\\fR/g' \   -e 's/^\(-.\) \([!A-Z]\{1,\}\)/\\fB\1\\fR \\fI\2\\fR/g' \   -e 's/^\(-.\)/\\fB\1\\fR/g' \+  -e 's/\[\([-A-Z]\{1,\}\),\]\[\([-A-Z]\{1,\}\)\]/[\\fI\1\\fR,][\\fI\2\\fR]/g' \   -e 's/\[\([-A-Z]\{1,\}\)\]/[\\fI\1\\fR]/g' \   -e 's/\[,\([-A-Z]\{1,\}\)\]/[,\\fI\1\\fR]/g' \   -e 's/\[=\([-A-Z]\{1,\}\)\]/[=\\fI\1\\fR]/g' \@@ -428,7 +429,7 @@ List all files that are not ignored by one or more `.gitignore': $ ugrep -Rl '' --ignore-files .PP List all files containing a RPM signature, located in the `rpm' directory and-recursively below up to two levels deeper:+recursively below up to two levels deeper (3 levels): .IP $ ugrep -3 -l -tRpm '' rpm/ .PP

man/ugrep.1

@@ -1,4 +1,4 @@-.TH UGREP "1" "March 20, 2020" "ugrep 1.8.1" "User Commands"+.TH UGREP "1" "April 14, 2020" "ugrep 2.0.0" "User Commands" .SH NAME \fBugrep\fR -- universal file pattern searcher .SH SYNOPSIS@@ -115,10 +115,11 @@ option.  If ACTION is `dereference\-recurse', read all files under each directory, recursively, following symbolic links.  This is equivalent to the \fB\-R\fR option. .TP-\fB\-\-depth\fR=\fINUM\fR, \fB\-1\fR, \fB\-2\fR, \fB\-3\fR, \fB\-4\fR, \fB\-5\fR, \fB\-6\fR, \fB\-7\fR, \fB\-8\fR, \fB\-9\fR-Restrict recursive searches to NUM (NUM > 0) directory levels deep,+\fB\-\-depth\fR=[\fIMIN\fR,][\fIMAX\fR], \fB\-1\fR, \fB\-2\fR, \fB\-3\fR, \fB\-4\fR, \fB\-5\fR, \fB\-6\fR, \fB\-7\fR, \fB\-8\fR, \fB\-9\fR+Restrict recursive searches from MIN to MAX directory levels deep, where \fB\-1\fR (\fB\-\-depth\fR=1) searches the specified path without recursing-into subdirectories.  Enables \fB\-R\fR if \fB\-R\fR or \fB\-r\fR is not specified.+into subdirectories.  Note that \fB\-3\fR\-5 searches 3 to 5 levels deep.+Enables \fB\-R\fR if \fB\-R\fR or \fB\-r\fR is not specified. .TP \fB\-E\fR, \fB\-\-extended\-regexp\fR Interpret patterns as extended regular expressions (EREs). This is@@ -132,13 +133,28 @@ This option is most useful when multiple \fB\-e\fR options are used to specify multiple patterns, when a pattern begins with a dash (`\fB\-'\fR), to specify a pattern after option \fB\-f\fR or after the FILE arguments. .TP+\fB\-\-encoding\fR=\fIENCODING\fR+The encoding format of the input, where ENCODING can be:+`binary', `ASCII', `UTF\-8', `UTF\-16',+`UTF\-16BE', `UTF\-16LE', `UTF\-32', `UTF\-32BE',+`UTF\-32LE', `LATIN1', `ISO\-8859\-1', `ISO\-8869\-2',+`ISO\-8869\-3', `ISO\-8869\-4', `ISO\-8869\-5', `ISO\-8869\-6',+`ISO\-8869\-7', `ISO\-8869\-8', `ISO\-8869\-9', `ISO\-8869\-10',+`ISO\-8869\-11', `ISO\-8869\-13', `ISO\-8869\-14', `ISO\-8869\-15',+`ISO\-8869\-16', `MAC', `MACROMAN', `EBCDIC',+`CP437', `CP850', `CP858', `CP1250',+`CP1251', `CP1252', `CP1253', `CP1254',+`CP1255', `CP1256', `CP1257', `CP1258',+`KOI8\-R', `KOI8\-U', `KOI8\-RU'.+.TP \fB\-\-exclude\fR=\fIGLOB\fR Skip files whose name matches GLOB using wildcard matching, same as \fB\-g\fR \fI!GLOB\fR.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to quote a wildcard or backslash character literally.  When GLOB contains a `/', full pathnames are matched.  Otherwise basenames are matched.  Note that \fB\-\-exclude\fR patterns take priority over-\fB\-\-include\fR patterns.  This option may be repeated.+\fB\-\-include\fR patterns.  GLOB should be quoted to prevent shell+globbing.  This option may be repeated. .TP \fB\-\-exclude\-dir\fR=\fIGLOB\fR Exclude directories whose name matches GLOB from recursive@@ -146,7 +162,8 @@ searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to quote a wildcard or backslash character literally.  When GLOB contains a `/', full pathnames are matched.  Otherwise basenames are matched.  Note that \fB\-\-exclude\-dir\fR patterns take priority over-\fB\-\-include\-dir\fR patterns.  This option may be repeated.+\fB\-\-include\-dir\fR patterns.  GLOB should be quoted to prevent shell+globbing.  This option may be repeated. .TP \fB\-\-exclude\-from\fR=\fIFILE\fR Read the globs from FILE and skip files and directories whose name@@ -203,7 +220,8 @@ behave as traditional grep. \fB\-g\fR \fIGLOB\fR, \fB\-\-glob\fR=\fIGLOB\fR Search only files whose name matches GLOB, same as \fB\-\-include\fR=\fIGLOB\fR. When GLOB is preceded by a `!' or a `^', skip files whose name-matches GLOB, same as \fB\-\-exclude\fR=\fIGLOB\fR.+matches GLOB, same as \fB\-\-exclude\fR=\fIGLOB\fR.  GLOB should be quoted to+prevent shell globbing.  This option may be repeated. .TP \fB\-\-group\-separator[\fR=\fISEP\fR] Use SEP as a group separator for context options \fB\-A\fR, \fB\-B\fR, and \fB\-C\fR.@@ -230,6 +248,9 @@ default is 2 columns or 16 bytes per line.  Option `b' removes all space breaks, `c' hides the character column, and `h' removes the hex spacing only.  Enables \fB\-X\fR if \fB\-W\fR or \fB\-X\fR is not specified. .TP+\fB\-\-[no\-]hidden\fR+Do (not) search hidden files and directories.+.TP \fB\-I\fR Ignore matches in binary files.  This option is equivalent to the \fB\-\-binary\-files\fR=without\-match option.@@ -253,7 +274,8 @@ same as \fB\-g\fR \fIGLOB\fR.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to quote a wildcard or backslash character literally.  When GLOB contains a `/', full pathnames are matched.  Otherwise basenames are matched.  Note that \fB\-\-exclude\fR patterns take priority-over \fB\-\-include\fR patterns.  This option may be repeated.+over \fB\-\-include\fR patterns.  GLOB should be quoted to prevent shell+globbing.  This option may be repeated. .TP \fB\-\-include\-dir\fR=\fIGLOB\fR Only directories whose name matches GLOB are included in recursive@@ -261,7 +283,8 @@ searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to quote a wildcard or backslash character literally.  When GLOB contains a `/', full pathnames are matched.  Otherwise basenames are matched.  Note that \fB\-\-exclude\-dir\fR patterns take priority over-\fB\-\-include\-dir\fR patterns.  This option may be repeated.+\fB\-\-include\-dir\fR patterns.  GLOB should be quoted to prevent shell+globbing.  This option may be repeated. .TP \fB\-\-include\-from\fR=\fIFILE\fR Read the globs from FILE and search only files and directories@@ -341,6 +364,11 @@ Restrict the number of files matched to NUM.  Note that \fB\-\-sort\fR or \fB\-J\fR1 may be specified to produce replicable results.  If \fB\-\-sort\fR is specified, the number of threads spawned is limited to NUM. .TP+\fB\-\-[no\-]mmap[\fR=\fIMAX\fR]+Do (not) use memory maps to search files.  By default, memory maps+are used under certain conditions to improve performance.  When MAX+is specified, use up to MAX mmap memory per thread.+.TP \fB\-N\fR \fIPATTERN\fR, \fB\-\-neg\-regexp\fR=\fIPATTERN\fR Specify a negative PATTERN used during the search of the input: an input line is selected only if it matches any of the specified@@ -358,13 +386,6 @@ each file processed. Removes the group separator line from the output for context options \fB\-A\fR, \fB\-B\fR, and \fB\-C\fR. .TP-\fB\-\-[no\-]hidden\fR-Do (not) search hidden files and directories.-.TP-\fB\-\-[no\-]mmap\fR-Do (not) use memory maps to search files.  By default, memory maps-are used under certain conditions to improve performance.-.TP \fB\-O\fR \fIEXTENSIONS\fR, \fB\-\-file\-extensions\fR=\fIEXTENSIONS\fR Search only files whose filename extensions match the specified comma\-separated list of EXTENSIONS, same as \fB\-\-include\fR='*.ext' for@@ -386,7 +407,7 @@ displaying the match.  The line number counter is reset for each file processed. .TP \fB\-P\fR, \fB\-\-perl\-regexp\fR-Interpret PATTERN as a Perl regular expression.+Interpret PATTERN as a Perl regular expression using PCRE2. .TP \fB\-p\fR, \fB\-\-no\-dereference\fR If \fB\-R\fR or \fB\-r\fR is specified, no symbolic links are followed, even when@@ -397,22 +418,18 @@ When output is sent to the terminal, uses COMMAND to page through the output.  The default COMMAND is `less \fB\-R\fR'.  Enables \fB\-\-heading\fR and \fB\-\-line\-buffered\fR. .TP-\fB\-\-pretty\fR-When output is sent to a terminal, enables \fB\-\-color\fR and \fB\-\-heading\fR.+\fB\-\-[no\-]pretty\fR+When output is sent to a terminal, enables \fB\-\-color\fR, \fB\-\-heading\fR, \fB\-T\fR. .TP-\fB\-Q\fR \fIENCODING\fR, \fB\-\-encoding\fR=\fIENCODING\fR-The encoding format of the input, where ENCODING can be:-`binary', `ASCII', `UTF\-8', `UTF\-16',-`UTF\-16BE', `UTF\-16LE', `UTF\-32', `UTF\-32BE',-`UTF\-32LE', `LATIN1', `ISO\-8859\-1', `ISO\-8869\-2',-`ISO\-8869\-3', `ISO\-8869\-4', `ISO\-8869\-5', `ISO\-8869\-6',-`ISO\-8869\-7', `ISO\-8869\-8', `ISO\-8869\-9', `ISO\-8869\-10',-`ISO\-8869\-11', `ISO\-8869\-13', `ISO\-8869\-14', `ISO\-8869\-15',-`ISO\-8869\-16', `MAC', `MACROMAN', `EBCDIC',-`CP437', `CP850', `CP858', `CP1250',-`CP1251', `CP1252', `CP1253', `CP1254',-`CP1255', `CP1256', `CP1257', `CP1258',-`KOI8\-R', `KOI8\-U', `KOI8\-RU'.+\fB\-Q\fR[\fIDELAY\fR], \fB\-\-query[\fR=\fIDELAY\fR]+Query mode: user interface to perform interactive searches.  This+mode requires an ANSI capable terminal.  An optional DELAY argument+may be specified to reduce or increase the response time to perform+searches after the last key press, in increments of 100ms, where+the default is 5 (500ms delay).  Initial patterns may be specified+with \fB\-e\fR \fIPATTERN\fR, i.e. a PATTERN argument requires option \fB\-e\fR.  Press+F1 or CTRL\-Z to view the help screen.  No whitespace may be given+between \fB\-Q\fR and its argument DELAY. .TP \fB\-q\fR, \fB\-\-quiet\fR, \fB\-\-silent\fR Quiet mode: suppress all output.  ugrep will only search until a@@ -925,7 +942,7 @@ List all files that are not ignored by one or more `.gitignore': $ ugrep -Rl '' --ignore-files .PP List all files containing a RPM signature, located in the `rpm' directory and-recursively below up to two levels deeper:+recursively below up to two levels deeper (3 levels): .IP $ ugrep -3 -l -tRpm '' rpm/ .PP

src/Makefile.am

@@ -1,4 +1,4 @@ bin_PROGRAMS   = ugrep ugrep_CPPFLAGS = -I$(top_srcdir)/include $(EXTRA_CFLAGS) $(SIMD_FLAGS) $(PTHREAD_CFLAGS) -DPLATFORM=\"$(PLATFORM)\" -DGREP_PATH=\"$(GREP_PATH)\" -DWITH_NO_INDENT-ugrep_SOURCES  = ugrep.cpp glob.cpp glob.hpp zstream.hpp zopen.c zopen.h+ugrep_SOURCES  = ugrep.cpp query.cpp query.hpp vkey.cpp vkey.hpp screen.cpp screen.hpp glob.cpp glob.hpp zstream.hpp zopen.c zopen.h ugrep_LDADD    = $(PTHREAD_LIBS) $(top_srcdir)/lib/libreflex.a

src/Makefile.in

@@ -108,8 +108,9 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS)-am_ugrep_OBJECTS = ugrep-ugrep.$(OBJEXT) ugrep-glob.$(OBJEXT) \-	ugrep-zopen.$(OBJEXT)+am_ugrep_OBJECTS = ugrep-ugrep.$(OBJEXT) ugrep-query.$(OBJEXT) \+	ugrep-vkey.$(OBJEXT) ugrep-screen.$(OBJEXT) \+	ugrep-glob.$(OBJEXT) ugrep-zopen.$(OBJEXT) ugrep_OBJECTS = $(am_ugrep_OBJECTS) am__DEPENDENCIES_1 = ugrep_DEPENDENCIES = $(am__DEPENDENCIES_1) \@@ -130,7 +131,9 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ugrep-glob.Po \-	./$(DEPDIR)/ugrep-ugrep.Po ./$(DEPDIR)/ugrep-zopen.Po+	./$(DEPDIR)/ugrep-query.Po ./$(DEPDIR)/ugrep-screen.Po \+	./$(DEPDIR)/ugrep-ugrep.Po ./$(DEPDIR)/ugrep-vkey.Po \+	./$(DEPDIR)/ugrep-zopen.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)@@ -300,7 +303,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ugrep_CPPFLAGS = -I$(top_srcdir)/include $(EXTRA_CFLAGS) $(SIMD_FLAGS) $(PTHREAD_CFLAGS) -DPLATFORM=\"$(PLATFORM)\" -DGREP_PATH=\"$(GREP_PATH)\" -DWITH_NO_INDENT-ugrep_SOURCES = ugrep.cpp glob.cpp glob.hpp zstream.hpp zopen.c zopen.h+ugrep_SOURCES = ugrep.cpp query.cpp query.hpp vkey.cpp vkey.hpp screen.cpp screen.hpp glob.cpp glob.hpp zstream.hpp zopen.c zopen.h ugrep_LDADD = $(PTHREAD_LIBS) $(top_srcdir)/lib/libreflex.a all: all-am @@ -389,7 +392,10 @@ distclean-compile: 	-rm -f *.tab.c  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-glob.Po@am__quote@ # am--include-marker+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-query.Po@am__quote@ # am--include-marker+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-screen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-ugrep.Po@am__quote@ # am--include-marker+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-vkey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ugrep-zopen.Po@am__quote@ # am--include-marker  $(am__depfiles_remade):@@ -454,6 +460,48 @@ ugrep-ugrep.obj: ugrep.cpp @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-ugrep.obj `if test -f 'ugrep.cpp'; then $(CYGPATH_W) 'ugrep.cpp'; else $(CYGPATH_W) '$(srcdir)/ugrep.cpp'; fi` +ugrep-query.o: query.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-query.o -MD -MP -MF $(DEPDIR)/ugrep-query.Tpo -c -o ugrep-query.o `test -f 'query.cpp' || echo '$(srcdir)/'`query.cpp+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-query.Tpo $(DEPDIR)/ugrep-query.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='query.cpp' object='ugrep-query.o' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-query.o `test -f 'query.cpp' || echo '$(srcdir)/'`query.cpp++ugrep-query.obj: query.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-query.obj -MD -MP -MF $(DEPDIR)/ugrep-query.Tpo -c -o ugrep-query.obj `if test -f 'query.cpp'; then $(CYGPATH_W) 'query.cpp'; else $(CYGPATH_W) '$(srcdir)/query.cpp'; fi`+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-query.Tpo $(DEPDIR)/ugrep-query.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='query.cpp' object='ugrep-query.obj' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-query.obj `if test -f 'query.cpp'; then $(CYGPATH_W) 'query.cpp'; else $(CYGPATH_W) '$(srcdir)/query.cpp'; fi`++ugrep-vkey.o: vkey.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-vkey.o -MD -MP -MF $(DEPDIR)/ugrep-vkey.Tpo -c -o ugrep-vkey.o `test -f 'vkey.cpp' || echo '$(srcdir)/'`vkey.cpp+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-vkey.Tpo $(DEPDIR)/ugrep-vkey.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='vkey.cpp' object='ugrep-vkey.o' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-vkey.o `test -f 'vkey.cpp' || echo '$(srcdir)/'`vkey.cpp++ugrep-vkey.obj: vkey.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-vkey.obj -MD -MP -MF $(DEPDIR)/ugrep-vkey.Tpo -c -o ugrep-vkey.obj `if test -f 'vkey.cpp'; then $(CYGPATH_W) 'vkey.cpp'; else $(CYGPATH_W) '$(srcdir)/vkey.cpp'; fi`+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-vkey.Tpo $(DEPDIR)/ugrep-vkey.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='vkey.cpp' object='ugrep-vkey.obj' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-vkey.obj `if test -f 'vkey.cpp'; then $(CYGPATH_W) 'vkey.cpp'; else $(CYGPATH_W) '$(srcdir)/vkey.cpp'; fi`++ugrep-screen.o: screen.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-screen.o -MD -MP -MF $(DEPDIR)/ugrep-screen.Tpo -c -o ugrep-screen.o `test -f 'screen.cpp' || echo '$(srcdir)/'`screen.cpp+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-screen.Tpo $(DEPDIR)/ugrep-screen.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='screen.cpp' object='ugrep-screen.o' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-screen.o `test -f 'screen.cpp' || echo '$(srcdir)/'`screen.cpp++ugrep-screen.obj: screen.cpp+@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-screen.obj -MD -MP -MF $(DEPDIR)/ugrep-screen.Tpo -c -o ugrep-screen.obj `if test -f 'screen.cpp'; then $(CYGPATH_W) 'screen.cpp'; else $(CYGPATH_W) '$(srcdir)/screen.cpp'; fi`+@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-screen.Tpo $(DEPDIR)/ugrep-screen.Po+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='screen.cpp' object='ugrep-screen.obj' libtool=no @AMDEPBACKSLASH@+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@+@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ugrep-screen.obj `if test -f 'screen.cpp'; then $(CYGPATH_W) 'screen.cpp'; else $(CYGPATH_W) '$(srcdir)/screen.cpp'; fi`+ ugrep-glob.o: glob.cpp @am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ugrep_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ugrep-glob.o -MD -MP -MF $(DEPDIR)/ugrep-glob.Tpo -c -o ugrep-glob.o `test -f 'glob.cpp' || echo '$(srcdir)/'`glob.cpp @am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ugrep-glob.Tpo $(DEPDIR)/ugrep-glob.Po@@ -596,7 +644,10 @@ clean-am: clean-binPROGRAMS clean-generic mostlyclean-am  distclean: distclean-am 		-rm -f ./$(DEPDIR)/ugrep-glob.Po+	-rm -f ./$(DEPDIR)/ugrep-query.Po+	-rm -f ./$(DEPDIR)/ugrep-screen.Po 	-rm -f ./$(DEPDIR)/ugrep-ugrep.Po+	-rm -f ./$(DEPDIR)/ugrep-vkey.Po 	-rm -f ./$(DEPDIR)/ugrep-zopen.Po 	-rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \@@ -644,7 +695,10 @@ installcheck-am:  maintainer-clean: maintainer-clean-am 		-rm -f ./$(DEPDIR)/ugrep-glob.Po+	-rm -f ./$(DEPDIR)/ugrep-query.Po+	-rm -f ./$(DEPDIR)/ugrep-screen.Po 	-rm -f ./$(DEPDIR)/ugrep-ugrep.Po+	-rm -f ./$(DEPDIR)/ugrep-vkey.Po 	-rm -f ./$(DEPDIR)/ugrep-zopen.Po 	-rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic

src/query.cpp

new file mode 100644@@ -0,0 +1,1942 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      query.cpp+@brief     Query engine and UI+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#include "ugrep.hpp"+#include "query.hpp"++#include <reflex/error.h>+#include <atomic>+#include <iostream>+#include <fstream>+#include <thread>+#include <fcntl.h>++#ifdef OS_WIN++// non-blocking pipe (requires Windows named pipe)+inline HANDLE nonblocking_pipe(int fd[2])+{+  DWORD pid = GetCurrentProcessId();+  std::string pipe_name = "\\\\.\\pipe\\ugrep_";+  pipe_name.append(std::to_string(pid)).append("_").append(std::to_string(time(NULL)));+  DWORD buffer_size = QUERY_BUFFER_SIZE;+  HANDLE pipe_r = CreateNamedPipeA(pipe_name.c_str(), PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 1, buffer_size, buffer_size, 0, NULL);+  if (pipe_r != INVALID_HANDLE_VALUE)+  {+    HANDLE pipe_w = CreateFileA(pipe_name.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); +    if (pipe_w != INVALID_HANDLE_VALUE)+    {+      fd[0] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_r), 0);+      fd[1] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_w), 0);+    }+    else+    {+      CloseHandle(pipe_r);+      pipe_r = INVALID_HANDLE_VALUE;+    }+  }+  return pipe_r;+}++#else++#include <signal.h>+#include <unistd.h>++// create a pipe with non-blocking read end+inline int nonblocking_pipe(int fd[2])+{+  if (pipe(fd) == 0)+  {+    if (fcntl(fd[0], F_SETFL, fcntl(fd[0], F_GETFL) | O_NONBLOCK) >= 0)+      return 0;+    close(fd[0]);+    close(fd[1]);+  }+  return -1;+}++#endif++// global flags+bool flag_c = false;+bool flag_h = false;+bool flag_l = false;+bool flag_v = false;++static constexpr const char *PROMPT = "\033[32;1m";    // bright green+static constexpr const char *CERROR = "\033[37;41;1m"; // bright white on red+static constexpr const char *LARROW = "«";             // left arrow+static constexpr const char *RARROW = "»";             // right arrow++char *Query::line_ptr(int col)+{+  char *ptr = line_;+  while (*ptr != '\0')+  {+    col -= Screen::mbchar_width(ptr, NULL);+    if (col < 0)+      break;+    ++ptr;+  }+  return ptr;+}++char *Query::line_ptr(int col, int pos)+{+  char *ptr = line_ptr(col);+  while (--pos >= 0 && *ptr != '\0')+    Screen::mbchar_width(ptr, const_cast<const char**>(&ptr));+  return ptr;+}++char *Query::line_end()+{+  char *ptr = line_;+  while (*ptr != '\0')+    ++ptr;+  return ptr;+}++int Query::line_pos()+{+  char *ptr = line_;+  char *end = line_ptr(col_);+  int pos = 0;+  while (ptr < end && *ptr != '\0')+  {+    Screen::mbchar_width(ptr, const_cast<const char**>(&ptr));+    ++pos;+  }+  return pos;+}++int Query::line_len()+{+  int num = 0;+  for (char *ptr = line_; *ptr != '\0'; ++ptr)+    num += Screen::mbchar_width(ptr, NULL);+  return num;+}++int Query::line_wsize()+{+  int num = 0;+  char *ptr = line_;+  while (*ptr != '\0')+  {+    Screen::wchar(ptr, const_cast<const char**>(&ptr));+    ++num;+  }+  return num;+}++void Query::display(int col, int len)+{+  char *ptr = line_ptr(col);+  char *end = line_ptr(col + len);+  char *err = error_ >= 0 && !Screen::mono ? line_ptr(0, error_) : NULL;+  char *next;+  bool alert = false;+  for (next = ptr; next < end; ++next)+  {+    if (next == err)+    {+      Screen::put(ptr, next - ptr);+      Screen::put(CERROR);+      ptr = next;+      alert = true;+    }+    int ch = static_cast<unsigned char>(*next);+    if (ch < ' ' || ch == 0x7f)+    {+      Screen::put(ptr, next - ptr);+      if (alert && next > err)+      {+        Screen::normal();+        alert = false;+      }+      if (!alert)+        Screen::invert();+      if (ch == 0x7f)+      {+        Screen::put("^?");+      }+      else+      {+        char buf[2] = { '^', static_cast<char>('@' + ch) };+        Screen::put(buf, 2);+      }+      Screen::normal();+      ptr = next + 1;+      alert = false;+    }+    else if (alert && next > err && (ch & 0xc0) != 0x80)+    {+      Screen::put(ptr, next - ptr);+      Screen::normal();+      ptr = next;+      alert = false;+    }+  }+  Screen::put(ptr, next - ptr);+  if (next == err)+    Screen::put(CERROR);+}++void Query::draw()+{+  if (select_ == -1)+  {+    Screen::home();++    if (prompt_ != NULL)+    {+      if (!Screen::mono)+      {+        Screen::normal();+        if (error_ == -1)+          Screen::put(PROMPT);+        else+          Screen::put(CERROR);+      }+      Screen::put(prompt_);+    }++    Screen::normal();++    int pos;+    if (len_ - col_ < shift_)+      pos = Screen::cols - start_ - (len_ - col_) - 1;+    else+      pos = Screen::cols - start_ - shift_ - 1;++    offset_ = col_ > pos ? col_ - pos : 0;++    if (offset_ > 0)+    {+      if (!Screen::mono)+      {+        if (error_ == -1)+          Screen::put(PROMPT);+        else+          Screen::put(CERROR);+      }++      Screen::put(LARROW);+      Screen::normal();++      int adj = 1;+      if (line_ptr(offset_) == line_ptr(offset_ + 1)) // adjust columns when double width char at offset+      {+        Screen::put(' ');+        adj = 2; // make the displayed line start one character later+      }++      if (len_ >= offset_ + Screen::cols - start_)+      {+        display(offset_ + adj, Screen::cols - start_ - adj - 1);+        Screen::erase();+        if (!Screen::mono)+        {+          if (error_ == -1)+            Screen::put(PROMPT);+          else+            Screen::put(CERROR);+        }+        Screen::put(RARROW);+      }+      else+      {+        display(offset_ + adj, len_ - offset_ - adj);+        Screen::erase();+      }+    }+    else+    {+      if (len_ > Screen::cols - start_)+      {+        display(0, Screen::cols - start_ - 1);+        Screen::erase();+        if (!Screen::mono)+        {+          if (error_ == -1)+            Screen::put(PROMPT);+          else+            Screen::put(CERROR);+        }+        Screen::put(RARROW);+      }+      else+      {+        display(0, len_);+        if (len_ < Screen::cols - start_)+          Screen::erase();+      }+    }+  }+  else+  {+    Screen::normal();+    Screen::put(0, 0, "\033[7mEnter\033[m/\033[7mDel\033[m toggle selection  \033[7mA\033[m select all  \033[7mC\033[m clear all  \033[7mEsc\033[m exit  \033[7m^Q\033[m quick exit");+  }+}++void Query::view(int row)+{+  Screen::normal();+  if (selected_[row])+    Screen::select();+  Screen::put(row - row_ + 1, 0, view_[row], skip_);+  if (selected_[row])+    Screen::deselect();+}++void Query::redraw()+{+  Screen::getsize();+  shift_ = (Screen::cols - start_) / 10;+  Screen::normal();++  if (mode_ == Mode::QUERY)+  {+    if (row_ + Screen::rows - 1 > rows_)+      row_ = rows_ - Screen::rows + 1;+    if (row_ < 0)+      row_ = 0;+    int end = rows_;+    if (end > row_ + Screen::rows - 1)+      end = row_ + Screen::rows - 1;+    for (int i = row_; i < end; ++i)+      view(i);+    if (rows_ < row_ + Screen::rows - 1)+      Screen::end();+    draw();+  }+  else+  {+    Screen::put( 1, 0, "");+    Screen::put( 2, 0, "\033[7mEsc\033[m   exit & save selected");+    Screen::put( 3, 0, "\033[7mEnter\033[m selection mode");+    Screen::put( 4, 0, "");+    Screen::put( 5, 0, "\033[7mTab\033[m    \033[7mS-Tab\033[m   pan");+    Screen::put( 6, 0, "\033[7mUp\033[m     \033[7mDown\033[m    scroll");+    Screen::put( 7, 0, "\033[7mPgUp\033[m   \033[7mPgDn\033[m    scroll page");+#ifdef WITH_MACOS_META_KEY+    Screen::put( 8, 0, "\033[7mS-Left\033[m \033[7mS-Right\033[m pan ½ page");+    Screen::put( 9, 0, "\033[7mS-Up\033[m   \033[7mS-Down\033[m  scroll ½ pg");+#else+    Screen::put( 8, 0, "\033[7mM-Left\033[m \033[7mM-Right\033[m pan ½ page");+    Screen::put( 9, 0, "\033[7mM-Up\033[m   \033[7mM-Down\033[m  scroll ½ pg");+#endif+    Screen::put(10, 0, "");+    Screen::put(11, 0, "\033[7mHome\033[m \033[7mEnd\033[m begin/end of line");+    Screen::put(12, 0, "");+    Screen::put(13, 0, "\033[7m^K\033[m delete after cursor");+    Screen::put(14, 0, "\033[7m^L\033[m refresh screen");+    Screen::put(15, 0, "\033[7m^Q\033[m quick exit & save");+    Screen::put(16, 0, "\033[7m^T\033[m toggle colors on/off");+    Screen::put(17, 0, "\033[7m^U\033[m delete before cursor");+    Screen::put(18, 0, "\033[7m^V\033[m verbatim character");+    Screen::put(19, 0, "\033[7m^Z\033[m or \033[7mF1\033[m help");+    Screen::put(20, 0, "");+    Screen::put(21, 0, "\033[7mM-/xxxx/\033[m U+xxxx code point");+    Screen::put(22, 0, "");++    std::string buf;+    int row = 23;+    int col = 0;++    for (Flags *fp = flags_; fp->text != NULL; ++fp)+    {+      buf.assign("\033[7mM- \033[m [\033[32;1m \033[m] ");+      buf[6] = fp->key;+      if (fp->flag)+        buf[19] = 'X';+      buf.append(fp->text);+      if (row >= Screen::rows)+      {+        row = 2;+        col += 28;+        Screen::end();+      }+      Screen::put(row, col, buf);+      ++row;+    }++    if (col == 0)+      Screen::end();++    if (!message_)+    {+#ifdef WITH_MACOS_META_KEY+      Screen::put(0, 0, "\033[7mF1\033[m help and options:        \033[7m^\033[m=\033[7mCtrl\033[m  \033[7mS-\033[m=\033[7mShift\033[m  \033[7mM-\033[m=\033[7mAlt\033[m/\033[7mOption\033[m or use \033[7m^O\033[m+key");+#else+      Screen::put(0, 0, "\033[7mF1\033[m help and options:        \033[7m^\033[m=\033[7mCtrl\033[m  \033[7mS-\033[m=\033[7mShift\033[m  \033[7mM-\033[m=\033[7mAlt\033[m or use \033[7m^O\033[m+key");+#endif+    }+    else+    {+      message_ = false;+    }++    Screen::setpos(Screen::rows - 1, 0);+    Screen::erase();+    Screen::put(Screen::rows - 1, Screen::cols - 1, "?");+  }+}++void Query::sigwinch(int)+{+  redraw();+}++void Query::sigint(int)+{+  VKey::cleanup();+  Screen::cleanup();++#ifndef OS_WIN+  // reset SIGINT to the default handler+  signal(SIGINT, SIG_DFL);++  // signal SIGINT again+  kill(getpid(), SIGINT);+#endif+}++void Query::move(int col)+{+  int dir = 0;+  if (col > col_)+    dir = 1;+  else if (col < col_)+    dir = -1;+  if (col <= 0)+    col = 0;+  else if (col >= len_)+    col = len_;+  else if (dir != 0 && line_ptr(col - 1) == line_ptr(col)) // oops, we're at the second half of a full width char+    col += dir; // direction is -1 or 1 to jump at or after full width char+  col_ = col;+  if (len_ >= Screen::cols - start_ && col >= Screen::cols - start_ - shift_)+  {+    draw();+  }+  else+  {+    if (offset_ > 0)+      draw();+    else+      Screen::setpos(0, start_ + col_ - offset_);+  }+}++// insert text to line at cursor+void Query::insert(const char *text, size_t size)+{+  char *end = line_end();+  if (end + size >= line_ + QUERY_MAX_LEN)+  {+    size = line_ + QUERY_MAX_LEN - end - 1;+    Screen::alert();+  }+  if (size > 0)+  {+    char *ptr = line_ptr(col_);+    memmove(ptr + size, ptr, end - ptr + 1);+    memcpy(ptr, text, size);+    int oldlen = len_;+    len_ = line_len();+    int forward = len_ - oldlen;+    if (forward > 0)+    {+      updated_ = true;+      error_ = -1;+      col_ += forward;+      draw();+    }+  }+}++void Query::insert(int ch)+{+  char buf = static_cast<char>(ch);+  insert(&buf, 1);+}++void Query::erase(int num)+{+  char *ptr = line_ptr(col_);+  char *next = line_ptr(col_, num);+  if (next > ptr)+  {+    memmove(ptr, next, line_end() - next + 1);+    updated_ = true;+    error_ = -1;+    len_ = line_len();+    draw();+  }+}++void Query::query()+{+  if (!VKey::setup(VKey::RAW))+    abort("cannot access keyboard");++  if (!Screen::setup("ugrep --query"))+  {+    VKey::cleanup();+    abort("cannot access screen");+  }++  for (Flags *fp = flags_; fp->text != NULL; ++fp)+    VKey::map_alt_key(fp->key, NULL);++  get_flags();++  get_stdin();++  query("Q>");++  VKey::cleanup();+  Screen::cleanup();++  // check TTY again for color support, this time without --query+  flag_query = 0;+  terminal();++  // if all lines selected, make sure to fetch all data to output+  if (select_all_)+    while (!eof_ || buflen_ > 0)+      fetch(rows_);++  // close the search pipe to terminate the search threads, if still open+  if (!eof_)+    close(search_pipe_[0]);++  // close the stdin pipe to terminate the stdin sender thread+  if (flag_stdin)+    close(stdin_pipe_[0]);++  if (!flag_quiet)+  {+    // output selected query results+    for (int i = 0; i < rows_; ++i)+    {+      if (selected_[i])+      {+        // if output should not be colored or colors are turned off with CTRL-T, then output the selected line without its CSI sequences+        if (flag_apply_color == NULL || Screen::mono)+        {+          const char *text = view_[i].c_str();+          const char *ptr = text;+          const char *end = text + view_[i].size();++          while (ptr < end)+          {+            if (*ptr == '\033')+            {+              fwrite(text, 1, ptr - text, stdout);+              ++ptr;+              if (*ptr == '[')+              {+                ++ptr;+                while (ptr < end && !isalpha(*ptr))+                  ++ptr;+              }+              if (ptr < end)+                ++ptr;+              text = ptr;+            }+            else+            {+              ++ptr;+            }+          }++          fwrite(text, 1, ptr - text, stdout);+        }+        else+        {+          fwrite(view_[i].c_str(), 1, view_[i].size(), stdout);+        }++        putchar('\n');+      }+    }+  }++  // join the search thread+  if (search_thread_.joinable())+    search_thread_.join();++  // join the stdin sender thread+  if (stdin_thread_.joinable())+    stdin_thread_.join();+}++void Query::query(const char *prompt)+{+  mode_       = Mode::QUERY;+  updated_    = false;+  message_    = false;+  *line_      = '\0';+  prompt_     = prompt;+  start_      = 0;+  col_        = 0;+  len_        = 0;+  offset_     = 0;+  shift_      = 8;+  error_      = -1;+  row_        = 0;+  rows_       = 0;+  skip_       = 0;+  select_     = -1;+  select_all_ = false;+  eof_        = true;+  buflen_     = 0;++#ifndef OS_WIN++  signal(SIGINT, sigint);++  signal(SIGPIPE, SIG_IGN);++  signal(SIGWINCH, sigwinch);++#endif++  arg_pattern = line_;++  // if -e PATTERN specified, collect patterns in the line to edit+  if (!flag_regexp.empty())+  {+    std::string pattern;++    if (flag_regexp.size() == 1)+    {+      pattern = flag_regexp.front();+    }+    else+    {+      pattern.assign("(");+      for (auto& regex : flag_regexp)+      {+        if (!regex.empty())+        {+          if (!pattern.empty())+            pattern.append(")|(");+          pattern.append(regex);+        }+      }+      pattern.push_back(')');+    }++    flag_regexp.clear();++    size_t num = pattern.size();+    if (num >= QUERY_MAX_LEN)+      num = QUERY_MAX_LEN - 1;++    memcpy(line_, pattern.c_str(), num);+    line_[num] = '\0';++    len_ = line_len();++    move(len_);+  }++  Screen::clear();++  if (prompt_ != NULL)+  {+    Screen::put(prompt_);+    Screen::getpos(NULL, &start_);+  }+  else+  {+    start_ = 0;+  }++  result();++  bool ctrl_o = false;+  bool ctrl_v = false;++  while (true)+  {+    size_t delay = flag_query;++    int key = 0;++    while (true)+    {+      update();++      if (select_ == -1)+        Screen::setpos(0, start_ + col_ - offset_);+      else+        Screen::setpos(select_ - row_ + 1, 0);++      key = VKey::in(100);++      if (key > 0)+        break;++      --delay;++      if (delay == 0)+      {+        if (message_)+        {+          draw();+          message_ = false;+        }++        if (updated_)+        {+          result();++          updated_ = false;+          select_ = -1;+          select_all_ = false;+        }+#ifdef OS_WIN+        else+        {+          // detect screen size changes+          int rows = Screen::rows;+          int cols = Screen::cols;++          Screen::getsize();++          if (rows != Screen::rows || cols != Screen::cols)+            redraw();+        }+#endif++        delay = flag_query;+      }+    }++    if (ctrl_o)+    {+      meta(key);+      ctrl_o = false;+    }+    else if (ctrl_v)+    {+      insert(key);+      ctrl_v = false;+    }+    else+    {+      switch (key)+      {+        case VKey::ESC:+          if (select_ == -1)+          {+            if (!Screen::mono)+              Screen::put(PROMPT);+            Screen::put(0, 0, ">>");+            Screen::put(0, 2, "\033[mExit? (y/n) [n] ");+            VKey::flush();+            key = VKey::get();+            if (key == 'y' || key == 'Y')+              return;+            draw();+          }+          else+          {+            select_ = -1;+            redraw();+          }+          break;++        case VKey::LF:+        case VKey::CR:+          if (select_ == -1)+          {+            if (rows_ > 0)+            {+              select_ = row_;+              draw();+            }+            else+            {+              Screen::alert();+            }+          }+          else+          {+            selected_[select_] = !selected_[select_];+            view(select_);+            down();+          }+          break;++        case VKey::META:+          key = VKey::get();+          switch (key)+          {+            case VKey::TAB:+              if (skip_ > 7)+                skip_ -= 8;+              redraw();+              break;++            case VKey::UP:+              pgup(true);+              break;++            case VKey::DOWN:+              pgdn(true);+              break;++            case VKey::LEFT:+              skip_ -= Screen::cols / 2;+              if (skip_ < 0)+                skip_ = 0;+              redraw();+              break;++            case VKey::RIGHT:+              skip_ += Screen::cols / 2;+              redraw();+              break;++            default:+              if (select_ == -1)+                meta(key);+              else+                Screen::alert();+          }+          break;++        case VKey::TAB:+          skip_ += 8;+          redraw();+          break;++        case VKey::BS:+          if (select_ == -1)+          {+            if (col_ <= 0)+              break;+            move(col_ - 1);+            erase(1);+          }+          else+          {+            up();+            selected_[select_] = !selected_[select_];+            view(select_);+          }+          break;++        case VKey::DEL:+          if (select_ == -1)+          {+            erase(1);+          }+          else+          {+            up();+            selected_[select_] = !selected_[select_];+            view(select_);+          }+          break;++        case VKey::RIGHT:+          if (select_ == -1)+            move(col_ + 1);+          else+            Screen::alert();+          break;++        case VKey::LEFT:+          if (select_ == -1)+            move(col_ - 1);+          else+            Screen::alert();+          break;++        case VKey::UP:+          up();+          break;++        case VKey::DOWN:+          down();+          break;++        case VKey::PGUP:+          pgup();+          break;++        case VKey::PGDN:+          pgdn();+          break;++        case VKey::HOME:+          if (select_ == -1)+            move(0);+          else+            Screen::alert();+          break;++        case VKey::END:+          if (select_ == -1)+            move(len_);+          else+            Screen::alert();+          break;++        case VKey::CTRL_K:+          if (select_ == -1)+            erase(len_ - col_);+          else+            Screen::alert();+          break;++        case VKey::CTRL_L:+          redraw();+          break;++        case VKey::CTRL_O:+          if (select_ == -1)+            ctrl_o = true;+          else+            Screen::alert();+          break;++        case VKey::CTRL_Q:+          return;++        case VKey::CTRL_T:+          Screen::mono = !Screen::mono;+          redraw();+          break;++        case VKey::CTRL_U:+          if (select_ == -1)+          {+            int pos = line_pos();+            col_ = 0;+            erase(pos);+          }+          else+          {+            Screen::alert();+          }+          break;++        case VKey::CTRL_V:+          if (select_ == -1)+            ctrl_v = true;+          break;++        case VKey::CTRL_Z:+          help();+          break;++        default:+          if (key >= 32 && key < 256)+          {+            if (select_ == -1)+            {+              insert(key);+            }+            else if (key == 'A' || key == 'a')+            {+              select_all_ = true;+              for (int i = 0; i < rows_; ++i)+                selected_[i] = true;+              redraw();+            }+            else if (key == 'C' || key == 'c')+            {+              select_all_ = false;+              for (int i = 0; i < rows_; ++i)+                selected_[i] = false;+              redraw();+            }+            else+            {+              Screen::alert();+            }+          }+          else+          {+            help();+          }+      }+    }+  }+}++void Query::result()+{+  row_ = 0;+  rows_ = 0;+  skip_ = 0;+  dots_ = 2;++  if (!eof_)+  {+    close(search_pipe_[0]);+    eof_ = true;+    buflen_ = 0;+  }++  error_ = -1;++#ifdef OS_WIN++  hPipe_ = nonblocking_pipe(search_pipe_);++  if (hPipe_ == INVALID_HANDLE_VALUE)+  {+    if (!Screen::mono)+      Screen::put(CERROR);+    Screen::put(0, 0, "Error: cannot create pipe");+    return;+  }++  memset(&overlapped_, 0, sizeof(overlapped_));+  pending_ = false;++#else++  if (nonblocking_pipe(search_pipe_) < 0)+  {+    if (!Screen::mono)+      Screen::put(CERROR);+    Screen::put(0, 0, "Error: cannot create pipe");+    return;+  }++#endif++  eof_ = false;++  if (search_thread_.joinable())+    search_thread_.join();++  set_flags();++  set_stdin();++  if (error_ == -1)+    search_thread_ = std::thread(Query::execute, search_pipe_[1]);++  redraw();+}++void Query::update()+{+  int begin = rows_;++  // fetch viewable portion plus a screenful more, when available+  fetch(row_ + 2 * Screen::rows - 2);++  Screen::save();++  // display the viewable portion when updated+  if (rows_ > begin && begin < row_ + Screen::rows - 1)+  {+    Screen::normal();++    if (begin + Screen::rows - 1 > rows_)+      begin = rows_ - Screen::rows + 1;+    if (begin < 0)+      begin = 0;++    int end = rows_;+    if (end > begin + Screen::rows - 1)+      end = begin + Screen::rows - 1;++    for (int i = begin; i < end; ++i)+      view(i);+  }++  if (rows_ < row_ + Screen::rows - 1)+  {+    searching_[9] = '.';+    searching_[10] = '.';+    searching_[11] = '.';+    searching_[9 + dots_] = '\0';+    dots_ = (dots_ + 1) & 3;++    Screen::setpos(rows_ - row_ + 1, 0);+    Screen::normal();+    Screen::erase();+    Screen::invert();+    if (error_ == -1)+    {+      Screen::put(rows_ - row_ + 1, 0, eof_ ? "(END)" : searching_);+      Screen::normal();+    }+    else+    {+      Screen::put(rows_ - row_ + 1, 0, "(ERROR)");++      if (!Screen::mono)+      {+        Screen::setpos(2, 0);+        Screen::put(CERROR);+        Screen::end();+      }+      Screen::put(2, 0, what_);+      Screen::normal();+      Screen::end();+      draw();+    }+  }++  Screen::restore();+}++// fetch rows up to and including the specified row, when available (i.e. do not block)+void Query::fetch(int row)+{+  while (rows_ <= row)+  {+    // look for the first newline character in the buffer+    char *nlptr = static_cast<char*>(memchr(buffer_, '\n', buflen_));++    if (nlptr == NULL)+    {+      // no newline and buffer is not full and not EOF reached yet, get more data+      if (buflen_ < sizeof(buffer_) && !eof_)+      {+#ifdef OS_WIN++        // try to fetch more data from the non-blocking pipe when immediately available+        DWORD nread = 0;+        bool avail = !pending_;++        if (pending_)+        {+          pending_ = false;++          if (!GetOverlappedResult(hPipe_, &overlapped_, &nread, FALSE))+          {+            switch (GetLastError())+            {+              case ERROR_IO_INCOMPLETE:+                pending_ = true;+                break;++              case ERROR_HANDLE_EOF:+              default:+                close(search_pipe_[0]);+                eof_ = true;+            }+          }+        }+        if (avail)+        {+          pending_ = false;++          if (!ReadFile(hPipe_, buffer_ + buflen_, sizeof(buffer_) - buflen_, &nread, &overlapped_))+          {+            switch (GetLastError())+            {+              case ERROR_IO_PENDING:+                pending_ = true;+                break;++              case ERROR_MORE_DATA:+                break;++              case ERROR_HANDLE_EOF:+              case ERROR_BROKEN_PIPE:+              default:+                close(search_pipe_[0]);+                eof_ = true;+            }+          }+        }++        buflen_ += nread;++#else++        // try to fetch more data from the non-blocking pipe when immediately available+        ssize_t nread = read(search_pipe_[0], buffer_ + buflen_, sizeof(buffer_) - buflen_);++        if (nread > 0)+        {+          // success, more data read into the buffer+          buflen_ += nread;+        }+        else if (nread < 0)+        {+          // if pipe is empty but not EINTR/EAGAIN/EWOULDBLOCK then error (EOF)+          if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK)+          {+            close(search_pipe_[0]);+            eof_ = true;+          }+        }+        else+        {+          // no data, pipe is closed (EOF)+          close(search_pipe_[0]);+          eof_ = true;+        }++#endif+      }++      if (buflen_ == 0)+        break;++      // we may have more data now, so look again for the first newline character in the buffer+      nlptr = static_cast<char*>(memchr(buffer_, '\n', buflen_));++      if (nlptr == NULL)+      {+        // if no newline and EOF not reached yet, bail out+        if (!eof_)+          break;++        // data has no newline but buffer is full or EOF reached, so we must read it as an incomplete row+        nlptr = buffer_ + buflen_;+      }+    }++    if (nlptr != NULL)+    {+      // allocate more rows on demand+      if (rows_ >= static_cast<int>(view_.size()))+      {+        view_.emplace_back();+        selected_.push_back(select_all_);+      }++      // copy the row from the buffer+      view_[rows_].assign(buffer_, nlptr - buffer_);+      selected_[rows_] = select_all_;++      // added another row+      ++rows_;++      if (nlptr < buffer_ + buflen_)+        ++nlptr;++      buflen_ -= nlptr - buffer_;++      // update the buffer+      memmove(buffer_, nlptr, buflen_);+    }+  }+}++void Query::execute(int fd)+{+  output = fdopen(fd, "w");++  if (output != NULL)+  {+    try+    {+      ugrep();+    }++    catch (reflex::regex_error& error)+    {+      what_.assign(error.what());+      +      // error position in the pattern+      error_ = error.pos();++      // subtract 4 for (?m) or (?mi)+      if (error_ >= 5)+        error_ -= 4 + flag_ignore_case;++      // subtract 2 for -F+      if (flag_fixed_strings && error_ >= 2)+        error_ -= 2;++      // subtract 2 or 3 for -x or -w+      if (flags_[26].flag && error_ >= 2)+        error_ -= 2;+      else if (flags_[24].flag && error_ >= 3)+        error_ -= 3;+    }++    catch (std::exception& error)+    {+      what_.assign(error.what());++      // cursor to the end+      error_ = line_wsize();+    }++    fclose(output);+    output = NULL;+  }+  else+  {+    if (!Screen::mono)+      Screen::put(CERROR);+    Screen::put(0, 0, "Error: cannot fdopen pipe");+  }+}++void Query::up()+{+  if (select_ > 0)+  {+    --select_;+    if (select_ > row_)+      return;+  }+  if (row_ > 0)+  {+    view(row_ - 1);+    --row_;+    Screen::pan_down();+    draw();+  }+}++void Query::down()+{+  if (select_ >= 0)+  {+    ++select_;+    if (select_ >= rows_)+      select_ = rows_ - 1;+    if (select_ < row_ + Screen::rows - 2)+      return;+  }+  if (row_ + Screen::rows - 1 <= rows_)+  {+    ++row_;+    Screen::normal();+    Screen::pan_up();+    if (row_ + Screen::rows - 2 < rows_)+      view(row_ + Screen::rows - 2);+    draw();+  }+}++void Query::pgup(bool half_page)+{+  if (select_ >= 0)+  {+    if (half_page)+      select_ -= Screen::rows / 2;+    else+      select_ -= Screen::rows - 2;+    if (select_ < 0)+      select_ = 0;+    if (select_ > row_)+      return;+  }+  if (row_ > 0)+  {+    view(row_ - 1);+    int oldrow = row_;+    if (half_page)+      row_ -= Screen::rows / 2;+    else+      row_ -= Screen::rows - 2;+    if (row_ < 0)+      row_ = 0;+    Screen::pan_down(oldrow - row_);+    for (int i = row_; i < oldrow - 1; ++i)+      view(i);+    draw();+  }+}++void Query::pgdn(bool half_page)+{+  if (select_ >= 0)+  {+    if (half_page)+      select_ += Screen::rows / 2;+    else+      select_ += Screen::rows - 2;+    if (select_ >= rows_)+      select_ = rows_ - 1;+    if (select_ < row_ + Screen::rows - 2)+      return;+  }+  if (row_ + Screen::rows - 1 <= rows_)+  {+    int oldrow = row_;+    if (half_page)+      row_ += Screen::rows / 2;+    else+      row_ += Screen::rows - 2;+    if (row_ + Screen::rows > rows_)+    {+      row_ = rows_ - Screen::rows + 2;+      if (row_ < oldrow)+        row_ = oldrow;+    }+    int diff = row_ - oldrow;+    if (diff > 0)+    {+      Screen::normal();+      Screen::pan_up(diff);+      for (int i = row_ + Screen::rows - diff - 1; i < row_ + Screen::rows - 1; ++i)+        if (i < rows_)+          view(i);+      draw();+    }+  }+}++void Query::help()+{+  mode_ = Mode::HELP;++  Screen::clear();+  redraw();++  bool ctrl_o = false;++  while (true)+  {+    int key;++#ifdef OS_WIN++    while (true)+    {+      key = VKey::in(100);++      if (key > 0)+        break;++      // detect screen size changes+      int rows = Screen::rows;+      int cols = Screen::cols;++      Screen::getsize();++      if (rows != Screen::rows || cols != Screen::cols)+        redraw();+    }++#else++    key = VKey::get();++#endif++    if (ctrl_o)+    {+      meta(key);+      redraw();+      ctrl_o = false;+    }+    else if (key == VKey::ESC || key == VKey::CTRL_Q)+    {+      break;+    }+    else+    {+      switch (key)+      {+        case VKey::CTRL_L:+          redraw();+          break;++        case VKey::CTRL_O:+          ctrl_o = true;+          break;++        case VKey::CTRL_T:+          Screen::mono = !Screen::mono;+          redraw();+          break;++        case VKey::META:+          meta(VKey::get());+          redraw();+          break;++        default:+          if (key != VKey::FN(1))+          {+            Screen::alert();+#ifdef WITH_MACOS_META_KEY+            if (key >= 0x80)+            {+              if (!Screen::mono)+                Screen::put(CERROR);+              Screen::put(1, 0, "MacOS Terminal Preferences/Profiles/Keyboard: enable \"Use Option as Meta key\"");+              Screen::setpos(0, start_ + col_ - offset_);+            }+#endif+          }+      }+    }+  }++  mode_ = Mode::QUERY;++  Screen::clear();+  redraw();+}++void Query::meta(int key)+{+  for (Flags *fp = flags_; fp->text != NULL; ++fp)+  {+    if (fp->key == key)+    {+      if (!fp->flag)+      {+        switch (key)+        {+          case 'A':+            flags_[1].flag = false;+            flags_[3].flag = false;+            flags_[15].flag = false;+            flags_[28].flag = false;+            break;++          case 'B':+            flags_[0].flag = false;+            flags_[3].flag = false;+            flags_[15].flag = false;+            flags_[28].flag = false;+            break;++          case 'b':+          case 'k':+          case 'n':+            flags_[4].flag = false;+            flags_[13].flag = false;+            break;++          case 'C':+            flags_[0].flag = false;+            flags_[1].flag = false;+            flags_[15].flag = false;+            flags_[28].flag = false;+            break;++          case 'c':+            flags_[2].flag = false;+            flags_[12].flag = false;+            flags_[13].flag = false;+            flags_[14].flag = false;+            break;++          case 'H':+            flags_[8].flag = false;+            break;++          case 'h':+            flags_[7].flag = false;+            break;++          case 'I':+            flags_[23].flag = false;+            flags_[25].flag = false;+            break;++          case 'i':+            flags_[11].flag = false;+            break;++          case 'j':+            flags_[10].flag = false;+            break;++          case 'l':+            flags_[2].flag = false;+            flags_[4].flag = false;+            flags_[12].flag = false;+            flags_[14].flag = false;+            break;++          case 'o':+            flags_[0].flag = false;+            flags_[1].flag = false;+            flags_[3].flag = false;+            flags_[28].flag = false;+            break;++          case 'R':+            flags_[18].flag = false;+            for (int i = 31; i <= 39; ++i)+              flags_[i].flag = false;+            break;++          case 'r':+            flags_[17].flag = false;+            for (int i = 31; i <= 39; ++i)+              flags_[i].flag = false;+            break;++          case 'W':+            flags_[9].flag = false;+            flags_[25].flag = false;+            break;++          case 'w':+            flags_[26].flag = false;+            break;++          case 'X':+            flags_[9].flag = false;+            flags_[23].flag = false;+            break;++          case 'x':+            flags_[24].flag = false;+            break;++          case 'y':+            flags_[0].flag = false;+            flags_[1].flag = false;+            flags_[3].flag = false;+            flags_[15].flag = false;+            break;++          case '1':+          case '2':+          case '3':+          case '4':+          case '5':+          case '6':+          case '7':+          case '8':+          case '9':+            for (int i = 31; i <= 39; ++i)+              flags_[i].flag = false;+            if (!flags_[17].flag && !flags_[18].flag)+              flags_[17].flag = true;+        }+      }+      else+      {+        switch (key)+        {+          case 'R':+          case 'r':+            for (int i = 31; i <= 39; ++i)+              flags_[i].flag = false;+            break;+        }+      }++      std::string buf;++      Screen::normal();++#if !defined(HAVE_PCRE2) && !defined(HAVE_BOOST_REGEX)+      if (key == 'P')+      {+        buf.assign(CERROR).append("option -P is not available in this build configuration of ugrep\033[m");+      }+      else+#endif+#ifndef HAVE_LIBZ+      if (key == 'z')+      {+        buf.assign(CERROR).append("Option -z is not available in this build configuration of ugrep\033[m");+      }+      else+#endif+      {+        fp->flag = !fp->flag;++        buf.assign("\033[m\033[7mM- \033[m ").append(fp->text).append(fp->flag ? " \033[32;1mon\033[m  " : " \033[31;1moff\033[m  ");+        buf[9] = fp->key;++        updated_ = true;+      }++      Screen::put(0, 0, buf);+      message_ = true;++      return;+    }+  }++  Screen::alert();+}++void Query::get_flags()+{+  // remember the context size, when specified+  if (flag_after_context > 0)+    context_ = flag_after_context;+  else if (flag_before_context > 0)+    context_ = flag_before_context;++  // get the interactive flags from the ugrep flags+  flags_[0].flag = flag_after_context > 0 && flag_before_context == 0;+  flags_[1].flag = flag_after_context == 0 && flag_before_context > 0;+  flags_[2].flag = flag_byte_offset;+  flags_[3].flag = flag_after_context > 0 && flag_before_context > 0;+  flags_[4].flag = flag_count;+  flags_[5].flag = flag_fixed_strings;+  flags_[6].flag = flag_basic_regexp;+  flags_[7].flag = flag_with_filename;+  flags_[8].flag = flag_no_filename;+  flags_[9].flag = flag_binary_without_matches;+  flags_[10].flag = flag_ignore_case;+  flags_[11].flag = flag_smart_case;+  flags_[12].flag = flag_column_number;+  flags_[13].flag = flag_files_with_match;+  flags_[14].flag = flag_line_number;+  flags_[15].flag = flag_only_matching;+  flags_[16].flag = flag_perl_regexp;+  flags_[17].flag = flag_directories_action == Action::RECURSE && flag_dereference;+  flags_[18].flag = flag_directories_action == Action::RECURSE && !flag_dereference;+  flags_[19].flag = flag_initial_tab;+  flags_[20].flag = flag_binary;+  flags_[21].flag = flag_ungroup;+  flags_[22].flag = flag_invert_match;+  flags_[23].flag = flag_with_hex;+  flags_[24].flag = flag_word_regexp;+  flags_[25].flag = flag_hex;+  flags_[26].flag = flag_line_regexp;+  flags_[27].flag = flag_empty;+  flags_[28].flag = flag_any_line;+  flags_[29].flag = flag_decompress;+  flags_[30].flag = flag_null;+  flags_[31].flag = flag_max_depth == 1;+  flags_[32].flag = flag_max_depth == 2;+  flags_[33].flag = flag_max_depth == 3;+  flags_[34].flag = flag_max_depth == 4;+  flags_[35].flag = flag_max_depth == 5;+  flags_[36].flag = flag_max_depth == 6;+  flags_[37].flag = flag_max_depth == 7;+  flags_[38].flag = flag_max_depth == 8;+  flags_[39].flag = flag_max_depth == 9;+}++void Query::set_flags()+{+  // reset ugrep flags that are set by ugrep depending on other flags+  flag_no_header = false;+  flag_dereference = false;+  flag_no_dereference = false;+  flag_files_without_match = false;+  flag_empty = false;+  flag_match = false;+  flag_binary_files = NULL;++  // make sure we sort, if sorting was not specified+  if (flag_sort == NULL)+    flag_sort = "name";++  // set ugrep flags to the interactive flags+  flag_after_context = context_ * (flags_[0].flag || flags_[3].flag);+  flag_before_context = context_ * (flags_[1].flag || flags_[3].flag);+  flag_byte_offset = flags_[2].flag;+  flag_count = flags_[4].flag;+  flag_fixed_strings = flags_[5].flag;+  flag_basic_regexp = flags_[6].flag;+  flag_with_filename = flags_[7].flag;+  flag_no_filename = flags_[8].flag;+  flag_binary_without_matches = flags_[9].flag;+  flag_ignore_case = flags_[10].flag;+  flag_smart_case = flags_[11].flag;+  flag_column_number = flags_[12].flag;+  flag_files_with_match = flags_[13].flag;+  flag_line_number = flags_[14].flag;+  flag_only_matching = flags_[15].flag;+  flag_perl_regexp = flags_[16].flag;+  if (flags_[17].flag)+    flag_directories_action = Action::RECURSE, flag_dereference = true;+  else if (flags_[18].flag)+    flag_directories_action = Action::RECURSE, flag_dereference = false;+  else+    flag_directories_action = Action::SKIP;+  flag_initial_tab = flags_[19].flag;+  flag_binary = flags_[20].flag;+  flag_ungroup = flags_[21].flag;+  flag_invert_match = flags_[22].flag;+  flag_with_hex = flags_[23].flag;+  flag_word_regexp = flags_[24].flag;+  flag_hex = flags_[25].flag;+  flag_line_regexp = flags_[26].flag;+  flag_empty = flags_[27].flag;+  flag_any_line = flags_[28].flag;+  flag_decompress = flags_[29].flag;+  flag_null = flags_[30].flag;+  flag_max_depth = 0;+  for (size_t i = 31; i <= 39; ++i)+    if (flags_[i].flag)+      flag_max_depth = i - 30;+}++void Query::get_stdin()+{+  // if standard input is searched, buffer all data+  if (flag_stdin)+  {+    reflex::BufferedInput input(stdin, flag_encoding_type);++    while (true)+    {+      size_t len = input.get(buffer_, QUERY_BUFFER_SIZE);+      if (len <= 0)+        break;+      stdin_buffer_.append(buffer_, len);+    }+  }+}++void Query::set_stdin()+{+  // if standard input is searched, start thread to produce data+  if (flag_stdin)+  {+    if (stdin_thread_.joinable())+      stdin_thread_.join();++    if (pipe(stdin_pipe_) < 0)+    {+      if (!Screen::mono)+        Screen::put(CERROR);+      Screen::put(0, 0, "Error: cannot create pipe");+      return;+    }++    source = fdopen(stdin_pipe_[0], "r");++    stdin_thread_ = std::thread(Query::stdin_sender, stdin_pipe_[1]);+  }+}++// send standard input data down the specified pipe fd+ssize_t Query::stdin_sender(int fd)+{+  // write the stdin data all at once, we can ignore the return value+  ssize_t nwritten = write(fd, stdin_buffer_.c_str(), stdin_buffer_.size());++  close(fd);++  return nwritten;+}++Query::Mode              Query::mode_                = Query::Mode::QUERY;+bool                     Query::updated_             = false;+bool                     Query::message_             = false;+char                     Query::line_[QUERY_MAX_LEN] = { '\0' };+const char              *Query::prompt_              = NULL;+int                      Query::start_               = 0;+int                      Query::col_                 = 0;+int                      Query::len_                 = 0;+int                      Query::offset_              = 0;+int                      Query::shift_               = 8;+std::atomic_int          Query::error_;+std::string              Query::what_;+int                      Query::row_                 = 0;+int                      Query::rows_                = 0;+int                      Query::select_              = -1;+bool                     Query::select_all_          = false;+int                      Query::skip_                = 0;+std::vector<std::string> Query::view_;+std::vector<bool>        Query::selected_;+bool                     Query::eof_                 = true;+size_t                   Query::buflen_              = 0;+char                     Query::buffer_[QUERY_BUFFER_SIZE];+int                      Query::search_pipe_[2];+std::thread              Query::search_thread_;+std::string              Query::stdin_buffer_;+int                      Query::stdin_pipe_[2];+std::thread              Query::stdin_thread_;+char                     Query::searching_[16]       = "Searching...";+int                      Query::dots_                = 2;+size_t                   Query::context_             = 2;++#ifdef OS_WIN++HANDLE                   Query::hPipe_;+OVERLAPPED               Query::overlapped_;+bool                     Query::pending_;++#endif++Query::Flags Query::flags_[] = {+  { false, 'A', "after context" },+  { false, 'B', "before context" },+  { false, 'b', "byte offset" },+  { false, 'C', "context" },+  { false, 'c', "count lines" },+  { false, 'F', "fixed strings" },+  { false, 'G', "basic regex" },+  { false, 'H', "with filename" },+  { false, 'h', "hide filename" },+  { false, 'I', "ignore binary" },+  { false, 'i', "ignore case" },+  { false, 'j', "smart case" },+  { false, 'k', "column number" },+  { false, 'l', "list files" },+  { false, 'n', "line number" },+  { false, 'o', "only matching" },+  { false, 'P', "perl regex" },+  { false, 'R', "recurse symlinks" },+  { false, 'r', "recurse" },+  { false, 'T', "initial tab" },+  { false, 'U', "binary pattern" },+  { false, 'u', "ungroup matches" },+  { false, 'v', "invert matches" },+  { false, 'W', "with hex binary" },+  { false, 'w', "word match" },+  { false, 'X', "hex binary" },+  { false, 'x', "line match" },+  { false, 'Y', "empty matches" },+  { false, 'y', "any line" },+  { false, 'z', "decompress" },+  { false, '0', "file name + \\0" },+  { false, '1', "recurse 1 level" },+  { false, '2', "recurse 2 levels" },+  { false, '3', "recurse 3 levels" },+  { false, '4', "recurse 4 levels" },+  { false, '5', "recurse 5 levels" },+  { false, '6', "recurse 6 levels" },+  { false, '7', "recurse 7 levels" },+  { false, '8', "recurse 8 levels" },+  { false, '9', "recurse 9 levels" },+  { false, 0, NULL, }+};

src/query.hpp

new file mode 100644@@ -0,0 +1,178 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      query.hpp+@brief     Query engine and UI+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#include "ugrep.hpp"+#include "screen.hpp"+#include "vkey.hpp"++#include <atomic>+#include <cerrno>+#include <thread>+#include <vector>++// max length of the query line to edit+#ifndef QUERY_MAX_LEN+#define QUERY_MAX_LEN 1024+#endif++// how much data to buffer in the search pipe+#ifndef QUERY_BUFFER_SIZE+#define QUERY_BUFFER_SIZE 8192+#endif++class Query {++ public:++  static void query();++ protected:++  enum class Mode { QUERY, HELP };++  struct Flags {+    bool        flag;+    int         key;+    const char *text;+  };++  static void query(const char *prompt);++  static char *line_ptr(int col);++  static char *line_ptr(int col, int pos);++  static char *line_end();++  static int line_pos();++  static int line_len();++  static int line_wsize();++  static void display(int col, int len);++  static void draw();++  static void view(int row);++  static void redraw();++  static void sigwinch(int);++  static void sigint(int);++  static void move(int pos);++  static void insert(const char *text, size_t size);++  static void insert(int ch);++  static void erase(int num);++  static void result();++  static void update();++  static void fetch(int row);++  static void execute(int fd);++  static void up();++  static void down();++  static void pgup(bool half_page = false);++  static void pgdn(bool half_page = false);++  static void meta(int key);++  static void help();++  static void get_flags();++  static void set_flags();++  static void get_stdin();++  static void set_stdin();++  static ssize_t stdin_sender(int fd);++  static Mode                     mode_;+  static bool                     updated_;+  static bool                     message_;+  static char                     line_[QUERY_MAX_LEN];+  static const char              *prompt_;+  static int                      start_;+  static int                      col_;+  static int                      len_;+  static int                      offset_;+  static int                      shift_;+  static std::atomic_int          error_;+  static std::string              what_;+  static int                      row_;+  static int                      rows_;+  static int                      skip_;+  static int                      select_;+  static bool                     select_all_;+  static std::vector<std::string> view_;+  static std::vector<bool>        selected_;+  static FILE                    *file_;+  static bool                     eof_;+  static size_t                   buflen_;+  static char                     buffer_[QUERY_BUFFER_SIZE];+  static int                      search_pipe_[2];+  static std::thread              search_thread_;+  static std::string              stdin_buffer_;+  static int                      stdin_pipe_[2];+  static std::thread              stdin_thread_;+  static char                     searching_[16];+  static int                      dots_;+  static size_t                   context_;++#ifdef OS_WIN++  static HANDLE                   hPipe_;+  static OVERLAPPED               overlapped_;+  static bool                     pending_;++#endif++  static Flags                    flags_[];++};

src/screen.cpp

new file mode 100644@@ -0,0 +1,759 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      screen.cpp+@brief     ANSI SGR code controlled screen API - static, not thread safe+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#include "screen.hpp"++#include <cctype>+#include <string>+#include <fcntl.h>++#ifndef OS_WIN+#include <signal.h>+#endif++// max collective length of ANSI CSI escape sequences collected when skipping lead text with skip>0+#define SCREEN_MAX_CODELEN 256++// emit ANSI SGR CSI sequence with one numeric parameter+void Screen::CSI(int code, int num)+{+  char buf[32];+  char *ptr = buf;++  *ptr++ = '\033';+  *ptr++ = '[';+  itoa(num, &ptr);+  *ptr++ = code;+  put(buf, ptr - buf);+}++// emit ANSI SGR CSI sequence with two numeric parameters+void Screen::CSI(int code, int num1, int num2)+{+  char buf[32];+  char *ptr = buf;++  *ptr++ = '\033';+  *ptr++ = '[';+  itoa(num1, &ptr);+  *ptr++ = ';';+  itoa(num2, &ptr);+  *ptr++ = code;+  put(buf, ptr - buf);+}++// set the cursor position, where (0,0) is home+void Screen::setpos(int row, int col)+{+  CSI('H', row + 1, col + 1);+}++// get the cursor position+void Screen::getpos(int *row, int *col)+{+#ifdef OS_WIN++  CONSOLE_SCREEN_BUFFER_INFO info;+  if (GetConsoleScreenBufferInfo(hConOut, &info))+  {+    if (row != NULL)+      *row = info.dwCursorPosition.Y;++    if (col != NULL)+      *col = info.dwCursorPosition.X;+  }++#else++  char buf[16];+  char *ptr = buf;++  // flush the key buffer before requesting DSR+  VKey::flush();++  int retries = 10;++retry:++  // request DSR+  put("\033[6n", 4);++  // receive DSR response CSI row;col R+  while (ptr < buf + sizeof(buf) - 1)+  {+    // collect response, 100ms timeout+    int ch = VKey::raw_in(100);++    if (ch == 'R')+      break;++    // interrupted or timed out?+    if (ch <= 0)+    {+      if (retries-- <= 0)+        return;++      goto retry;+    }++    *ptr++ = ch;+  }++  *ptr = '\0';++  if (row != NULL)+  {+    ptr = strchr(buf, '[');+    if (ptr != NULL)+      *row = atoi(ptr + 1) - 1;+  }++  if (col != NULL)+  {+    ptr = strchr(buf, ';');+    if (ptr != NULL)+      *col = atoi(ptr + 1) - 1;+  }++#endif+}++// get the screen size Screen::rows and Screen::cols+void Screen::getsize()+{+  // get current window size from ioctl+#if defined(OS_WIN)+  CONSOLE_SCREEN_BUFFER_INFO info;+  if (GetConsoleScreenBufferInfo(hConOut, &info))+  {+    rows = info.dwSize.Y;+    cols = info.dwSize.X;+  }+  else+#elif defined(TIOCGWIN)+  struct winsize winsize;+  if (ioctl(tty, TIOCGWIN, &winsize) == 0)+  {+    rows = winsize.ts_lines;+    cols = winsize.ts_cols;+  }+  else+#elif defined(TIOCGWINSZ)+  struct winsize winsize;+  if (ioctl(tty, TIOCGWINSZ, &winsize) == 0)+  {+    rows = winsize.ws_row;+    cols = winsize.ws_col;+  }+  else+#endif+  {+    // save cursor position, reset window scroll margins, move cursor to 999;999+    put("\0337\033[r\033[999;999H", 15);++    int row = -1;+    int col = -1;++    // get cursor position 0 <= row <= 999 and 0 <= col <= 999+    getpos(&row, &col);++    if (row > 0 && col > 0)+    {+      rows = row + 1;+      cols = col + 1;+    }+    else+    {+      rows = 24;+      cols = 80;+    }++    // restore cursor position+    put("\0338");+  }+}++// setup screen using an alternative screen buffer and optional title, returns true on success+bool Screen::setup(const char *title)+{+#ifdef OS_WIN++#ifdef ENABLE_VIRTUAL_TERMINAL_PROCESSING++  hConOut = CreateFileA("CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);++  if (hConOut != INVALID_HANDLE_VALUE)+  {+    GetConsoleMode(hConOut, &oldOutMode);++    DWORD outMode = oldOutMode | DISABLE_NEWLINE_AUTO_RETURN | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;++    if (!SetConsoleMode(hConOut, outMode))+    {+      CloseHandle(hConOut);+      hConOut = INVALID_HANDLE_VALUE;+      return false;+    }++#ifdef CP_UTF8+    SetConsoleOutputCP(CP_UTF8);+#endif+  }+  else+  {+    return false;+  }++#else++  return false;++#endif++#else++  tty = open("/dev/tty", O_RDWR);+  if (tty < 0)+  {+    if (isatty(STDOUT_FILENO) == 0)+      return false;+    tty = STDOUT_FILENO;+  }++  // enable window resize signal handler+  signal(SIGWINCH, Screen::sigwinch);++#endif++  // enable alternative screen buffer, soft reset, clear screen, reset colors+  put("\033[?1049h\033[!p\033[2J\033[m");++  // set title, when provided as argument+  if (title != NULL)+  {+    put("\033]0;");+    put(title);+    put('\a');+  }++  // determine window size+  getsize();++  // check width of U+3000, U+1F600 Emoji, U+20000 CJK+  put("\r 😀𠀀\033[1K");+  int col = -1;+  getpos(NULL, &col);+  if (col == -1)+    return false;+  double_width       = col > 3;+  double_width_Emoji = col > 5;+  double_width_CJK   = col > 4;++  // not monochrome+  mono = false;++  // cursor home+  home();++  return true;+}++// cleanup to restore main screen buffer+void Screen::cleanup()+{+#ifdef OS_WIN++  if (hConOut != INVALID_HANDLE_VALUE)+  {+    // disable alternative screen buffer+    put("\033[1;1H\033[2J\033[m\033[?1049l");++    SetConsoleMode(hConOut, oldOutMode);++    CloseHandle(hConOut);+  }++#else++  // remove window resize signal handler+  signal(SIGWINCH, SIG_DFL);++  // disable alternative screen buffer+  put("\033[1;1H\033[2J\033[m\033[?1049l");++#endif+}++// return character width, 0 (invalid character), 1 (single width) or 2 (double width)+int Screen::wchar_width(uint32_t wc)+{+  /* based on https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c with full table+     generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c"+     from https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt+     this is a compressed table of combining character ranges, stored as+     range.first << 8 | (range.last - range.first) */+  static const uint32_t combining[] = {+    0x3006f, 0x48303, 0x48801, 0x5912c, 0x5bf00, 0x5c101, 0x5c401, 0x5c700,+    0x60003, 0x61005, 0x64b13, 0x67000, 0x6d60e, 0x6e701, 0x6ea03, 0x70f00,+    0x71100, 0x7301a, 0x7a60a, 0x7eb08, 0x90101, 0x93c00, 0x94107, 0x94d00,+    0x95103, 0x96201, 0x98100, 0x9bc00, 0x9c103, 0x9cd00, 0x9e201, 0xa0101,+    0xa3c00, 0xa4101, 0xa4701, 0xa4b02, 0xa7001, 0xa8101, 0xabc00, 0xac104,+    0xac701, 0xacd00, 0xae201, 0xb0100, 0xb3c00, 0xb3f00, 0xb4102, 0xb4d00,+    0xb5600, 0xb8200, 0xbc000, 0xbcd00, 0xc3e02, 0xc4602, 0xc4a03, 0xc5501,+    0xcbc00, 0xcbf00, 0xcc600, 0xccc01, 0xce201, 0xd4102, 0xd4d00, 0xdca00,+    0xdd202, 0xdd600, 0xe3100, 0xe3406, 0xe4707, 0xeb100, 0xeb405, 0xebb01,+    0xec805, 0xf1801, 0xf3500, 0xf3700, 0xf3900, 0xf710d, 0xf8004, 0xf8601,+    0xf9007, 0xf9923, 0xfc600,+    0x102d03, 0x103200, 0x103601, 0x103900, 0x105801, 0x11609f, 0x135f00,+    0x171202, 0x173202, 0x175201, 0x177201, 0x17b401, 0x17b706, 0x17c600,+    0x17c90a, 0x17dd00, 0x180b02, 0x18a900, 0x192002, 0x192701, 0x193200,+    0x193902, 0x1a1701, 0x1b0003, 0x1b3400, 0x1b3604, 0x1b3c00, 0x1b4200,+    0x1b6b08, 0x1dc00a, 0x1dfe01, 0x200b04, 0x202a04, 0x206003, 0x206a05,+    0x20d01f, 0x302a05, 0x309901, 0xa80600, 0xa80b00, 0xa82501, 0xfb1e00,+    0xfe000f, 0xfe2003, 0xfeff00, 0xfff902,+    0x10a0102, 0x10a0501, 0x10a0c03, 0x10a3802, 0x10a3f00, 0x1d16702, 0x1d1730f,+    0x1d18506, 0x1d1aa03, 0x1d24202, 0xe000100, 0xe00205f, 0xe0100ef,+  };++  int min = 0;+  int max = sizeof(combining) / sizeof(uint32_t) - 1;++  // ignore invisible characters, such as invalid UTF-8+  if (wc == 0)+    return 0;++  // control characters are double width to display them e.g. as \t or ^I+  if (wc < 0x20 || wc == 0x7f)+    return 2;++  // binary search in table of non-spacing characters+  if (wc >= (combining[0] >> 8) && wc <= (combining[max] >> 8) + (combining[max] & 0xff))+  {+    while (max >= min)+    {+      int mid = (min + max) / 2;+      if (wc < (combining[mid] >> 8))+        max = mid - 1;+      else if (wc > (combining[mid] >> 8) + (combining[mid] & 0xff))+        min = mid + 1;+      else+        return 0;+    }+  }++  // if double wide character support is turned off, return 1+  if (!double_width)+    return 1;++  // if we arrive here, wc is not a combining or C0/C1 control character+  return 1 + +    (wc >= 0x1100 &&+     (wc <= 0x115f ||                   // Hangul Jamo init. consonants+      wc == 0x2329 || wc == 0x232a ||+      (wc >= 0x2e80 && wc <= 0xa4cf && wc != 0x303f) || // CJK ... Yi+      (wc >= 0xac00 && wc <= 0xd7a3) || // Hangul Syllables+      (wc >= 0xf900 && wc <= 0xfaff) || // CJK Compatibility Ideographs+      (wc >= 0xfe10 && wc <= 0xfe19) || // Vertical forms+      (wc >= 0xfe30 && wc <= 0xfe6f) || // CJK Compatibility Forms+      (wc >= 0xff00 && wc <= 0xff60) || // Fullwidth Forms+      (wc >= 0xffe0 && wc <= 0xffe6) ||+      (double_width_Emoji &&+       (wc >= 0x1f18e && wc <= 0x1f7ff)) || // Emoticons etc+      (double_width_CJK &&+       ((wc >= 0x20000 && wc <= 0x2fffd) || // CJK+        (wc >= 0x30000 && wc <= 0x3fffd)))));+}++// return UCS-4 code of the specified UTF-8 sequence, or 0 for invalid UTF-8+uint32_t Screen::wchar(const char *ptr, const char **endptr)+{+  uint32_t c1, c2, c3, c4;++  c1 = static_cast<unsigned char>(*ptr++);++  if (c1 <= 0x7f)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return c1;+  }++  if ((c1 & 0xc0) != 0xc0)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return 0; // incomplete UTF-8+  }++  c2 = static_cast<unsigned char>(*ptr++);++  if ((c2 & 0xc0) != 0x80)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return 0; // incomplete UTF-8+  }++  c2 &= 0x3f;++  if (c1 < 0xe0)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return (((c1 & 0x1f) << 6) | c2);+  }++  c3 = static_cast<unsigned char>(*ptr++);++  if ((c3 & 0xc0) != 0x80)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return 0; // incomplete UTF-8+  }++  c3 &= 0x3f;++  if (c1 < 0xf0)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return (((c1 & 0x0f) << 12) | (c2 << 6) | c3);+  }++  c4 = static_cast<unsigned char>(*ptr++);++  if ((c4 & 0xc0) != 0x80)+  {+    if (endptr != NULL)+      *endptr = ptr;+    return 0; // incomplete UTF-8+  }++  if (endptr != NULL)+    *endptr = ptr;++  return ((c1 & 0x07) << 18) | (c2 << 12) | (c3 << 6) | (c4 & 0x3f);+}++// emit text at the specified screen position, where (0,0) is home+void Screen::put(int row, int col, const char *text, size_t size, int skip, int wrap)+{+  if (size == std::string::npos)+    size = strlen(text);++  const char *end = text + size;++  int len = cols - col;++  if (len > 0 && row < rows)+  {+    const char *next;++    if (skip > 0)+    {+      // skip text to display+      int num = skip;++      // collect ANSI CSI sequences+      char codebuf[SCREEN_MAX_CODELEN];+      char *codeptr = codebuf;++      while (num > 0 && text < end)+      {+        switch (*text)+        {+          case '\t':+            num -= 1 + (~(cols - num) & 7);+            ++text;+            break;++          case '\n':+            setpos(row, col);+            erase();+            ++row;+            if (row >= rows)+              return;+            num = skip;+            ++text;+            break;++          case '\r':+            num = skip;+            ++text;+            break;++          case '\033':+            next = text;+            ++next;+            if (*next == '[')+            {+              ++next;+              while (next < end && !isalpha(*next))+                ++next;+            }+            if (next < end)+              ++next;+            if (!mono && codeptr + (next - text) < codebuf + SCREEN_MAX_CODELEN)+            {+              memcpy(codeptr, text, next - text);+              codeptr += next - text;+            }+            text = next;+            break;++          default:+            int width = mbchar_width(text, &next);+            num -= width;+            if (num < 0)+            {+              // cut a double wide character in half?+              if (width == 2 && num == -1)+              {+                ++num;+                ++len;+              }+            }+            text = next;+        }+      }++      if (text < end)+      {+        put(codebuf, codeptr - codebuf);+        if (sel)+          invert();+      }+    }++    const char *ptr = text;++    setpos(row, col);++    while (ptr != NULL && ptr < end)+    {+      switch (*ptr)+      {+        int tab;++        case '\t':+          put(text, ptr - text);+          tab = 1 + (~(cols - len) & 7);+          len -= tab;+          if (len < 0)+          {+            erase();+            if (wrap >= 0)+            {+              ++row;+              if (row >= rows)+                return;+              col = wrap;+              setpos(row, col);+              len = cols - col;+              text = ++ptr;+            }+            else+            {+              text = strchr(ptr, '\n');+              ptr = text;+            }+          }+          else+          {+            put("        ", tab);+            text = ++ptr;+          }+          break;++        case '\n':+          put(text, ptr - text);+          erase();+          ++row;+          if (row >= rows)+            return;+          setpos(row, col);+          text = ++ptr;+          col = 0;+          len = cols - col;+          break;++        case '\r':+          ++ptr;+          col = 0;+          len = cols - col;+          break;++        case '\033':+          if (mono)+            put(text, ptr - text);+          ++ptr;+          if (*ptr == '[')+          {+            ++ptr;+            while (ptr < end && !isalpha(*ptr))+              ++ptr;+          }+          if (ptr < end)+            ++ptr;+          if (mono)+          {+            text = ptr;+          }+          else if (sel)+          {+            put(text, ptr - text);+            invert();+            text = ptr;+          }+          break;++        case 0x7f:+          put(text, ptr - text);+          invert();+          put("^?");+          noinvert();+          text = ++ptr;+          break;++        default:+          uint32_t wc = wchar(ptr, &next);+          len -= wchar_width(wc);+          if (len < 0)+          {+            put(text, ptr - text);+            if (wrap >= 0)+            {+              ++row;+              if (row >= rows)+                return;+              col = wrap;+              setpos(row, col);+              len = cols - col;+              text = ptr;+            }+            else+            {+              text = strchr(ptr, '\n');+              ptr = text;+            }+          }+          else if (wc <= 0x1f)+          {+            put(text, ptr - text);+            invert();+            char buf[2] = { '^', static_cast<char>('@' + wc) };+            put(buf, 2);+            noinvert();+            text = ++ptr;+          }+          else+          {+            ptr = next;+          }+      }+    }++    put(text, ptr - text);++    normal();++    if (len > 0)+    {+      erase();++      if (sel)+      {+        invert();+        put(' ');+        normal();+      }+    }+  }+}++// convert integer to text+void Screen::itoa(int num, char **pptr)+{+  unsigned unum = static_cast<unsigned>(abs(num));+  unsigned div = 1;+  char *ptr = *pptr;++  if (num < 0)+    *ptr++ = '-';++  while (unum/div >= 10)+    div *= 10;++  do+  {+    unsigned ch = '0' + unum/div;+    *ptr++ = ch + (ch > '9' ? 7 : 0);+    unum %= div;+    div /= 10;+  } while (div > 0);++  *ptr = '\0';+  *pptr = ptr;+}++// SIGWINCH signal handler+void Screen::sigwinch(int)+{+  getsize();+}++int  Screen::rows = 24;    // number of screen rows+int  Screen::cols = 80;    // number of screen columns+bool Screen::mono = false; // monochrome++#ifdef OS_WIN++// Windows console state+HANDLE Screen::hConOut;+DWORD  Screen::oldOutMode;++#else++// Unix/Linux terminal state+int Screen::tty = STDOUT_FILENO;++#endif++bool Screen::sel                = false;+bool Screen::double_width       = false;+bool Screen::double_width_Emoji = false;+bool Screen::double_width_CJK   = false;

src/screen.hpp

new file mode 100644@@ -0,0 +1,283 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      screen.hpp+@brief     ANSI SGR code controlled screen API - static, not thread safe+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#ifndef SCREEN_HPP+#define SCREEN_HPP++#include "ugrep.hpp"+#include "vkey.hpp"++#include <cinttypes>++#ifndef OS_WIN+#include <unistd.h>+#endif++class Screen {++ public:++  // emit ANSI SGR CSI sequence with one numeric parameter+  static void CSI(int code, int num);++  // emit ANSI SGR CSI sequence with two numeric parameters+  static void CSI(int code, int num1, int num2);++  // clear screen, normal font and colors+  static void clear()+  {+    put("\033[1;1H\033[m\033[J");+  }++  // erase from cursor to the end of the line+  static void erase()+  {+    put("\033[K");+  }++  // erase from cursor to the end of the screen+  static void end()+  {+    put("\033[J");+  }++  // move cursor home (0,0)+  static void home()+  {+    put("\033[1;1H");+  }++  // move cursor up+  static void up(int num = 1)+  {+    CSI('A', num);+  }++  // move cursor down+  static void down(int num = 1)+  {+    CSI('B', num);+  }++  // move cursor forward+  static void forward(int num = 1)+  {+    CSI('C', num);+  }++  // move cursor back+  static void back(int num = 1)+  {+    CSI('D', num);+  }++  // scroll screen up+  static void pan_up(int num = 1)+  {+    CSI('S', num);+  }++  // scroll screen down+  static void pan_down(int num = 1)+  {+    CSI('T', num);+  }++  // normal font and colors+  static void normal()+  {+    put("\033[m");+  }++  // show selections+  static void select()+  {+    invert();+    sel = true;+  }++  // hide selections+  static void deselect()+  {+    noinvert();+    sel = false;+  }+  // enable bold font and/or bright colors+  static void bold()+  {+    put("\033[1m");+  }++  // disable bold font and/or bright colors+  static void nobold()+  {+    put("\033[21m");+  }++  // enable underline+  static void underline()+  {+    put("\033[4m");+  }++  // disable underline+  static void nounderline()+  {+    put("\033[24m");+  }++  // enable invert (reverse video)+  static void invert()+  {+    put("\033[7m");+  }++  // disable invert (reverse video)+  static void noinvert()+  {+    put("\033[27m");+  }++  // save the cursor position+  static void save()+  {+    put("\0337");+  }++  // restore the cursor position, when saved+  static void restore()+  {+    put("\0338");+  }++  // emit alert (bell)+  static void alert()+  {+    put('\a');+  }++  // set the cursor position, where (0,0) is home+  static void setpos(int row, int col);++  // get the cursor position+  static void getpos(int *row, int *col);++  // get the screen size Screen::rows and Screen::cols+  static void getsize();++  // setup screen using an alternative screen buffer and optional title+  static bool setup(const char *title = NULL);++  // cleanup to restore main screen buffer+  static void cleanup();++  // return character width, 0 (invalid character), 1 (single width) or 2 (double width)+  static int wchar_width(uint32_t wc);++  // return UCS-4 code of the specified UTF-8 sequence, or 0 for invalid UTF-8+  static uint32_t wchar(const char *ptr, const char **endptr);++  // return character width of the specified UTF-8 sequence, 0 (invalid character), 1 (single width) or 2 (double width)+  static int mbchar_width(const char *ptr, const char **endptr)+  {+    return wchar_width(wchar(ptr, endptr));+  }++  // emit text+  static void put(const char *text, size_t size)+  {+#ifdef OS_WIN+    WriteFile(hConOut, text, size, NULL, NULL);+#else+    write(tty, text, size);+#endif+  }++  // emit character+  static void put(int ch)+  {+    char buf = static_cast<char>(ch);+    put(&buf, 1);+  }++  // emit text+  static void put(const char *text)+  {+    put(text, strlen(text));+  }++  // emit text at the specified screen position, where (0,0) is home+  static void put(int row, int col, const std::string& text, int skip = 0, int wrap = -1)+  {+    put(row, col, text.c_str(), text.size(), skip, wrap);+  }++  // emit text at the specified screen position, where (0,0) is home+  static void put(int row, int col, const char *text, size_t size = std::string::npos, int skip = 0, int wrap = -1);++  static int  rows; // number of screen rows+  static int  cols; // number of screen columns+  static bool mono; // monochrome++ protected:++  // convert integer to text+  static void itoa(int num, char **pptr);++  // SIGWINCH signal handler+  static void sigwinch(int);++#ifdef OS_WIN++  // Windows console+  static HANDLE hConOut;+  static DWORD  oldOutMode;++#else++  // Unix/Linux terminal+  static int tty;++#endif++  static bool sel;+  static bool double_width;+  static bool double_width_Emoji;+  static bool double_width_CJK;++};++#endif

src/ugrep.cpp

@@ -67,15 +67,15 @@ Prebuilt executables are located in ugrep/bin. */  // ugrep version-#define UGREP_VERSION "1.8.1"+#define UGREP_VERSION "2.0.0"++#include "ugrep.hpp"+#include "query.hpp"  #include <reflex/bits.h>-#include <reflex/input.h> #include <reflex/matcher.h> #include <iomanip> #include <cctype>-#include <cstring>-#include <cerrno> #include <limits> #include <algorithm> #include <functional>@@ -88,15 +88,10 @@ Prebuilt executables are located in ugrep/bin. #include <mutex> #include <condition_variable> -// check if we are compiling for a windows OS, but not Cygwin or MinGW-#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__BORLANDC__)) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__)-# define OS_WIN-#endif+#ifdef OS_WIN  // compiling for a windows OS, except Cygwin and MinGW -#ifdef OS_WIN- // optionally enable --color=auto by default // #define WITH_COLOR @@ -115,91 +110,17 @@ Prebuilt executables are located in ugrep/bin. // optionally enable liblzma for -z // #define HAVE_LIBLZMA -// disable min/max macros to use std::min and std::max-#define NOMINMAX--#include <windows.h>-#include <tchar.h> -#include <stdio.h>-#include <io.h>-#include <strsafe.h>--#define STDIN_FILENO  0-#define STDOUT_FILENO 1-#define STDERR_FILENO 2--#define PATHSEPCHR '\\'-#define PATHSEPSTR "\\"--// POSIX read() and write() return type is ssize_t-typedef int ssize_t;--// POSIX pipe() emulation-int pipe(int fd[2])-{-  HANDLE pipe_r = NULL;-  HANDLE pipe_w = NULL;-  if (CreatePipe(&pipe_r, &pipe_w, NULL, 0))-  {-    fd[0] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_r), 0);-    fd[1] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_w), 0);-    return 0;-  }-  return 1;-}--// POSIX popen()-FILE *popen(const char *command, const char *mode)-{-  return _popen(command, mode);-}--// POSIX pclose()-int pclose(FILE *stream)-{-  return _pclose(stream);-}+#include <codecvt>  #else  // not compiling for a windows OS -#include <dirent.h>-#include <stdio.h> #include <signal.h>+#include <dirent.h> #include <sys/stat.h> #include <unistd.h> -#ifdef HAVE_CONFIG_H-# include "config.h"-#endif--#ifdef HAVE_MMAP-# include <sys/mman.h>-#endif--#ifdef HAVE_SYS_STATVFS_H-# include <sys/statvfs.h>-#endif--#define PATHSEPCHR '/'-#define PATHSEPSTR "/"--#endif--// platform -- see configure.ac-#if !defined(PLATFORM)-# if defined(OS_WIN)-#  if defined(_WIN32)-#   define PLATFORM "WIN32"-#  elif defined(_WIN64)-#   define PLATFORM "WIN64"-#  else-#   define PLATFORM "WIN"-#  endif-# else-#  define PLATFORM ""-# endif #endif  // fast gitignore-style glob matching@@ -305,7 +226,7 @@ int pclose(FILE *stream) # define MAX_MMAP_SIZE 2147483648LL #endif -// default --min-mmap+// default --mmap #define DEFAULT_MIN_MMAP_SIZE MIN_MMAP_SIZE  // default --max-mmap: mmap is enabled by default, unless disabled with WITH_NO_MMAP@@ -315,6 +236,9 @@ int pclose(FILE *stream) # define DEFAULT_MAX_MMAP_SIZE MAX_MMAP_SIZE #endif +// default --query delay is 500ms+#define DEFAULT_QUERY_DELAY 5+ // pretty is disabled by default, unless enabled with WITH_PRETTY #ifdef WITH_PRETTY # define DEFAULT_PRETTY true@@ -346,7 +270,8 @@ int pclose(FILE *stream) #define UNDEFINED static_cast<size_t>(~0UL)  // the -M MAGIC pattern DFAs constructed before threads start, read-only afterwards-reflex::Pattern magic_pattern;+reflex::Pattern magic_pattern; // concurrent access is thread safe+reflex::Matcher magic_matcher; // concurrent access is not thread safe  // number of warnings given std::atomic_size_t warnings;@@ -361,18 +286,20 @@ bool tty_term = false; bool color_term = false;  #ifndef OS_WIN-static void sigint_reset_tty(int)++static void sigint(int) {   // reset SIGINT to the default handler   signal(SIGINT, SIG_DFL);    // be nice, reset colors on interrupt when sending output to a color TTY   if (color_term)-    color_term = write(1, "\033[0m", 4) > 0; // appease -Wunused-result+    color_term = write(1, "\033[m", 3) > 0; // appease -Wunused-result    // signal SIGINT again   kill(getpid(), SIGINT); }+ #endif  // ANSI SGR substrings extracted from GREP_COLORS@@ -388,6 +315,9 @@ char color_cn[COLORLEN]; // column number char color_bn[COLORLEN]; // byte offset char color_se[COLORLEN]; // separator +char match_ms[COLORLEN]; // --match: matched text in a selected line+char match_mc[COLORLEN]; // --match: matched text in a context line+ const char *color_del     = ""; // erase line after the cursor const char *color_off     = ""; // disable colors @@ -396,19 +326,16 @@ const char *color_error   = ""; // stderr error text const char *color_warning = ""; // stderr warning text const char *color_message = ""; // stderr error or warning message text -// default file encoding is plain (no conversion), detects UTF-8/16/32 automatically-reflex::Input::file_encoding_type flag_encoding_type = reflex::Input::file_encoding::plain;--// -D, --devices and -d, --directories-enum class Action { SKIP, READ, RECURSE } flag_devices_action, flag_directories_action;+// redirectable source is standard input by default or a pipe+FILE *source = stdin; -// output destination is standard output by default or a pipe to --pager+// redirectable output destination is standard output by default or a pipe FILE *output = stdout;  #ifndef OS_WIN  // output file stat is available when stat() result is true-bool output_stat_result = false;+bool output_stat_result  = false; bool output_stat_regular = false; struct stat output_stat; @@ -468,6 +395,7 @@ bool flag_csv                      = false; bool flag_json                     = false; bool flag_xml                      = false; bool flag_stdin                    = false;+bool flag_all_threads              = false; bool flag_sort_name                = false; bool flag_sort_size                = false; bool flag_sort_atime               = false;@@ -479,9 +407,13 @@ bool flag_no_hidden                = DEFAULT_HIDDEN; bool flag_hex_hbr                  = true; bool flag_hex_cbr                  = true; bool flag_hex_chr                  = true;+Action flag_devices_action         = Action::SKIP;+Action flag_directories_action     = Action::SKIP;+size_t flag_query                  = 0; size_t flag_after_context          = 0; size_t flag_before_context         = 0;-size_t flag_depth                  = 0;+size_t flag_min_depth              = 0;+size_t flag_max_depth              = 0; size_t flag_max_count              = 0; size_t flag_max_files              = 0; size_t flag_min_line               = 0;@@ -491,11 +423,11 @@ size_t flag_min_magic              = 1; size_t flag_jobs                   = 0; size_t flag_tabs                   = 8; size_t flag_hex_columns            = 16;-size_t flag_min_mmap               = DEFAULT_MIN_MMAP_SIZE; size_t flag_max_mmap               = DEFAULT_MAX_MMAP_SIZE; size_t flag_min_steal              = MIN_STEAL; const char *flag_pager             = FLAG_PAGER; const char *flag_color             = FLAG_COLOR;+const char *flag_apply_color       = NULL; const char *flag_hexdump           = NULL; const char *flag_colors            = NULL; const char *flag_encoding          = NULL;@@ -532,6 +464,11 @@ std::vector<std::string> flag_exclude_from; std::vector<std::string> flag_exclude_fs; std::vector<std::string> flag_not_exclude; std::vector<std::string> flag_not_exclude_dir;+reflex::Input::file_encoding_type flag_encoding_type = reflex::Input::file_encoding::plain;++// ugrep command-line arguments pointing to argv[]+const char *arg_pattern = NULL;+std::vector<const char*> arg_files;  void set_color(const char *colors, const char *parameter, char color[COLORLEN]); void trim(std::string& line);@@ -539,7 +476,7 @@ void trim_nl(std::string& line); bool is_output(ino_t inode); size_t strtonum(const char *string, const char *message); size_t strtopos(const char *string, const char *message);-void strtopos2(const char *string, size_t& pos1, size_t& pos2, const char *message);+void strtopos2(const char *string, size_t& pos1, size_t& pos2, const char *message, bool optional_first = false);  void extend(FILE *file, std::vector<std::string>& files, std::vector<std::string>& dirs, std::vector<std::string>& not_files, std::vector<std::string>& not_dirs); void format(const char *format, size_t matches);@@ -547,9 +484,6 @@ void help(const char *message = NULL, const char *arg = NULL); void version(); void is_directory(const char *pathname); void cannot_decompress(const char *pathname, const char *message);-void warning(const char *message, const char *arg);-void error(const char *message, const char *arg);-void abort(const char *message, const std::string& what);  // read a line from buffered input, returns true when eof inline bool getline(reflex::BufferedInput& input, std::string& line)@@ -668,37 +602,6 @@ inline bool is_output(ino_t inode) #endif } -#ifdef OS_WIN--// Wrap Windows _dupenv_s()-inline int dupenv_s(char **ptr, const char *name)-{-  size_t len;-  return _dupenv_s(ptr, &len, name);-}--#else--// Windows-like dupenv_s()-inline int dupenv_s(char **ptr, const char *name)-{-  if (ptr == NULL)-    return EINVAL;-  *ptr = NULL;-  const char *env = getenv(name);-  if (env != NULL && (*ptr = strdup(env)) == NULL)-    return ENOMEM;-  return 0;-}--// Windows-compatible fopen_s()-inline int fopen_s(FILE **file, const char *filename, const char *mode)-{-  return (*file = fopen(filename, mode)) == NULL ? errno : 0;-}--#endif- // specify a line of input for the matcher to read, matcher must not use text() or rest() to keep the line contents unmodified inline void read_line(reflex::AbstractMatcher *matcher, const char *line, size_t size) {@@ -729,6 +632,15 @@ struct Stats {       fileno(0)   { } +  // reset stats+  void reset()+  {+    files = 0;+    dirs = 0;+    fileno = 0;+    ignore.clear();+  }+   // score a file searched   void score_file()   {@@ -781,7 +693,8 @@ struct Stats {     fprintf(output, ": %zu matching\n", n);     if (warnings > 0)       fprintf(output, "Received %zu warning%s\n", warnings.load(), warnings == 1 ? "" : "s");-    if (flag_no_hidden ||+    if (flag_min_depth > 0 || flag_max_depth > 0 ||+        flag_no_hidden ||         !flag_ignore_files.empty() ||         !flag_file_magic.empty() ||         !flag_include.empty() ||@@ -796,6 +709,12 @@ struct Stats {         !flag_not_exclude_dir.empty())     {       fprintf(output, "The following pathname selections and restrictions were applied:\n");+      if (flag_min_depth > 0 && flag_max_depth > 0)+        fprintf(output, "--depth=%zu,%zu\n", flag_min_depth, flag_max_depth);+      else if (flag_min_depth > 0)+        fprintf(output, "--depth=%zu,\n", flag_min_depth);+      else if (flag_max_depth > 0)+        fprintf(output, "--depth=%zu\n", flag_max_depth);       if (flag_no_hidden)         fprintf(output, "--no-hidden\n");       for (auto& i : flag_ignore_files)@@ -885,7 +804,7 @@ bool MMap::file(reflex::Input& input, const char*& base, size_t& size)    // is this file not too small or too large? if -P is used, try to mmap a large file without imposing a max   size = static_cast<size_t>(buf.st_size);-  if (size < flag_min_mmap || (size > flag_max_mmap && !flag_perl_regexp))+  if (size < MIN_MMAP_SIZE || (size > flag_max_mmap && !flag_perl_regexp))     return false;    // mmap the file and round requested size up to 4K (typical page size)@@ -922,7 +841,7 @@ struct Output {    typedef std::list<Buffer> Buffers; // buffers container -  // sync state to synchronize output of multiple threads+  // sync state to synchronize output produced by multiple threads, UNORDERED or ORDERED by slot number   struct Sync {      enum class Mode { UNORDERED, ORDERED };@@ -1030,7 +949,7 @@ struct Output {       }     } -    Mode                         mode;       // UNORDERED or ORDERED (--sort) mode+    Mode                         mode;       // UNORDERED or ORDERED (--sort by slot) mode     std::mutex                   mutex;      // mutex to synchronize output     std::condition_variable      turn;       // ORDERED: cv for threads to take turns by checking if last slot is their slot     size_t                       next;       // ORDERED: next slot assigned to thread@@ -1295,7 +1214,12 @@ struct Output {         // flush the buffers container to the designated output file, pipe, or stream         for (Buffers::iterator i = buffers.begin(); i != buf; ++i)         {-          if (fwrite(i->data, 1, SIZE, file) < SIZE)+          size_t nwritten;++          while ((nwritten = fwrite(i->data, 1, SIZE, file)) < SIZE && errno == EINTR)+            continue;++          if (nwritten < SIZE)           {             eof = true;             break;@@ -1305,10 +1229,20 @@ struct Output {         if (!eof)         {           size_t num = cur - buf->data;-          if (num > 0 && fwrite(buf->data, 1, num, file) < num)++          if (num > 0)+          {+            size_t nwritten;++            while ((nwritten = fwrite(buf->data, 1, num, file)) < num && errno == EINTR)+              continue;++            if (nwritten < num)+              eof = true;+          }++          if (!eof && fflush(file) != 0)             eof = true;-          else-            fflush(file);         }       } @@ -1395,7 +1329,7 @@ struct Output { };  // we could use C++20 constinit, though declaring this here is more efficient:-const char *Output::Dump::color_hex[4] = { color_ms, color_sl, color_mc, color_cx };+const char *Output::Dump::color_hex[4] = { match_ms, color_sl, match_mc, color_cx };  // dump matching data in hex void Output::Dump::hex(short mode, size_t byte_offset, const char *data, size_t size, const char *separator)@@ -1507,7 +1441,7 @@ void Output::Dump::line(const char *separator)           out.str(color_hex[last_hex_color]);         }         byte &= 0xff;-        if (flag_color != NULL)+        if (flag_apply_color != NULL)         {           if (byte < 0x20)           {@@ -2378,8 +2312,14 @@ struct Grep { #endif   { } +  // search the specified files or standard input for pattern matches+  virtual void ugrep();++  // search file or directory for pattern matches+  Type select(size_t level, const char *pathname, const char *basename, int type, ino_t& inode, uint64_t& info, bool is_argument = false);+   // recurse a directory-  virtual void recurse(size_t level, reflex::Matcher& magic, const char *pathname);+  virtual void recurse(size_t level, const char *pathname);    // search a file   virtual void search(const char *pathname);@@ -2390,7 +2330,7 @@ struct Grep {     if (pathname == NULL)     {       pathname = flag_label;-      file = stdin;+      file = source;     }     else if (fopen_s(&file, pathname, (flag_binary || flag_decompress ? "rb" : "r")) != 0)     {@@ -3706,7 +3646,7 @@ void GrepWorker::execute() {   Job job; -  while (true)+  while (!out.eof)   {     // wait for next job     next_job(job);@@ -3881,15 +3821,82 @@ const struct { const char *type; const char *extensions; const char *magic; } ty   { NULL,           NULL,                                                       NULL } }; -// function protos-void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files);-Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, const char *basename, int type, ino_t& inode, uint64_t& info, bool is_argument = false);+// function protos for functions used in main()+void options(int argc, const char **argv);+void termina();+void ugrep();  // ugrep main()-int main(int argc, char **argv)+int main(int argc, const char **argv)+{+#ifdef OS_WIN++  std::vector<std::string> args;++  LPWSTR *argws = CommandLineToArgvW(GetCommandLineW(), &argc);++  if (argws == NULL)+    error("cannot parse command line arguments", "CommandLineToArgvW failed");++  // convert Unicode command line arguments argws[] to UTF-8 arguments argv[]+  args.resize(argc);+  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> conversion;+  for (int i = 0; i < argc; ++i)+  {+    args[i] = conversion.to_bytes(argws[i]);+    argv[i] = args[i].c_str();+  }++  LocalFree(argws);++#endif++#ifndef OS_WIN++  // ignore SIGPIPE+  signal(SIGPIPE, SIG_IGN);++  // reset color on SIGINT+  signal(SIGINT, sigint);++#endif++  options(argc, argv);++  if (flag_query > 0)+  {+    if (!flag_no_messages && warnings > 0)+      abort("option -Q: warnings are present, use -s to ignore");++    Query::query();+  }+  else+  {+    if (!flag_no_messages && flag_pager != NULL && warnings > 0)+      abort("option --pager: warnings are present, use -s to ignore");++    try+    {+      ugrep();+    }++    catch (reflex::regex_error& error)+    {+      abort("error: ", error.what());+    }++    catch (std::exception& error)+    {+      abort("exception: ", error.what());+    }+  }++  return warnings == 0 && stats.found_any_file() ? EXIT_OK : EXIT_FAIL;+}++// parse the command-line options+void options(int argc, const char **argv) {-  const char *pattern = NULL;-  std::vector<const char*> files;   bool options = true;    // parse ugrep command-line options and arguments@@ -3955,7 +3962,7 @@ int main(int argc, char **argv)             else if (strcmp(arg, "decompress") == 0)               flag_decompress = true;             else if (strncmp(arg, "depth=", 6) == 0)-              flag_depth = strtopos(arg + 6, "invalid argument --depth=");+              strtopos2(arg + 6, flag_min_depth, flag_max_depth, "invalid argument --depth=", true);             else if (strcmp(arg, "dereference") == 0)               flag_dereference = true;             else if (strcmp(arg, "dereference-recursive") == 0)@@ -4058,12 +4065,10 @@ int main(int argc, char **argv)               flag_max_count = strtopos(arg + 10, "invalid argument --max-count=");             else if (strncmp(arg, "max-files=", 10) == 0)               flag_max_files = strtopos(arg + 10, "invalid argument --max-files=");-            else if (strncmp(arg, "max-mmap=", 9) == 0)-              flag_max_mmap = strtopos(arg + 9, "invalid argument --max-mmap=");-            else if (strncmp(arg, "min-mmap=", 9) == 0)-              flag_min_mmap = strtopos(arg + 9, "invalid argument --min-mmap=");             else if (strncmp(arg, "min-steal=", 10) == 0)               flag_min_steal = strtopos(arg + 10, "invalid argument --min-steal=");+            else if (strncmp(arg, "mmap=", 5) == 0)+              flag_max_mmap = strtopos(arg + 5, "invalid argument --mmap=");             else if (strcmp(arg, "mmap") == 0)               flag_max_mmap = MAX_MMAP_SIZE;             else if (strncmp(arg, "neg-regexp=", 11) == 0)@@ -4080,6 +4085,8 @@ int main(int argc, char **argv)               flag_no_messages = true;             else if (strcmp(arg, "no-mmap") == 0)               flag_max_mmap = 0;+            else if (strcmp(arg, "no-pretty") == 0)+              flag_pretty = false;             else if (strcmp(arg, "null") == 0)               flag_null = true;             else if (strcmp(arg, "only-line-number") == 0)@@ -4094,6 +4101,10 @@ int main(int argc, char **argv)               flag_perl_regexp = true;             else if (strcmp(arg, "pretty") == 0)               flag_pretty = true;+            else if (strcmp(arg, "query") == 0)+              flag_query = DEFAULT_QUERY_DELAY;+            else if (strncmp(arg, "query=", 6) == 0)+              flag_query = strtopos(arg + 6, "invalid argument --query=");             else if (strcmp(arg, "quiet") == 0 || strcmp(arg, "silent") == 0)               flag_quiet = flag_no_messages = true;             else if (strncmp(arg, "range=", 6) == 0)@@ -4131,7 +4142,27 @@ int main(int argc, char **argv)             else if (strcmp(arg, "xml") == 0)               flag_xml = true;             else-              help("invalid option --", arg);+            {+              if (isdigit(*arg))+              {+                if (flag_max_depth > 0)+                {+                  if (flag_min_depth == 0)+                    flag_min_depth = flag_max_depth;+                  flag_max_depth = strtopos(arg, "invalid argument --");+                  if (flag_min_depth > flag_max_depth)+                    help("invalid argument -", arg);+                }+                else+                {+                  strtopos2(arg, flag_min_depth, flag_max_depth, "invalid argument --", true);+                }+              }+              else+              {+                help("invalid option --", arg);+              }+            }             is_grouped = false;             break; @@ -4366,13 +4397,16 @@ int main(int argc, char **argv)            case 'Q':             ++arg;-            if (*arg)-              flag_encoding = &arg[*arg == '='];-            else if (++i < argc)-              flag_encoding = argv[i];+            if (*arg == '=' || isdigit(*arg))+            {+              flag_query = strtopos(&arg[*arg == '='], "invalid argument -Q=");+              is_grouped = false;+            }             else-              help("missing ENCODING argument for option -:");-            is_grouped = false;+            {+              flag_query = DEFAULT_QUERY_DELAY;+              --arg;+            }             break;            case 'q':@@ -4471,12 +4505,19 @@ int main(int argc, char **argv)           case '7':           case '8':           case '9':-            flag_depth = *arg - '0';+            if (flag_min_depth == 0 && flag_max_depth > 0)+              flag_min_depth = flag_max_depth;+            flag_max_depth = *arg - '0';+            if (flag_min_depth > flag_max_depth)+              help("invalid argument -", arg);             break;            default:             help("invalid option -", arg);         }++        if (!is_grouped)+          break;       }     }     else if (options && strcmp(arg, "-") == 0)@@ -4484,31 +4525,18 @@ int main(int argc, char **argv)       // read standard input       flag_stdin = true;     }-    else if (pattern == NULL && flag_file.empty())+    else if (arg_pattern == NULL && flag_file.empty())     {       // no regex pattern specified yet, so assume it is PATTERN-      pattern = arg;+      arg_pattern = arg;     }     else     {       // otherwise add the file argument to the list of FILE files-      files.emplace_back(arg);+      arg_files.emplace_back(arg);     }   } -#ifndef OS_WIN-  // ignore SIGPIPE-  signal(SIGPIPE, SIG_IGN);-  // reset color on SIGINT-  signal(SIGINT, sigint_reset_tty);-#endif--#ifndef HAVE_LIBZ-  // -z: but we don't have libz-  if (flag_decompress)-    help("option -z is not available in this build configuration of ugrep");-#endif-   // -t list: list table of types and exit   if (flag_file_types.size() == 1 && flag_file_types[0] == "list")   {@@ -4524,6 +4552,42 @@ int main(int argc, char **argv)     exit(EXIT_ERROR);   } +#ifndef HAVE_LIBZ+  // -z: but we don't have libz+  if (flag_decompress)+    help("option -z is not available in this build configuration of ugrep");+#endif++  // -P disables -G+  if (flag_perl_regexp)+  {+#if defined(HAVE_PCRE2) || defined(HAVE_BOOST_REGEX)+    flag_basic_regexp = false;+#else+    help("option -P is not available in this build configuration of ugrep");+#endif+  }++  // check TTY info and set colors (warnings and errors may occur from here on)+  terminal();++  // --encoding: parse ENCODING value+  if (flag_encoding != NULL)+  {+    int i;++    // scan the format_table[] for a matching encoding+    for (i = 0; format_table[i].format != NULL; ++i)+      if (strcmp(flag_encoding, format_table[i].format) == 0)+        break;++    if (format_table[i].format == NULL)+      help("invalid argument --encoding=ENCODING");++    // encoding is the file encoding used by all input files, if no BOM is present+    flag_encoding_type = format_table[i].encoding;+  }+   // --binary-files: normalize by assigning flags   if (strcmp(flag_binary_files, "without-matches") == 0)     flag_binary_without_matches = true;@@ -4536,7 +4600,7 @@ int main(int argc, char **argv)   else if (strcmp(flag_binary_files, "binary") != 0)     help("invalid argument --binary-files=TYPE, valid arguments are 'binary', 'without-match', 'text', 'hex', and 'with-hex'"); -  // --hexdump+  // --hexdump: normalize by assigning flags   if (flag_hexdump != NULL)   {     if (isdigit(*flag_hexdump))@@ -4554,324 +4618,63 @@ int main(int argc, char **argv)     if (!flag_with_hex)       flag_hex = true;   }+  +  // --tabs: value should be 1, 2, 4, or 8+  if (flag_tabs && flag_tabs != 1 && flag_tabs != 2 && flag_tabs != 4 && flag_tabs != 8)+    help("invalid argument --tabs=NUM, valid arguments are 1, 2, 4, or 8"); -  // --match: same as specifying an '' empty pattern argument if no patterns are specified+  // --match: same as specifying an empty "" pattern argument   if (flag_match)-    flag_regexp.emplace_back("");+    arg_pattern = "";++  // if no regex pattern is specified and no -f file and not -Q, then exit with usage message+  if (arg_pattern == NULL && flag_regexp.empty() && flag_file.empty() && flag_query == 0)+    help("no PATTERN specified: use --match or an empty \"\" pattern to match all input"); -  // regex PATTERN specified-  if (pattern != NULL)+  // regex PATTERN should be a FILE argument when -Q or -e PATTERN is specified+  if (arg_pattern != NULL && (flag_query > 0 || !flag_regexp.empty()))   {-    // if no regex specified, then add pattern else add to the front of FILE args-    if (flag_regexp.empty())-      flag_regexp.emplace_back(pattern);-    else-      files.insert(files.begin(), pattern);+    arg_files.insert(arg_files.begin(), arg_pattern);+    arg_pattern = NULL;   }-  -  // if no regex pattern is specified and no -f file then exit with usage message-  if (flag_regexp.empty() && flag_file.empty())-    help(""); -  // -x: enable -Y-  if (flag_line_regexp)-    flag_empty = true;--  // the regex compiled from PATTERN-  std::string regex;--  // -F: make newline-separated lines in regex literal with \Q and \E-  const char *Q = flag_fixed_strings ? "\\Q" : "";-  const char *E = flag_fixed_strings ? "\\E|" : "|";+  // -D: check ACTION value+  if (strcmp(flag_devices, "skip") == 0)+    flag_devices_action = Action::SKIP;+  else if (strcmp(flag_devices, "read") == 0)+    flag_devices_action = Action::READ;+  else+    help("invalid argument --devices=ACTION, valid arguments are 'skip' and 'read'"); -  // combine all -e PATTERN into a single regex string for matching-  for (auto& pattern : flag_regexp)+  // normalize -R (--dereference-recurse) option+  if (strcmp(flag_directories, "dereference-recurse") == 0)   {-    // empty PATTERN matches everything-    if (pattern.empty())-    {-      // pattern ".*\n?|" could be used throughout without flag_empty = true, but this garbles output for -o, -H, -n, etc.-      if (flag_line_regexp)-      {-        regex.append("^$|");-      }-      else if (flag_hex)-      {-        regex.append(".*\n?|");--        // we're matching everything-        flag_match = true;-      }-      else-      {-        regex.append(".*|");+    flag_directories = "recurse";+    flag_dereference = true;+  } -        // we're matching everything-        flag_match = true;-      }+  // -d: check ACTION value and set flags+  if (strcmp(flag_directories, "skip") == 0)+    flag_directories_action = Action::SKIP;+  else if (strcmp(flag_directories, "read") == 0)+    flag_directories_action = Action::READ;+  else if (strcmp(flag_directories, "recurse") == 0)+    flag_directories_action = Action::RECURSE;+  else+    help("invalid argument --directories=ACTION, valid arguments are 'skip', 'read', 'recurse', and 'dereference-recurse'"); -      // enable -Y: include empty pattern matches in the results-      flag_empty = true;+  // if no FILE specified and no -r or -R specified, when reading standard input from a TTY then enable -R+  if (!flag_stdin && arg_files.empty() && flag_directories_action != Action::RECURSE && isatty(STDIN_FILENO))+  {+    flag_directories_action = Action::RECURSE;+    flag_dereference = true;+  } -      // disable -w-      flag_word_regexp = false;-    }-    else-    {-      // split newline-separated regex up into alternations-      size_t from = 0;-      size_t to;+  // if no FILE specified then read standard input, unless recursive searches are specified+  if (arg_files.empty() && flag_min_depth == 0 && flag_max_depth == 0 && flag_directories_action != Action::RECURSE)+    flag_stdin = true; -      // split regex at newlines, for -F add \Q \E to each string, separate by |-      while ((to = pattern.find('\n', from)) != std::string::npos)-      {-        if (from < to)-        {-          size_t len = to - from - (pattern[to - 1] == '\r');-          if (len > 0)-            regex.append(Q).append(pattern.substr(from, to - from - (pattern[to - 1] == '\r'))).append(E);-        }-        from = to + 1;-      }--      if (from < pattern.size())-        regex.append(Q).append(pattern.substr(from)).append(E);--      // if pattern starts with ^ and ends with $, enable -Y-      if (pattern.size() >= 2 && pattern.front() == '^' && pattern.back() == '$')-        flag_empty = true;-    }-  }--  // the regex compiled from -N PATTERN-  std::string neg_regex;--  // append -N PATTERN to regex as negative patterns-  for (auto& pattern : flag_neg_regexp)-  {-    if (!pattern.empty())-    {-      // split newline-separated regex up into alternations-      size_t from = 0;-      size_t to;--      // split regex at newlines, for -F add \Q \E to each string, separate by |-      while ((to = pattern.find('\n', from)) != std::string::npos)-      {-        if (from < to)-        {-          size_t len = to - from - (pattern[to - 1] == '\r');-          if (len > 0)-            neg_regex.append(Q).append(pattern.substr(from, to - from - (pattern[to - 1] == '\r'))).append(E);-        }-        from = to + 1;-      }--      if (from < pattern.size())-        neg_regex.append(Q).append(pattern.substr(from)).append(E);--      if (pattern.size() >= 2 && pattern.front() == '^' && pattern.back() == '$')-        flag_empty = true; // we're possibly matching empty lines, so enable -Y-    }-  }--  // -x or -w: apply to -N PATTERN-  if (!neg_regex.empty())-  {-    // remove the ending '|' from the |-concatenated regexes in the regex string-    neg_regex.pop_back();--    if (regex != "^$")-    {-      // -x or -w-      if (flag_line_regexp)-        neg_regex.insert(0, "^(").append(")$"); // make the regex line-anchored-      else if (flag_word_regexp)-        neg_regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored-    }--    // construct negative (?^PATTERN)-    neg_regex.insert(0, "(?^").push_back(')');-  }--  // -x or -w: apply to PATTERN then disable -x, -w, -F for patterns in -f FILE when PATTERN or -e PATTERN is specified-  if (!regex.empty())-  {-    // remove the ending '|' from the |-concatenated regexes in the regex string-    regex.pop_back();--    if (regex != "^$")-    {-      // -x or -w-      if (flag_line_regexp)-        regex.insert(0, "^(").append(")$"); // make the regex line-anchored-      else if (flag_word_regexp)-        regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored-    }--    // -x and -w do not apply to patterns in -f FILE when PATTERN or -e PATTERN is specified-    flag_line_regexp = false;-    flag_word_regexp = false;--    // -F does not apply to patterns in -f FILE when PATTERN or -e PATTERN is specified-    Q = "";-    E = "|";-  }--  // combine regexes-  if (regex.empty())-    regex.swap(neg_regex);-  else if (!neg_regex.empty())-    regex.append("|").append(neg_regex);--  // -P disables -G-  if (flag_perl_regexp)-    flag_basic_regexp = false;--  // -f: get patterns from file-  if (!flag_file.empty())-  {-    // add an ending '|' to the regex to concatenate sub-expressions-    if (!regex.empty())-      regex.push_back('|');--    // -f: read patterns from the specified file or files-    for (auto& filename : flag_file)-    {-      FILE *file = NULL;--      if (filename == "-")-        file = stdin;-      else if (fopen_s(&file, filename.c_str(), "r") != 0)-        file = NULL;--      if (file == NULL)-      {-        // could not open, try GREP_PATH environment variable-        char *env_grep_path = NULL;-        dupenv_s(&env_grep_path, "GREP_PATH");--        if (env_grep_path != NULL)-        {-          std::string path_file(env_grep_path);-          path_file.append(PATHSEPSTR).append(filename);--          if (fopen_s(&file, path_file.c_str(), "r") != 0)-            file = NULL;--          free(env_grep_path);-        }-      }--#ifdef GREP_PATH-      if (file == NULL)-      {-        std::string path_file(GREP_PATH);-        path_file.append(PATHSEPSTR).append(filename);--        if (fopen_s(&file, path_file.c_str(), "r") != 0)-          file = NULL;-      }-#endif--      if (file == NULL)-        error("cannot read", filename.c_str());--      reflex::BufferedInput input(file);-      std::string line;-      size_t lineno = 0;--      while (true)-      {-        // read the next line-        if (getline(input, line))-          break;--        ++lineno;--        trim_nl(line);--        // add line to the regex if not empty-        if (!line.empty())-          regex.append(Q).append(line).append(E);-      }--      if (file != stdin)-        fclose(file);-    }--    // remove the ending '|' from the |-concatenated regexes in the regex string-    regex.pop_back();--    // -x or -w-    if (flag_line_regexp)-      regex.insert(0, "^(").append(")$"); // make the regex line-anchored-    else if (flag_word_regexp)-      regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored-  }--  // -j: case insensitive search if regex does not contain an upper case letter-  if (flag_smart_case)-  {-    flag_ignore_case = true;--    for (size_t i = 0; i < regex.size(); ++i)-    {-      if (regex[i] == '\\')-      {-        ++i;-      }-      else if (regex[i] == '{')-      {-        while (++i < regex.size() && regex[i] != '}')-          continue;-      }-      else if (isupper(regex[i]))-      {-        flag_ignore_case = false;-        break;-      }-    }-  }--  // -y: disable -A, -B, and -C-  if (flag_any_line)-    flag_after_context = flag_before_context = 0;--  // -A, -B, or -C: disable -o-  if (flag_after_context > 0 || flag_before_context > 0)-    flag_only_matching = false;--  // -v or -y: disable -o and -u-  if (flag_invert_match || flag_any_line)-    flag_only_matching = flag_ungroup = false;--  // normalize -R (--dereference-recurse) option-  if (strcmp(flag_directories, "dereference-recurse") == 0)-  {-    flag_directories = "recurse";-    flag_dereference = true;-  }--  // -D: check ACTION value-  if (strcmp(flag_devices, "skip") == 0)-    flag_devices_action = Action::SKIP;-  else if (strcmp(flag_devices, "read") == 0)-    flag_devices_action = Action::READ;-  else-    help("invalid argument --devices=ACTION, valid arguments are 'skip' and 'read'");--  // -d: check ACTION value-  if (strcmp(flag_directories, "skip") == 0)-    flag_directories_action = Action::SKIP;-  else if (strcmp(flag_directories, "read") == 0)-    flag_directories_action = Action::READ;-  else if (strcmp(flag_directories, "recurse") == 0)-    flag_directories_action = Action::RECURSE;-  else-    help("invalid argument --directories=ACTION, valid arguments are 'skip', 'read', 'recurse', and 'dereference-recurse'");--  // --sort: check KEY value+  // --sort: check sort KEY and set flags   if (flag_sort != NULL)   {     if (strcmp(flag_sort, "name") == 0)@@ -4928,239 +4731,12 @@ int main(int argc, char **argv)     flag_format_end   = "</grep>\n";   } -  // is output sent to a color TTY, to a pager, or to /dev/null?-  if (!flag_quiet)+  // -t: parse TYPES and access type table to add -O (--file-extensions) and -M (--file-magic) values+  for (auto& types : flag_file_types)   {-    // check if standard output is a TTY-    tty_term = isatty(STDOUT_FILENO) != 0;--#ifndef OS_WIN+    size_t from = 0; -    if (!tty_term)-    {-      output_stat_result = fstat(STDOUT_FILENO, &output_stat) == 0;-      output_stat_regular = output_stat_result && S_ISREG(output_stat.st_mode);--      // if output is sent to /dev/null, then enable -q (i.e. "cheat" like GNU grep!)-      struct stat dev_null_stat;-      if (output_stat_result &&-          S_ISCHR(output_stat.st_mode) &&-          stat("/dev/null", &dev_null_stat) == 0 &&-          output_stat.st_dev == dev_null_stat.st_dev &&-          output_stat.st_ino == dev_null_stat.st_ino)-      {-        flag_quiet = true;-      }-    }--#endif-  }--  if (!flag_quiet)-  {-    if (tty_term)-    {-      if (flag_pager != NULL)-      {-        // --pager: if output is to a TTY then page through the results--        // open a pipe to a forked pager-        output = popen(flag_pager, "w");-        if (output == NULL)-          error("cannot open pipe to pager", flag_pager);--        // enable --heading-        flag_heading = true;--        // enable --line-buffered to flush output to the pager immediately-        flag_line_buffered = true;-      }-      else if (flag_pretty)-      {-        // --pretty: if output is to a TTY then enable --color and --heading--        // enable --color-        if (flag_color == NULL)-          flag_color ="auto";--        // enable --heading-        flag_heading = true;-      }-      else if (flag_colors != NULL)-      {-        // --colors: if output is to a TTY then enable --color and use the specified --colors (below)--        // enable --color-        if (flag_color == NULL)-          flag_color ="auto";-      }-    }--    // --color: (re)set flag_color depending on color_term and TTY output-    if (flag_color != NULL)-    {-      if (strcmp(flag_color, "never") == 0)-      {-        flag_color = NULL;-      }-      else-      {-#ifdef OS_WIN--        if (tty_term)-        {-          // blindly assume that we have a color terminal on Windows if isatty() is true-          color_term = true;--#ifdef ENABLE_VIRTUAL_TERMINAL_PROCESSING-          HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);-          DWORD dwMode;-          GetConsoleMode(hOutput, &dwMode);-          dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;-          SetConsoleMode(hOutput, dwMode);-#endif--        }--#else--        // check whether we have a color terminal-        if (tty_term)-        {-          const char *term = getenv("TERM");-          if (term &&-              (strstr(term, "ansi") != NULL ||-               strstr(term, "xterm") != NULL ||-               strstr(term, "color") != NULL))-            color_term = true;-        }--#endif--        if (strcmp(flag_color, "auto") == 0)-        {-          if (!color_term)-            flag_color = NULL;-        }-        else if (strcmp(flag_color, "always") != 0)-        {-          help("invalid argument --color=WHEN, valid arguments are 'never', 'always', and 'auto'");-        }--        if (flag_color != NULL)-        {-          // get GREP_COLOR and GREP_COLORS-          char *env_grep_color = NULL;-          dupenv_s(&env_grep_color, "GREP_COLOR");-          char *env_grep_colors = NULL;-          dupenv_s(&env_grep_colors, "GREP_COLORS");-          const char *grep_colors = env_grep_colors;--          // if GREP_COLOR is defined, use it to set mt= default value (overridden by GREP_COLORS mt=, ms=, mc=)-          if (env_grep_color != NULL)-            set_color(std::string("mt=").append(env_grep_color).c_str(), "mt", color_mt);-          else if (grep_colors == NULL)-            grep_colors = DEFAULT_GREP_COLORS;--          // parse GREP_COLORS-          set_color(grep_colors, "sl", color_sl); // selected line-          set_color(grep_colors, "cx", color_cx); // context line-          set_color(grep_colors, "mt", color_mt); // matched text in any line-          set_color(grep_colors, "ms", color_ms); // matched text in selected line-          set_color(grep_colors, "mc", color_mc); // matched text in a context line-          set_color(grep_colors, "fn", color_fn); // file name-          set_color(grep_colors, "ln", color_ln); // line number-          set_color(grep_colors, "cn", color_cn); // column number-          set_color(grep_colors, "bn", color_bn); // byte offset-          set_color(grep_colors, "se", color_se); // separator--          // parse --colors-          set_color(flag_colors, "sl", color_sl); // selected line-          set_color(flag_colors, "cx", color_cx); // context line-          set_color(flag_colors, "mt", color_mt); // matched text in any line-          set_color(flag_colors, "ms", color_ms); // matched text in selected line-          set_color(flag_colors, "mc", color_mc); // matched text in a context line-          set_color(flag_colors, "fn", color_fn); // file name-          set_color(flag_colors, "ln", color_ln); // line number-          set_color(flag_colors, "cn", color_cn); // column number-          set_color(flag_colors, "bn", color_bn); // byte offset-          set_color(flag_colors, "se", color_se); // separator--          // -v: if rv in GREP_COLORS then swap the sl and cx colors-          if (flag_invert_match &&-              ((grep_colors != NULL && strstr(grep_colors, "rv") != NULL) ||-               (flag_colors != NULL && strstr(flag_colors, "rv") != NULL)))-          {-            char color_tmp[COLORLEN];-            copy_color(color_tmp, color_sl);-            copy_color(color_sl, color_cx);-            copy_color(color_cx, color_tmp);-          }--          // if pattern is empty to match all, matches are shown as selected lines-          if (flag_match)-          {-            copy_color(color_ms, color_sl);-            copy_color(color_mc, color_cx);-          }-          else-          {-            // if ms= is not specified, use the mt= value-            if (*color_ms == '\0')-              copy_color(color_ms, color_mt);--            // if mc= is not specified, use the mt= value-            if (*color_mc == '\0')-              copy_color(color_mc, color_mt);-          }--          color_del = "\033[0K";-          color_off = "\033[0m";--          if (isatty(STDERR_FILENO))-          {-            color_high    = "\033[1m";-            color_error   = "\033[1;31m";-            color_warning = "\033[1;35m";-            color_message = "\033[1;36m";-          }--          if (env_grep_color != NULL)-            free(env_grep_color);-          if (env_grep_colors != NULL)-            free(env_grep_colors);-        }-      }-    }-  }--  // --heading: enable --break-  if (flag_heading)-    flag_break = true;--  // -Q: parse ENCODING value-  if (flag_encoding != NULL)-  {-    int i;--    // scan the format_table[] for a matching encoding-    for (i = 0; format_table[i].format != NULL; ++i)-      if (strcmp(flag_encoding, format_table[i].format) == 0)-        break;--    if (format_table[i].format == NULL)-      help("invalid argument --encoding=ENCODING");--    // encoding is the file encoding used by all input files, if no BOM is present-    flag_encoding_type = format_table[i].encoding;-  }--  // -t: parse TYPES and access type table to add -O (--file-extensions) and -M (--file-magic) values-  for (auto& types : flag_file_types)-  {-    size_t from = 0;--    while (true)+    while (true)     {       size_t to = types.find(',', from);       size_t size = (to == std::string::npos ? types.size() : to) - from;@@ -5383,37 +4959,6 @@ int main(int argc, char **argv) #endif #endif -  // -M: file signature "magic bytes" regex string-  std::string signature;--  // -M !MAGIC: combine to create a signature regex string-  for (auto& i : flag_file_magic)-  {-    if (i.size() > 1 && (i.front() == '!' || i.front() == '^'))-    {-      if (!signature.empty())-        signature.push_back('|');-      signature.append(i.substr(1));--      // tally negative MAGIC patterns-      ++flag_min_magic;-    }-  }--  // -M MAGIC: append to signature regex string-  for (auto& i : flag_file_magic)-  {-    if (i.size() <= 1 || (i.front() != '!' && i.front() != '^'))-    {-      if (!signature.empty())-        signature.push_back('|');-      signature.append(i);--      // we have positive MAGIC patterns, so scan() is a match when flag_min_magic or greater-      flag_not_magic = flag_min_magic;-    }-  }-   // --exclude-from: add globs to the --exclude and --exclude-dir lists   for (auto& i : flag_exclude_from)   {@@ -5498,101 +5043,667 @@ int main(int argc, char **argv)         size_t to = i.find(',', from);         size_t size = (to == std::string::npos ? i.size() : to) - from; -        if (size > 0)+        if (size > 0)+        {+          std::string mount(i.substr(from, size));++          if (statvfs(mount.c_str(), &buf) == 0)+            include_fs_ids.insert(static_cast<uint64_t>(buf.f_fsid));+          else+            warning("--include-fs", mount.c_str());+        }++        if (to == std::string::npos)+          break;++        from = to + 1;+      }+    }+  }++#endif++  // -M: file signature "magic bytes" regex string+  std::string signature;++  // -M !MAGIC: combine to create a signature regex string+  for (auto& i : flag_file_magic)+  {+    if (i.size() > 1 && (i.front() == '!' || i.front() == '^'))+    {+      if (!signature.empty())+        signature.push_back('|');+      signature.append(i.substr(1));++      // tally negative MAGIC patterns+      ++flag_min_magic;+    }+  }++  // -M MAGIC: append to signature regex string+  for (auto& i : flag_file_magic)+  {+    if (i.size() <= 1 || (i.front() != '!' && i.front() != '^'))+    {+      if (!signature.empty())+        signature.push_back('|');+      signature.append(i);++      // we have positive MAGIC patterns, so scan() is a match when flag_min_magic or greater+      flag_not_magic = flag_min_magic;+    }+  }++  // -M: create a magic matcher for the MAGIC regex signature to match file signatures with magic.scan()+  try+  {+    // construct magic_pattern DFA for -M !MAGIC and -M MAGIC+    if (!signature.empty())+      magic_pattern.assign(signature, "r");+    magic_matcher.pattern(magic_pattern);+  }++  catch (reflex::regex_error& error)+  {+    abort("option -M", error.what());+  }++  // check FILE arguments, warn about non-existing FILE+  std::vector<const char*>::iterator file = arg_files.begin();+  while (file != arg_files.end())+  {+#ifdef OS_WIN++    DWORD attr = GetFileAttributesA(*file);++    if (attr == INVALID_FILE_ATTRIBUTES)+    {+      // FILE does not exist+      errno = ENOENT;+      warning(NULL, *file);++      file = arg_files.erase(file);+      if (arg_files.empty())+        exit(EXIT_ERROR);+    }+    else+    {+      // use threads to recurse into a directory+      if ((attr & FILE_ATTRIBUTE_DIRECTORY))+        flag_all_threads = true;++      ++file;+    }++#else++    struct stat buf;++    if (stat(*file, &buf) != 0)+    {+      // FILE does not exist+      warning(NULL, *file);++      file = arg_files.erase(file);+      if (arg_files.empty())+        exit(EXIT_ERROR);+    }+    else+    {+      // use threads to recurse into a directory+      if (S_ISDIR(buf.st_mode))+        flag_all_threads = true;++      ++file;+    }++#endif+  }+}++// check TTY info and set colors+void terminal()+{+  if (flag_query > 0)+  {+    // -Q: disable --quiet+    flag_quiet = false;+  }+  else if (!flag_quiet)+  {+    // is output sent to a color TTY, to a pager, or to /dev/null?++    // check if standard output is a TTY+    tty_term = isatty(STDOUT_FILENO) != 0;++#ifndef OS_WIN++    if (!tty_term)+    {+      output_stat_result = fstat(STDOUT_FILENO, &output_stat) == 0;+      output_stat_regular = output_stat_result && S_ISREG(output_stat.st_mode);++      // if output is sent to /dev/null, then enable -q (i.e. "cheat" like GNU grep!)+      struct stat dev_null_stat;+      if (output_stat_result &&+          S_ISCHR(output_stat.st_mode) &&+          stat("/dev/null", &dev_null_stat) == 0 &&+          output_stat.st_dev == dev_null_stat.st_dev &&+          output_stat.st_ino == dev_null_stat.st_ino)+      {+        flag_quiet = true;+      }+    }++#endif+  }++  // whether to apply colors+  flag_apply_color = flag_query > 0 ? "always" : flag_color;++  if (!flag_quiet)+  {+    if (tty_term || flag_query > 0)+    {+      if (flag_pretty)+      {+        // --pretty: if output is to a TTY then enable --color and --heading++        // enable --color+        if (flag_apply_color == NULL)+          flag_apply_color = "auto";++        // enable --heading (enables --break later)+        flag_heading = true;++        // enable -T (initial tab)+        flag_initial_tab = true;+      }+      else if (flag_apply_color != NULL)+      {+        // --colors: if output is to a TTY then enable --color and use the specified --colors++        // enable --color+        if (flag_apply_color == NULL)+          flag_apply_color = "auto";+      }++      if (flag_query > 0)+      {+        // --query: enable --line-buffered to flush output to the pager immediately+        flag_line_buffered = true;+      }+      else if (flag_pager != NULL)+      {+        // --pager: if output is to a TTY then page through the results++        // open a pipe to a forked pager+        output = popen(flag_pager, "w");+        if (output == NULL)+          error("cannot open pipe to pager", flag_pager);++        // enable --heading+        flag_heading = true;++        // enable --line-buffered to flush output to the pager immediately+        flag_line_buffered = true;+      }+    }++    // --color: (re)set flag_apply_color depending on color_term and TTY output+    if (flag_apply_color != NULL)+    {+      color_term = flag_query > 0;++      if (strcmp(flag_apply_color, "never") == 0)+      {+        flag_apply_color = NULL;+      }+      else+      {+#ifdef OS_WIN++        if (tty_term)+        {+#ifdef ENABLE_VIRTUAL_TERMINAL_PROCESSING+          // assume we have a color terminal on Windows if isatty() is true+          HANDLE hConOut = GetStdHandle(STD_OUTPUT_HANDLE);+          if (hConOut != INVALID_HANDLE_VALUE)+          {+#ifdef CP_UTF8+            // enable UTF-8 output+            SetConsoleOutputCP(CP_UTF8);+#endif+            // try virtual terminal processing for ANSI SGR codes, enable colors when successful+            DWORD outMode;+            GetConsoleMode(hConOut, &outMode);+            outMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;+            color_term = SetConsoleMode(hConOut, outMode) != 0;+          }+#endif+        }++#else++        // check whether we have a color terminal+        if (tty_term)+        {+          const char *term = getenv("TERM");+          if (term &&+              (strstr(term, "ansi") != NULL ||+               strstr(term, "xterm") != NULL ||+               strstr(term, "color") != NULL))+            color_term = true;+        }++#endif++        if (strcmp(flag_apply_color, "auto") == 0)+        {+          if (!color_term)+            flag_apply_color = NULL;+        }+        else if (strcmp(flag_apply_color, "always") != 0)+        {+          help("invalid argument --color=WHEN, valid arguments are 'never', 'always', and 'auto'");+        }++        if (flag_apply_color != NULL)+        {+          // get GREP_COLOR and GREP_COLORS+          char *env_grep_color = NULL;+          dupenv_s(&env_grep_color, "GREP_COLOR");+          char *env_grep_colors = NULL;+          dupenv_s(&env_grep_colors, "GREP_COLORS");+          const char *grep_colors = env_grep_colors;++          // if GREP_COLOR is defined, use it to set mt= default value (overridden by GREP_COLORS mt=, ms=, mc=)+          if (env_grep_color != NULL)+            set_color(std::string("mt=").append(env_grep_color).c_str(), "mt", color_mt);+          else if (grep_colors == NULL)+            grep_colors = DEFAULT_GREP_COLORS;++          // parse GREP_COLORS+          set_color(grep_colors, "sl", color_sl); // selected line+          set_color(grep_colors, "cx", color_cx); // context line+          set_color(grep_colors, "mt", color_mt); // matched text in any line+          set_color(grep_colors, "ms", color_ms); // matched text in selected line+          set_color(grep_colors, "mc", color_mc); // matched text in a context line+          set_color(grep_colors, "fn", color_fn); // file name+          set_color(grep_colors, "ln", color_ln); // line number+          set_color(grep_colors, "cn", color_cn); // column number+          set_color(grep_colors, "bn", color_bn); // byte offset+          set_color(grep_colors, "se", color_se); // separator++          // parse --colors+          set_color(flag_colors, "sl", color_sl); // selected line+          set_color(flag_colors, "cx", color_cx); // context line+          set_color(flag_colors, "mt", color_mt); // matched text in any line+          set_color(flag_colors, "ms", color_ms); // matched text in selected line+          set_color(flag_colors, "mc", color_mc); // matched text in a context line+          set_color(flag_colors, "fn", color_fn); // file name+          set_color(flag_colors, "ln", color_ln); // line number+          set_color(flag_colors, "cn", color_cn); // column number+          set_color(flag_colors, "bn", color_bn); // byte offset+          set_color(flag_colors, "se", color_se); // separator++          // -v: if rv in GREP_COLORS then swap the sl and cx colors+          if (flag_invert_match &&+              ((grep_colors != NULL && strstr(grep_colors, "rv") != NULL) ||+               (flag_colors != NULL && strstr(flag_colors, "rv") != NULL)))+          {+            char color_tmp[COLORLEN];+            copy_color(color_tmp, color_sl);+            copy_color(color_sl, color_cx);+            copy_color(color_cx, color_tmp);+          }++          // if ms= is not specified, use the mt= value+          if (*color_ms == '\0')+            copy_color(color_ms, color_mt);++          // if mc= is not specified, use the mt= value+          if (*color_mc == '\0')+            copy_color(color_mc, color_mt);++          color_del = "\033[K";+          color_off = "\033[m";++          if (isatty(STDERR_FILENO))+          {+            color_high    = "\033[1m";+            color_error   = "\033[1;31m";+            color_warning = "\033[1;35m";+            color_message = "\033[1;36m";+          }++          if (env_grep_color != NULL)+            free(env_grep_color);+          if (env_grep_colors != NULL)+            free(env_grep_colors);+        }+      }+    }+  }+}++// search the specified files or standard input for pattern matches+void ugrep()+{+  // reset warnings+  warnings = 0;++  // reset stats+  stats.reset();++  // -x: enable -Y+  if (flag_line_regexp)+    flag_empty = true;++  // the regex compiled from PATTERN, -e PATTERN, -N PATTERN, and -f FILE+  std::string regex;++  // -F: make newline-separated lines in regex literal with \Q and \E+  const char *Q = flag_fixed_strings ? "\\Q" : "";+  const char *E = flag_fixed_strings ? "\\E|" : "|";++  // either one PATTERN or one or more -e PATTERN (cannot specify both)+  std::vector<std::string> arg_patterns;+  if (arg_pattern != NULL)+    arg_patterns.emplace_back(arg_pattern);+  std::vector<std::string>& patterns = arg_pattern != NULL ? arg_patterns : flag_regexp;++  // combine all -e PATTERN into a single regex string for matching+  for (auto& pattern : patterns)+  {+    // empty PATTERN matches everything+    if (pattern.empty())+    {+      // pattern ".*\n?|" could be used throughout without flag_empty = true, but this garbles output for -o, -H, -n, etc.+      if (flag_line_regexp)+      {+        regex.append("^$|");+      }+      else if (flag_hex)+      {+        regex.append(".*\n?|");++        // we're matching everything+        flag_match = true;+      }+      else+      {+        regex.append(".*|");++        // we're matching everything+        flag_match = true;+      }++      // enable -Y: include empty pattern matches in the results+      flag_empty = true;++      // disable -w+      flag_word_regexp = false;+    }+    else+    {+      // split newline-separated regex up into alternations+      size_t from = 0;+      size_t to;++      // split regex at newlines, for -F add \Q \E to each string, separate by |+      while ((to = pattern.find('\n', from)) != std::string::npos)+      {+        if (from < to)+        {+          size_t len = to - from - (pattern[to - 1] == '\r');+          if (len > 0)+            regex.append(Q).append(pattern.substr(from, to - from - (pattern[to - 1] == '\r'))).append(E);+        }+        from = to + 1;+      }++      if (from < pattern.size())+        regex.append(Q).append(pattern.substr(from)).append(E);++      // if pattern starts with ^ and ends with $, enable -Y+      if (pattern.size() >= 2 && pattern.front() == '^' && pattern.back() == '$')+        flag_empty = true;+    }+  }++  // we're matching everything, including empty lines+  if (flag_match)+    flag_empty = true;++  // --match: adjust color highlighting to show matches as selected lines+  if (flag_match)+  {+    copy_color(match_ms, color_sl);+    copy_color(match_mc, color_cx);+  }+  else+  {+    copy_color(match_ms, color_ms);+    copy_color(match_mc, color_mc);+  }++  // --heading: enable --break+  if (flag_heading)+    flag_break = true;++  // the regex compiled from -N PATTERN+  std::string neg_regex;++  // append -N PATTERN to regex as negative patterns+  for (auto& pattern : flag_neg_regexp)+  {+    if (!pattern.empty())+    {+      // split newline-separated regex up into alternations+      size_t from = 0;+      size_t to;++      // split regex at newlines, for -F add \Q \E to each string, separate by |+      while ((to = pattern.find('\n', from)) != std::string::npos)+      {+        if (from < to)+        {+          size_t len = to - from - (pattern[to - 1] == '\r');+          if (len > 0)+            neg_regex.append(Q).append(pattern.substr(from, to - from - (pattern[to - 1] == '\r'))).append(E);+        }+        from = to + 1;+      }++      if (from < pattern.size())+        neg_regex.append(Q).append(pattern.substr(from)).append(E);++      if (pattern.size() >= 2 && pattern.front() == '^' && pattern.back() == '$')+        flag_empty = true; // we're possibly matching empty lines, so enable -Y+    }+  }++  // -x or -w: apply to -N PATTERN+  if (!neg_regex.empty())+  {+    // remove the ending '|' from the |-concatenated regexes in the regex string+    neg_regex.pop_back();++    if (regex != "^$")+    {+      // -x or -w+      if (flag_line_regexp)+        neg_regex.insert(0, "^(").append(")$"); // make the regex line-anchored+      else if (flag_word_regexp)+        neg_regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored+    }++    // construct negative (?^PATTERN)+    neg_regex.insert(0, "(?^").push_back(')');+  }++  // -x or -w: apply to PATTERN then disable -x, -w, -F for patterns in -f FILE when PATTERN or -e PATTERN is specified+  if (!regex.empty())+  {+    // remove the ending '|' from the |-concatenated regexes in the regex string+    regex.pop_back();++    if (regex != "^$")+    {+      // -x or -w+      if (flag_line_regexp)+        regex.insert(0, "^(").append(")$"); // make the regex line-anchored+      else if (flag_word_regexp)+        regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored+    }++    // -x and -w do not apply to patterns in -f FILE when PATTERN or -e PATTERN is specified+    flag_line_regexp = false;+    flag_word_regexp = false;++    // -F does not apply to patterns in -f FILE when PATTERN or -e PATTERN is specified+    Q = "";+    E = "|";+  }++  // combine regexes+  if (regex.empty())+    regex.swap(neg_regex);+  else if (!neg_regex.empty())+    regex.append("|").append(neg_regex);++  // -f: get patterns from file+  if (!flag_file.empty())+  {+    // add an ending '|' to the regex to concatenate sub-expressions+    if (!regex.empty())+      regex.push_back('|');++    // -f: read patterns from the specified file or files+    for (auto& filename : flag_file)+    {+      FILE *file = NULL;++      if (filename == "-")+        file = stdin;+      else if (fopen_s(&file, filename.c_str(), "r") != 0)+        file = NULL;++      if (file == NULL)+      {+        // could not open, try GREP_PATH environment variable+        char *env_grep_path = NULL;+        dupenv_s(&env_grep_path, "GREP_PATH");++        if (env_grep_path != NULL)         {-          std::string mount(i.substr(from, size));+          std::string path_file(env_grep_path);+          path_file.append(PATHSEPSTR).append(filename); -          if (statvfs(mount.c_str(), &buf) == 0)-            include_fs_ids.insert(static_cast<uint64_t>(buf.f_fsid));-          else-            warning("--include-fs", mount.c_str());+          if (fopen_s(&file, path_file.c_str(), "r") != 0)+            file = NULL;++          free(env_grep_path);         }+      } -        if (to == std::string::npos)-          break;+#ifdef GREP_PATH+      if (file == NULL)+      {+        std::string path_file(GREP_PATH);+        path_file.append(PATHSEPSTR).append(filename); -        from = to + 1;+        if (fopen_s(&file, path_file.c_str(), "r") != 0)+          file = NULL;       }-    }-  }- #endif -  // run all worker threads?-  bool directory_arg = false;+      if (file == NULL)+        error("cannot read", filename.c_str());++      reflex::BufferedInput input(file);+      std::string line;+      size_t lineno = 0; -  // check FILE arguments, warn about non-existing FILE-  std::vector<const char*>::iterator file = files.begin();-  while (file != files.end())-  {-#ifdef OS_WIN+      while (true)+      {+        // read the next line+        if (getline(input, line))+          break; -    DWORD attr = GetFileAttributesA(*file);+        ++lineno; -    if (attr == INVALID_FILE_ATTRIBUTES)-    {-      // FILE does not exist-      errno = ENOENT;-      warning(NULL, *file);+        trim_nl(line); -      file = files.erase(file);-      if (files.empty())-        exit(EXIT_ERROR);-    }-    else-    {-      // use threads to recurse into a directory-      if ((attr & FILE_ATTRIBUTE_DIRECTORY))-        directory_arg = true;+        // add line to the regex if not empty+        if (!line.empty())+          regex.append(Q).append(line).append(E);+      } -      ++file;+      if (file != stdin)+        fclose(file);     } -#else+    // remove the ending '|' from the |-concatenated regexes in the regex string+    regex.pop_back(); -    struct stat buf;+    // -x or -w+    if (flag_line_regexp)+      regex.insert(0, "^(").append(")$"); // make the regex line-anchored+    else if (flag_word_regexp)+      regex.insert(0, "\\<(").append(")\\>"); // make the regex word-anchored+  } -    if (stat(*file, &buf) != 0)-    {-      // FILE does not exist-      warning(NULL, *file);+  // -j: case insensitive search if regex does not contain an upper case letter+  if (flag_smart_case)+  {+    flag_ignore_case = true; -      file = files.erase(file);-      if (files.empty())-        exit(EXIT_ERROR);-    }-    else+    for (size_t i = 0; i < regex.size(); ++i)     {-      // use threads to recurse into a directory-      if (S_ISDIR(buf.st_mode))-        directory_arg = true;--      ++file;+      if (regex[i] == '\\')+      {+        ++i;+      }+      else if (regex[i] == '{')+      {+        while (++i < regex.size() && regex[i] != '}')+          continue;+      }+      else if (isupper(regex[i]))+      {+        flag_ignore_case = false;+        break;+      }     }--#endif   } -  // --depth: if -R or -r is not specified then enable -R -  if (flag_depth > 0 && flag_directories_action != Action::RECURSE)-  {-    flag_directories_action = Action::RECURSE;-    flag_dereference = true;-  }+  // -y: disable -A, -B, and -C+  if (flag_any_line)+    flag_after_context = flag_before_context = 0; -  // if no FILE specified and no -r or -R specified, when reading standard input from a TTY then enable -R-  if (flag_directories_action != Action::RECURSE && !flag_stdin && files.empty() && isatty(STDIN_FILENO))+  // -A, -B, or -C: disable -o+  if (flag_after_context > 0 || flag_before_context > 0)+    flag_only_matching = false;++  // -v or -y: disable -o and -u+  if (flag_invert_match || flag_any_line)+    flag_only_matching = flag_ungroup = false;++  // --depth: if -R or -r is not specified then enable -R +  if ((flag_min_depth > 0 || flag_max_depth > 0) && flag_directories_action != Action::RECURSE)   {     flag_directories_action = Action::RECURSE;     flag_dereference = true;   } -  // normalize -p (--no-dereference) and -S (--dereference) options, -p takes priority over -S+  // -p (--no-dereference) and -S (--dereference): -p takes priority over -S and -R   if (flag_no_dereference)     flag_dereference = false;    // display file name if more than one input file is specified or options -R, -r, and option -h --no-filename is not specified-  if (!flag_no_filename && (directory_arg || flag_directories_action == Action::RECURSE || files.size() > 1 || (flag_stdin && !files.empty())))+  if (!flag_no_filename && (flag_all_threads || flag_directories_action == Action::RECURSE || arg_files.size() > 1 || (flag_stdin && !arg_files.empty())))     flag_with_filename = true;    // --only-line-number implies -n@@ -5627,10 +5738,6 @@ int main(int argc, char **argv)     flag_count = false;   } -  // if no FILE specified then read standard input, unless recursive searches are specified-  if (files.empty() && flag_directories_action != Action::RECURSE)-    flag_stdin = true;-   // -J: when not set the default is the number of cores (or hardware threads), limited to MAX_JOBS   if (flag_jobs == 0)   {@@ -5644,100 +5751,76 @@ int main(int argc, char **argv)     flag_jobs = std::min(flag_jobs, flag_max_files);    // set the number of threads to the number of files or when recursing to the value of -J, --jobs-  if (directory_arg || flag_directories_action == Action::RECURSE)+  if (flag_all_threads || flag_directories_action == Action::RECURSE)     threads = flag_jobs;   else-    threads = std::min(files.size() + flag_stdin, flag_jobs);+    threads = std::min(arg_files.size() + flag_stdin, flag_jobs); -  // -M: create a magic matcher for the MAGIC regex signature to match file signatures with magic.scan()-  reflex::Matcher magic;+  // negative character classes do not match newlines+  reflex::convert_flag_type convert_flags = reflex::convert_flag::notnewline; -  try-  {-    // construct magic_pattern DFA for -M !MAGIC and -M MAGIC-    if (!signature.empty())-      magic_pattern.assign(signature, "r");-    magic.pattern(magic_pattern);-  }+  // not -U: convert regex to Unicode+  if (!flag_binary)+    convert_flags |= reflex::convert_flag::unicode; -  catch (reflex::regex_error& error)-  {-    if (!flag_no_messages)-      std::cerr << "option -M:\n" << error.what();+  // -G: convert basic regex (BRE) to extended regex (ERE)+  if (flag_basic_regexp)+    convert_flags |= reflex::convert_flag::basic; -    exit(EXIT_ERROR);-  }+  // set reflex::Pattern options to enable multiline mode+  std::string pattern_options("(?m"); -  // --format-begin-  if (!flag_quiet && flag_format_begin != NULL)-    format(flag_format_begin, 0);+  // -i: case insensitive reflex::Pattern option, applies to ASCII only+  if (flag_ignore_case)+    pattern_options.push_back('i'); -  try+  // --free-space: this is needed to check free-space conformance by the converter+  if (flag_free_space)   {-    // negative character classes do not match newlines-    reflex::convert_flag_type convert_flags = reflex::convert_flag::notnewline;--    // not -U: convert regex to Unicode-    if (!flag_binary)-      convert_flags |= reflex::convert_flag::unicode;--    // -G: convert basic regex (BRE) to extended regex (ERE)-    if (flag_basic_regexp)-      convert_flags |= reflex::convert_flag::basic;+    convert_flags |= reflex::convert_flag::freespace;+    pattern_options.push_back('x');+  } -    // set reflex::Pattern options to enable multiline mode-    std::string pattern_options("(?m");+  // prepend the pattern options (?m...) to the regex+  pattern_options.push_back(')');+  regex = pattern_options + regex; -    // -i: case-insensitive reflex::Pattern option, applies to ASCII only-    if (flag_ignore_case)-      pattern_options.push_back('i');+  // reflex::Matcher options+  std::string matcher_options; -    // --free-space: this is needed to check free-space conformance by the converter-    if (flag_free_space)-    {-      convert_flags |= reflex::convert_flag::freespace;-      pattern_options.push_back('x');-    }+  // -Y: permit empty pattern matches+  if (flag_empty)+    matcher_options.push_back('N'); -    // prepend the pattern options (?m...) to the regex-    pattern_options.push_back(')');-    regex = pattern_options + regex;+  // --tabs: set reflex::Matcher option T to NUM (1, 2, 4, or 8) tab size+  if (flag_tabs)+    matcher_options.append("T=").push_back(static_cast<char>(flag_tabs) + '0'); -    // reflex::Matcher options-    std::string matcher_options;+  // --format-begin+  if (!flag_quiet && flag_format_begin != NULL)+    format(flag_format_begin, 0); -    // -Y: permit empty pattern matches-    if (flag_empty)-      matcher_options.push_back('N');+  // -P: Perl matching with Boost.Regex+  if (flag_perl_regexp)+  {+#if defined(HAVE_PCRE2)+    // construct the PCRE2 JIT-optimized NFA-based Perl pattern matcher+    std::string pattern(reflex::PCRE2Matcher::convert(regex, convert_flags));+    reflex::PCRE2Matcher matcher(pattern, reflex::Input(), matcher_options.c_str()); -    // --tabs: set reflex::Matcher option T to NUM tab size-    if (flag_tabs)+    if (threads > 1)     {-      if (flag_tabs == 1 || flag_tabs == 2 || flag_tabs == 4 || flag_tabs == 8)-        matcher_options.append("T=").push_back(static_cast<char>(flag_tabs) + '0');-      else-        help("invalid argument --tabs=NUM, valid arguments are 1, 2, 4, or 8");+      GrepMaster grep(output, &matcher);+      grep.ugrep();     }--    // -P: Perl matching with Boost.Regex-    if (flag_perl_regexp)+    else     {-#if defined(HAVE_PCRE2)-      // construct the PCRE2 JIT-optimized NFA-based Perl pattern matcher-      std::string pattern(reflex::PCRE2Matcher::convert(regex, convert_flags));-      reflex::PCRE2Matcher matcher(pattern, reflex::Input(), matcher_options.c_str());--      if (threads > 1)-      {-        GrepMaster grep(output, &matcher);-        ugrep(magic, grep, files);-      }-      else-      {-        Grep grep(output, &matcher);-        ugrep(magic, grep, files);-      }+      Grep grep(output, &matcher);+      grep.ugrep();+    } #elif defined(HAVE_BOOST_REGEX)+    try+    {       // construct the Boost.Regex NFA-based Perl pattern matcher       std::string pattern(reflex::BoostPerlMatcher::convert(regex, convert_flags));       reflex::BoostPerlMatcher matcher(pattern, reflex::Input(), matcher_options.c_str());@@ -5745,45 +5828,15 @@ int main(int argc, char **argv)       if (threads > 1)       {         GrepMaster grep(output, &matcher);-        ugrep(magic, grep, files);-      }-      else-      {-        Grep grep(output, &matcher);-        ugrep(magic, grep, files);-      }-#else-      help("option -P is not available in this build configuration of ugrep");-#endif-    }-    else-    {-      // construct the RE/flex DFA pattern matcher and start matching files-      reflex::Pattern pattern(reflex::Matcher::convert(regex, convert_flags), "r");-      reflex::Matcher matcher(pattern, reflex::Input(), matcher_options.c_str());--      if (threads > 1)-      {-        GrepMaster grep(output, &matcher);-        ugrep(magic, grep, files);+        grep.ugrep();       }       else       {         Grep grep(output, &matcher);-        ugrep(magic, grep, files);+        grep.ugrep();       }     }-  }--  catch (reflex::regex_error& error)-  {-    abort("error: ", error.what());-  }--#if !defined(HAVE_PCRE2) && defined(HAVE_BOOST_REGEX)-  catch (boost::regex_error& error)-  {-    if (!flag_no_messages)+    catch (boost::regex_error& error)     {       const char *message;       reflex::regex_error_type code;@@ -5791,77 +5844,68 @@ int main(int argc, char **argv)       switch (error.code())       {         case boost::regex_constants::error_collate:-          message = "Boost.Regex error: invalid collating element in a [[.name.]] block\n";           code = reflex::regex_error::invalid_collating;           break;         case boost::regex_constants::error_ctype:-          message = "Boost.Regex error: invalid character class name in a [[:name:]] block\n";           code = reflex::regex_error::invalid_class;           break;         case boost::regex_constants::error_escape:-          message = "Boost.Regex error: invalid or trailing escape\n";           code = reflex::regex_error::invalid_escape;           break;         case boost::regex_constants::error_backref:-          message = "Boost.Regex error: back-reference to a non-existent marked sub-expression\n";           code = reflex::regex_error::invalid_backreference;           break;         case boost::regex_constants::error_brack:-          message = "Boost.Regex error: invalid character set [...]\n";           code = reflex::regex_error::invalid_class;           break;         case boost::regex_constants::error_paren:-          message = "Boost.Regex error: mismatched ( and )\n";           code = reflex::regex_error::mismatched_parens;           break;         case boost::regex_constants::error_brace:-          message = "Boost.Regex error: mismatched { and }\n";           code = reflex::regex_error::mismatched_braces;           break;         case boost::regex_constants::error_badbrace:-          message = "Boost.Regex error: invalid contents of a {...} block\n";           code = reflex::regex_error::invalid_repeat;           break;         case boost::regex_constants::error_range:-          message = "Boost.Regex error: character range is invalid, for example [d-a]\n";           code = reflex::regex_error::invalid_class_range;           break;         case boost::regex_constants::error_space:-          message = "Boost.Regex error: out of memory\n";           code = reflex::regex_error::exceeds_limits;           break;         case boost::regex_constants::error_badrepeat:-          message = "Boost.Regex error: attempt to repeat something that cannot be repeated\n";           code = reflex::regex_error::invalid_repeat;           break;         case boost::regex_constants::error_complexity:-          message = "Boost.Regex error: the expression became too complex to handle\n";           code = reflex::regex_error::exceeds_limits;           break;         case boost::regex_constants::error_stack:-          message = "Boost.Regex error: out of program stack space\n";           code = reflex::regex_error::exceeds_limits;           break;         default:-          message = "Boost.Regex error: bad pattern\n";           code = reflex::regex_error::invalid_syntax;       } -      abort(message, reflex::regex_error(code, regex, error.position() + 1).what());+      throw reflex::regex_error(code, regex, error.position() + 1);     }--    exit(EXIT_ERROR);+#endif   }--  catch (boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error>>& error)+  else   {-    abort("Boost.Regex error: ", error.what());-  }-#endif+    // construct the RE/flex DFA pattern matcher and start matching files+    reflex::Pattern pattern(reflex::Matcher::convert(regex, convert_flags), "r");+    reflex::Matcher matcher(pattern, reflex::Input(), matcher_options.c_str()); -  catch (std::runtime_error& error)-  {-    abort("Exception: ", error.what());+    if (threads > 1)+    {+      GrepMaster grep(output, &matcher);+      grep.ugrep();+    }+    else+    {+      Grep grep(output, &matcher);+      grep.ugrep();+    }   }    // --format-end@@ -5873,18 +5917,16 @@ int main(int argc, char **argv)     stats.report();    // close the pipe to the forked pager-  if (output != stdout)+  if (flag_pager != NULL && output != NULL && output != stdout)     pclose(output);--  return warnings == 0 && stats.found_any_file() ? EXIT_OK : EXIT_FAIL; }  // search the specified files or standard input for pattern matches-void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files)+void Grep::ugrep() {-  if (!flag_stdin && files.empty())+  if (!flag_stdin && arg_files.empty())   {-    grep.recurse(1, magic, ".");+    recurse(1, ".");   }   else   {@@ -5894,21 +5936,21 @@ void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files)       stats.score_file();        // search standard input-      grep.search(NULL);+      search(NULL);     }  #ifndef OS_WIN     std::pair<std::set<ino_t>::iterator,bool> vino; #endif -    for (auto file : files)+    for (auto file : arg_files)     {       // stop after finding max-files matching files       if (flag_max_files > 0 && stats.found_files() >= flag_max_files)         break;        // stop when output is blocked-      if (grep.out.eof)+      if (out.eof)         break;        // search file or directory, get the basename from the file argument first@@ -5922,15 +5964,15 @@ void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files)       uint64_t info;        // search file, unless searchable directory into which we should recurse-      switch (select(1, magic, file, basename, DIRENT_TYPE_UNKNOWN, inode, info, true))+      switch (select(1, file, basename, DIRENT_TYPE_UNKNOWN, inode, info, true))       {-        case Grep::Type::DIRECTORY:+        case Type::DIRECTORY: #ifndef OS_WIN           if (flag_dereference)             vino = visited.insert(inode); #endif -          grep.recurse(1, magic, file);+          recurse(1, file);  #ifndef OS_WIN           if (flag_dereference)@@ -5938,11 +5980,11 @@ void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files) #endif           break; -        case Grep::Type::OTHER:-          grep.search(file);+        case Type::OTHER:+          search(file);           break; -        case Grep::Type::SKIP:+        case Type::SKIP:           break;       }     }@@ -5950,7 +5992,7 @@ void ugrep(reflex::Matcher& magic, Grep& grep, std::vector<const char*>& files) }  // search file or directory for pattern matches-Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, const char *basename, int type, ino_t& inode, uint64_t& info, bool is_argument)+Grep::Type Grep::select(size_t level, const char *pathname, const char *basename, int type, ino_t& inode, uint64_t& info, bool is_argument) {   if (*basename == '.' && flag_no_hidden)     return Grep::Type::SKIP;@@ -5980,15 +6022,15 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co      if (is_argument || flag_directories_action == Action::RECURSE)     {-      // --depth: soft recursion level exceeds max depth?-      if (flag_depth > 0 && level > flag_depth)+      // --depth: recursion level exceeds max depth?+      if (flag_max_depth > 0 && level > flag_max_depth)         return Grep::Type::SKIP;        // hard maximum recursion depth reached?       if (level > MAX_DEPTH)       {         if (!flag_no_messages)-          fprintf(stderr, "%sugrep: %s%s%s recursion depth exceeds hard limit of %d\n", color_off, color_high, pathname, color_off, MAX_DEPTH);+          fprintf(stderr, "%sugrep: %s%s%s recursion depth hit hard limit of %d\n", color_off, color_high, pathname, color_off, MAX_DEPTH);         return Grep::Type::SKIP;       } @@ -6031,6 +6073,10 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co   }   else if ((attr & FILE_ATTRIBUTE_DEVICE) == 0 || flag_devices_action == Action::READ)   {+    // --depth: recursion level not deep enough?+    if (flag_min_depth > 0 && level <= flag_min_depth)+      return Grep::Type::SKIP;+     // do not exclude files that are reversed by ! negation     bool negate = false;     for (auto& glob : flag_not_exclude)@@ -6063,7 +6109,7 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co         std::istream stream(&streambuf);          // file has the magic bytes we're looking for: search the file-        size_t match = magic.input(&stream).scan();+        size_t match = magic_matcher.input(&stream).scan();         if (match == flag_not_magic || match >= flag_min_magic)         {           fclose(file);@@ -6076,7 +6122,7 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co       else #endif       {-        size_t match = magic.input(reflex::Input(file, flag_encoding_type)).scan();+        size_t match = magic_matcher.input(reflex::Input(file, flag_encoding_type)).scan();         if (match == flag_not_magic || match >= flag_min_magic)         {           fclose(file);@@ -6139,15 +6185,15 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co            if (is_argument || flag_directories_action == Action::RECURSE)           {-            // --depth: soft recursion level exceeds max depth?-            if (flag_depth > 0 && level > flag_depth)+            // --depth: recursion level exceeds max depth?+            if (flag_max_depth > 0 && level > flag_max_depth)               return Grep::Type::SKIP;              // hard maximum recursion depth reached?             if (level > MAX_DEPTH)             {               if (!flag_no_messages)-                fprintf(stderr, "%sugrep: %s%s%s recursion depth exceeds hard limit of %d\n", color_off, color_high, pathname, color_off, MAX_DEPTH);+                fprintf(stderr, "%sugrep: %s%s%s recursion depth hit hard limit of %d\n", color_off, color_high, pathname, color_off, MAX_DEPTH);               return Grep::Type::SKIP;             } @@ -6195,6 +6241,10 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co         }         else if (type == DIRENT_TYPE_REG ? !is_output(inode) : (type == DIRENT_TYPE_UNKNOWN || type == DIRENT_TYPE_LNK) && S_ISREG(buf.st_mode) ? !is_output(buf.st_ino) : flag_devices_action == Action::READ)         {+          // --depth: recursion level not deep enough?+          if (flag_min_depth > 0 && level <= flag_min_depth)+            return Grep::Type::SKIP;+           // do not exclude files that are reversed by ! negation           bool negate = false;           for (auto& glob : flag_not_exclude)@@ -6227,7 +6277,7 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co               std::istream stream(&streambuf);                // file has the magic bytes we're looking for: search the file-              size_t match = magic.input(&stream).scan();+              size_t match = magic_matcher.input(&stream).scan();               if (match == flag_not_magic || match >= flag_min_magic)               {                 fclose(file);@@ -6243,7 +6293,7 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co #endif             {               // if file has the magic bytes we're looking for: search the file-              size_t match = magic.input(reflex::Input(file, flag_encoding_type)).scan();+              size_t match = magic_matcher.input(reflex::Input(file, flag_encoding_type)).scan();               if (match == flag_not_magic || match >= flag_min_magic)               {                 fclose(file);@@ -6298,7 +6348,7 @@ Grep::Type select(size_t level, reflex::Matcher& magic, const char *pathname, co }  // recurse over directory, searching for pattern matches in files and subdirectories-void Grep::recurse(size_t level, reflex::Matcher& magic, const char *pathname)+void Grep::recurse(size_t level, const char *pathname) { #ifdef OS_WIN @@ -6425,7 +6475,7 @@ void Grep::recurse(size_t level, reflex::Matcher& magic, const char *pathname)       }        // search dirpathname, unless searchable directory into which we should recurse-      switch (select(level + 1, magic, dirpathname.c_str(), ffd.cFileName, DIRENT_TYPE_UNKNOWN, inode, info))+      switch (select(level + 1, dirpathname.c_str(), ffd.cFileName, DIRENT_TYPE_UNKNOWN, inode, info))       {         case Type::DIRECTORY:           subdirs.emplace_back(dirpathname, 0, info);@@ -6475,10 +6525,10 @@ void Grep::recurse(size_t level, reflex::Matcher& magic, const char *pathname)       // search dirpathname, unless searchable directory into which we should recurse #if defined(HAVE_STRUCT_DIRENT_D_TYPE) && defined(HAVE_STRUCT_DIRENT_D_INO)       inode = dirent->d_ino;-      type = select(level + 1, magic, dirpathname.c_str(), dirent->d_name, dirent->d_type, inode, info);+      type = select(level + 1, dirpathname.c_str(), dirent->d_name, dirent->d_type, inode, info); #else       inode = 0;-      type = select(level + 1, magic, dirpathname.c_str(), dirent->d_name, DIRENT_TYPE_UNKNOWN, inode, info);+      type = select(level + 1, dirpathname.c_str(), dirent->d_name, DIRENT_TYPE_UNKNOWN, inode, info); #endif        switch (type)@@ -6589,7 +6639,7 @@ void Grep::recurse(size_t level, reflex::Matcher& magic, const char *pathname)     } #endif -    recurse(level + 1, magic, entry.pathname.c_str());+    recurse(level + 1, entry.pathname.c_str());  #ifndef OS_WIN     if (flag_dereference)@@ -7023,7 +7073,7 @@ void Grep::search(const char *pathname)                while ((to = static_cast<const char*>(memchr(from, '\n', size - (from - begin)))) != NULL)               {-                out.str(color_ms);+                out.str(match_ms);                 out.str(from, to - from + 1);                 out.str(color_off); @@ -7037,7 +7087,7 @@ void Grep::search(const char *pathname)               begin = from;             } -            out.str(color_ms);+            out.str(match_ms);             out.str(begin, size);             out.str(color_off); @@ -7194,7 +7244,7 @@ void Grep::search(const char *pathname)                  while ((to = static_cast<const char*>(memchr(from, '\n', size - (from - begin)))) != NULL)                 {-                  out.str(color_ms);+                  out.str(match_ms);                   out.str(from, to - from + 1);                   out.str(color_off); @@ -7209,7 +7259,7 @@ void Grep::search(const char *pathname)                 begin = from;               } -              out.str(color_ms);+              out.str(match_ms);               out.str(begin, size);               out.str(color_off); @@ -7253,7 +7303,7 @@ void Grep::search(const char *pathname)             {               size_t lines = matcher->lines(); -              if (lines > 1 || flag_color)+              if (lines > 1 || flag_apply_color)               {                 size_t first = matcher->first();                 size_t last = matcher->last();@@ -7280,7 +7330,7 @@ void Grep::search(const char *pathname)                      while ((to = static_cast<const char*>(memchr(from, '\n', size - (from - begin)))) != NULL)                     {-                      out.str(color_ms);+                      out.str(match_ms);                       out.str(from, to - from + 1);                       out.str(color_off); @@ -7295,7 +7345,7 @@ void Grep::search(const char *pathname)                     begin = from;                   } -                  out.str(color_ms);+                  out.str(match_ms);                   out.str(begin, size);                   out.str(color_off);                 }@@ -7544,7 +7594,7 @@ void Grep::search(const char *pathname)                 }                 else                 {-                  out.str(color_mc);+                  out.str(match_mc);                   out.str(matcher->begin(), matcher->size());                   out.str(color_off);                 }@@ -7683,7 +7733,7 @@ void Grep::search(const char *pathname)                     }                     else                     {-                      out.str(color_mc);+                      out.str(match_mc);                       out.str(matcher->begin(), matcher->size());                       out.str(color_off);                     }@@ -7873,7 +7923,7 @@ void Grep::search(const char *pathname)                 out.str(color_sl);                 out.str(lines[current].c_str(), matcher->first());                 out.str(color_off);-                out.str(color_ms);+                out.str(match_ms);                 out.str(matcher->begin(), matcher->size());                 out.str(color_off);                 out.str(color_sl);@@ -7926,7 +7976,7 @@ void Grep::search(const char *pathname)                   out.str(color_sl);                   out.str(lines[current].c_str() + last, matcher->first() - last);                   out.str(color_off);-                  out.str(color_ms);+                  out.str(match_ms);                   out.str(matcher->begin(), matcher->size());                   out.str(color_off);                 }@@ -8045,7 +8095,7 @@ done_search:      catch (...)     {-      // this can or should never happen+      // this cannot or should never happen       warning("exception while searching", pathname);     } @@ -8230,7 +8280,7 @@ void trim_nl(std::string& line)     line.pop_back(); } -// convert GREP_COLORS and set the color substring to the ANSI SGR sequence+// convert GREP_COLORS and set the color substring to the ANSI SGR codes void set_color(const char *colors, const char *parameter, char color[COLORLEN]) {   if (colors != NULL)@@ -8411,7 +8461,7 @@ size_t strtopos(const char *string, const char *message) }  // convert one or two comma-separated unsigned decimals specifying a range to positive size_t, produce error when conversion fails or when the range is invalid-void strtopos2(const char *string, size_t& pos1, size_t& pos2, const char *message)+void strtopos2(const char *string, size_t& pos1, size_t& pos2, const char *message, bool optional_first) {   char *rest = const_cast<char*>(string);   if (*string != ',')@@ -8420,6 +8470,8 @@ void strtopos2(const char *string, size_t& pos1, size_t& pos2, const char *messa     pos1 = 0;   if (*rest == ',')     pos2 = static_cast<size_t>(strtoull(rest + 1, &rest, 10));+  else if (optional_first)+    pos2 = pos1, pos1 = 0;   else     pos2 = 0;   if (rest == NULL || *rest != '\0' || (pos2 > 0 && pos1 > pos2))@@ -8434,7 +8486,11 @@ void help(const char *message, const char *arg)    std::cout << "Usage: ugrep [OPTIONS] [PATTERN] [-f FILE] [-e PATTERN] [FILE ...]\n"; -  if (!message)+  if (message)+  {+    std::cout << "Try 'ugrep --help' for more information.\n";+  }+  else   {     std::cout << "\n\     -A NUM, --after-context=NUM\n\@@ -8516,10 +8572,11 @@ void help(const char *message, const char *arg)             option.  If ACTION is `dereference-recurse', read all files under\n\             each directory, recursively, following symbolic links.  This is\n\             equivalent to the -R option.\n\-    --depth=NUM, -1, -2, -3, -4, -5, -6, -7, -8, -9\n\-            Restrict recursive searches to NUM (NUM > 0) directory levels deep,\n\+    --depth=[MIN,][MAX], -1, -2, -3, -4, -5, -6, -7, -8, -9\n\+            Restrict recursive searches from MIN to MAX directory levels deep,\n\             where -1 (--depth=1) searches the specified path without recursing\n\-            into subdirectories.  Enables -R if -R or -r is not specified.\n\+            into subdirectories.  Note that -3-5 searches 3 to 5 levels deep.\n\+            Enables -R if -R or -r is not specified.\n\     -E, --extended-regexp\n\             Interpret patterns as extended regular expressions (EREs). This is\n\             the default.\n\@@ -8530,20 +8587,27 @@ void help(const char *message, const char *arg)             This option is most useful when multiple -e options are used to\n\             specify multiple patterns, when a pattern begins with a dash (`-'),\n\             to specify a pattern after option -f or after the FILE arguments.\n\+    --encoding=ENCODING\n\+            The encoding format of the input, where ENCODING can be:";+  for (int i = 0; format_table[i].format != NULL; ++i)+    std::cout << (i == 0 ? "" : ",") << (i % 4 ? " " : "\n            ") << "`" << format_table[i].format << "'";+  std::cout << ".\n\     --exclude=GLOB\n\             Skip files whose name matches GLOB using wildcard matching, same as\n\             -g !GLOB.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to\n\             quote a wildcard or backslash character literally.  When GLOB\n\             contains a `/', full pathnames are matched.  Otherwise basenames\n\             are matched.  Note that --exclude patterns take priority over\n\-            --include patterns.  This option may be repeated.\n\+            --include patterns.  GLOB should be quoted to prevent shell\n\+            globbing.  This option may be repeated.\n\     --exclude-dir=GLOB\n\             Exclude directories whose name matches GLOB from recursive\n\             searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to\n\             quote a wildcard or backslash character literally.  When GLOB\n\             contains a `/', full pathnames are matched.  Otherwise basenames\n\             are matched.  Note that --exclude-dir patterns take priority over\n\-            --include-dir patterns.  This option may be repeated.\n\+            --include-dir patterns.  GLOB should be quoted to prevent shell\n\+            globbing.  This option may be repeated.\n\     --exclude-from=FILE\n\             Read the globs from FILE and skip files and directories whose name\n\             matches one or more globs (as if specified by --exclude and\n\@@ -8604,7 +8668,8 @@ void help(const char *message, const char *arg)     -g GLOB, --glob=GLOB\n\             Search only files whose name matches GLOB, same as --include=GLOB.\n\             When GLOB is preceded by a `!' or a `^', skip files whose name\n\-            matches GLOB, same as --exclude=GLOB.\n\+            matches GLOB, same as --exclude=GLOB.  GLOB should be quoted to\n\+            prevent shell globbing.  This option may be repeated.\n\     --group-separator[=SEP]\n\             Use SEP as a group separator for context options -A, -B, and -C.\n\             The default is a double hyphen (`--').\n\@@ -8624,6 +8689,14 @@ void help(const char *message, const char *arg)             default is 2 columns or 16 bytes per line.  Option `b' removes all\n\             space breaks, `c' hides the character column, and `h' removes the\n\             hex spacing only.  Enables -X if -W or -X is not specified.\n\+    --[no-]hidden\n\+            Do (not) search ";+#ifdef OS_WIN+  std::cout << "Windows system and ";+#endif+  std::cout << "hidden files and directories.\n";+#ifndef OS_WIN+  std::cout << "\     -I\n\             Ignore matches in binary files.  This option is equivalent to the\n\             --binary-files=without-match option.\n\@@ -8644,14 +8717,16 @@ void help(const char *message, const char *arg)             and \\ to quote a wildcard or backslash character literally.  When\n\             GLOB contains a `/', full pathnames are matched.  Otherwise\n\             basenames are matched.  Note that --exclude patterns take priority\n\-            over --include patterns.  This option may be repeated.\n\+            over --include patterns.  GLOB should be quoted to prevent shell\n\+            globbing.  This option may be repeated.\n\     --include-dir=GLOB\n\             Only directories whose name matches GLOB are included in recursive\n\             searches.  GLOB can use **, *, ?, and [...] as wildcards, and \\ to\n\             quote a wildcard or backslash character literally.  When GLOB\n\             contains a `/', full pathnames are matched.  Otherwise basenames\n\             are matched.  Note that --exclude-dir patterns take priority over\n\-            --include-dir patterns.  This option may be repeated.\n\+            --include-dir patterns.  GLOB should be quoted to prevent shell\n\+            globbing.  This option may be repeated.\n\     --include-from=FILE\n\             Read the globs from FILE and search only files and directories\n\             whose name matches one or more globs (as if specified by --include\n\@@ -8720,6 +8795,10 @@ void help(const char *message, const char *arg)             Restrict the number of files matched to NUM.  Note that --sort or\n\             -J1 may be specified to produce replicable results.  If --sort is\n\             specified, the number of threads spawned is limited to NUM.\n\+    --[no-]mmap[=MAX]\n\+            Do (not) use memory maps to search files.  By default, memory maps\n\+            are used under certain conditions to improve performance.  When MAX\n\+            is specified, use up to MAX mmap memory per thread.\n\     -N PATTERN, --neg-regexp=PATTERN\n\             Specify a negative PATTERN used during the search of the input:\n\             an input line is selected only if it matches any of the specified\n\@@ -8733,18 +8812,7 @@ void help(const char *message, const char *arg)             each file processed.\n\     --no-group-separator\n\             Removes the group separator line from the output for context\n\-            options -A, -B, and -C.\n\-    --[no-]hidden\n\-            Do (not) search ";-#ifdef OS_WIN-  std::cout << "Windows system and ";-#endif-  std::cout << "hidden files and directories.\n";-#ifndef OS_WIN-  std::cout << "\-    --[no-]mmap\n\-            Do (not) use memory maps to search files.  By default, memory maps\n\-            are used under certain conditions to improve performance.\n";+            options -A, -B, and -C.\n"; #endif   std::cout << "\     -O EXTENSIONS, --file-extensions=EXTENSIONS\n\@@ -8765,9 +8833,13 @@ void help(const char *message, const char *arg)             displaying the match.  The line number counter is reset for each\n\             file processed.\n\     -P, --perl-regexp\n\-            Interpret PATTERN as a Perl regular expression.\n";-#if !defined(HAVE_PCRE2) && !defined(HAVE_BOOST_REGEX)-  std::cout << "\+            Interpret PATTERN as a Perl regular expression";+#if defined(HAVE_PCRE2)+  std::cout << " using PCRE2.\n";+#elif defined(HAVE_BOOST_REGEX)+  std::cout << " using Boost.Regex.\n";+#else+  std::cout << ".\n\             This option is not available in this build configuration of ugrep.\n"; #endif   std::cout << "\@@ -8778,13 +8850,17 @@ void help(const char *message, const char *arg)             When output is sent to the terminal, uses COMMAND to page through\n\             the output.  The default COMMAND is `" DEFAULT_PAGER "'.  Enables --heading\n\             and --line-buffered.\n\-    --pretty\n\-            When output is sent to a terminal, enables --color and --heading.\n\-    -Q ENCODING, --encoding=ENCODING\n\-            The encoding format of the input, where ENCODING can be:";-  for (int i = 0; format_table[i].format != NULL; ++i)-    std::cout << (i == 0 ? "" : ",") << (i % 4 ? " " : "\n            ") << "`" << format_table[i].format << "'";-  std::cout << ".\n\+    --[no-]pretty\n\+            When output is sent to a terminal, enables --color, --heading, -T.\n\+    -Q[DELAY], --query[=DELAY]\n\+            Query mode: user interface to perform interactive searches.  This\n\+            mode requires an ANSI capable terminal.  An optional DELAY argument\n\+            may be specified to reduce or increase the response time to perform\n\+            searches after the last key press, in increments of 100ms, where\n\+            the default is 5 (500ms delay).  Initial patterns may be specified\n\+            with -e PATTERN, i.e. a PATTERN argument requires option -e.  Press\n\+            F1 or CTRL-Z to view the help screen.  No whitespace may be given\n\+            between -Q and its argument DELAY.\n\     -q, --quiet, --silent\n\             Quiet mode: suppress all output.  ugrep will only search until a\n\             match has been found, making searches potentially less expensive.\n\@@ -9007,6 +9083,13 @@ void error(const char *message, const char *arg)   exit(EXIT_ERROR); } +// print to standard error: abort message with exception details, then exit+void abort(const char *message)+{+  fprintf(stderr, "%sugrep: %s%s%s\n\n", color_off, color_error, message, color_off);+  exit(EXIT_ERROR);+}+ // print to standard error: abort message with exception details, then exit void abort(const char *message, const std::string& what) {

src/ugrep.hpp

new file mode 100644@@ -0,0 +1,304 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      ugrep.hpp+@brief     Universal grep - a pattern search utility written in C++11+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#ifndef UGREP_HPP+#define UGREP_HPP++// check if we are compiling for a windows OS, but not Cygwin or MinGW+#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__BORLANDC__)) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__)+# define OS_WIN+#endif++#ifdef OS_WIN++// disable min/max macros to use std::min and std::max+#define NOMINMAX++#include <windows.h>+#include <tchar.h> +#include <stdio.h>+#include <io.h>+#include <strsafe.h>+#include <string.h>++#define STDIN_FILENO  0+#define STDOUT_FILENO 1+#define STDERR_FILENO 2++#define PATHSEPCHR '\\'+#define PATHSEPSTR "\\"++// POSIX read() and write() return type is ssize_t+typedef int ssize_t;++// POSIX pipe() emulation+inline int pipe(int fd[2])+{+  HANDLE pipe_r = NULL;+  HANDLE pipe_w = NULL;+  if (CreatePipe(&pipe_r, &pipe_w, NULL, 0))+  {+    fd[0] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_r), 0);+    fd[1] = _open_osfhandle(reinterpret_cast<intptr_t>(pipe_w), 0);+    return 0;+  }+  return -1;+}++// POSIX popen()+inline FILE *popen(const char *command, const char *mode)+{+  return _popen(command, mode);+}++// POSIX pclose()+inline int pclose(FILE *stream)+{+  return _pclose(stream);+}++// Wrap Windows _dupenv_s()+inline int dupenv_s(char **ptr, const char *name)+{+  size_t len;+  return _dupenv_s(ptr, &len, name);+}++#else++// not compiling for a windows OS++#include <cerrno>+#include <cstdlib>+#include <cstdio>+#include <cstring>++#ifdef HAVE_CONFIG_H+# include "config.h"+#endif++#ifdef HAVE_MMAP+# include <sys/mman.h>+#endif++#ifdef HAVE_SYS_STATVFS_H+# include <sys/statvfs.h>+#endif++#define PATHSEPCHR '/'+#define PATHSEPSTR "/"++// Windows-like dupenv_s()+inline int dupenv_s(char **ptr, const char *name)+{+  if (ptr == NULL)+    return EINVAL;+  *ptr = NULL;+  const char *env = getenv(name);+  if (env != NULL && (*ptr = strdup(env)) == NULL)+    return ENOMEM;+  return 0;+}++// Windows-compatible fopen_s()+inline int fopen_s(FILE **file, const char *filename, const char *mode)+{+  return (*file = fopen(filename, mode)) == NULL ? errno : 0;+}++#endif++// platform -- see configure.ac+#if !defined(PLATFORM)+# if defined(OS_WIN)+#  if defined(_WIN32)+#   define PLATFORM "WIN32"+#  elif defined(_WIN64)+#   define PLATFORM "WIN64"+#  else+#   define PLATFORM "WIN"+#  endif+# else+#  define PLATFORM ""+# endif+#endif++#include <reflex/input.h>+#include <string>+#include <vector>++// -D, --devices and -d, --directories+enum class Action { SKIP, READ, RECURSE };++// ugrep command-line options+extern bool flag_with_filename;+extern bool flag_no_filename;+extern bool flag_no_header;+extern bool flag_no_messages;+extern bool flag_match;+extern bool flag_count;+extern bool flag_fixed_strings;+extern bool flag_free_space;+extern bool flag_ignore_case;+extern bool flag_smart_case;+extern bool flag_invert_match;+extern bool flag_line_number;+extern bool flag_only_line_number;+extern bool flag_column_number;+extern bool flag_byte_offset;+extern bool flag_line_buffered;+extern bool flag_only_matching;+extern bool flag_ungroup;+extern bool flag_quiet;+extern bool flag_files_with_match;+extern bool flag_files_without_match;+extern bool flag_null;+extern bool flag_basic_regexp;+extern bool flag_perl_regexp;+extern bool flag_word_regexp;+extern bool flag_line_regexp;+extern bool flag_dereference;+extern bool flag_no_dereference;+extern bool flag_binary;+extern bool flag_binary_without_matches;+extern bool flag_text;+extern bool flag_hex;+extern bool flag_with_hex;+extern bool flag_empty;+extern bool flag_initial_tab;+extern bool flag_decompress;+extern bool flag_any_line;+extern bool flag_heading;+extern bool flag_break;+extern bool flag_stats;+extern bool flag_cpp;+extern bool flag_csv;+extern bool flag_json;+extern bool flag_xml;+extern bool flag_stdin;+extern bool flag_all_threads;+extern bool flag_sort_name;+extern bool flag_sort_size;+extern bool flag_sort_atime;+extern bool flag_sort_mtime;+extern bool flag_sort_ctime;+extern bool flag_sort_reversed;+extern bool flag_pretty;+extern bool flag_no_hidden;+extern bool flag_hex_hbr;+extern bool flag_hex_cbr;+extern bool flag_hex_chr;+extern Action flag_devices_action;+extern Action flag_directories_action;+extern size_t flag_query;+extern size_t flag_after_context;+extern size_t flag_before_context;+extern size_t flag_min_depth;+extern size_t flag_max_depth;+extern size_t flag_max_count;+extern size_t flag_max_files;+extern size_t flag_min_line;+extern size_t flag_max_line;+extern size_t flag_not_magic;+extern size_t flag_min_magic;+extern size_t flag_jobs;+extern size_t flag_tabs;+extern size_t flag_hex_columns;+extern size_t flag_max_mmap;+extern size_t flag_min_steal;+extern const char *flag_pager;+extern const char *flag_color;+extern const char *flag_apply_color;+extern const char *flag_hexdump;+extern const char *flag_colors;+extern const char *flag_encoding;+extern const char *flag_filter;+extern const char *flag_format;+extern const char *flag_format_begin;+extern const char *flag_format_end;+extern const char *flag_format_open;+extern const char *flag_format_close;+extern const char *flag_sort;+extern const char *flag_devices;+extern const char *flag_directories;+extern const char *flag_label;+extern const char *flag_separator;+extern const char *flag_group_separator;+extern const char *flag_binary_files;+extern std::vector<std::string> flag_regexp;+extern std::vector<std::string> flag_neg_regexp;+extern std::vector<std::string> flag_file;+extern std::vector<std::string> flag_file_types;+extern std::vector<std::string> flag_file_extensions;+extern std::vector<std::string> flag_file_magic;+extern std::vector<std::string> flag_glob;+extern std::vector<std::string> flag_ignore_files;+extern std::vector<std::string> flag_include;+extern std::vector<std::string> flag_include_dir;+extern std::vector<std::string> flag_include_from;+extern std::vector<std::string> flag_include_fs;+extern std::vector<std::string> flag_not_include;+extern std::vector<std::string> flag_not_include_dir;+extern std::vector<std::string> flag_exclude;+extern std::vector<std::string> flag_exclude_dir;+extern std::vector<std::string> flag_exclude_from;+extern std::vector<std::string> flag_exclude_fs;+extern std::vector<std::string> flag_not_exclude;+extern std::vector<std::string> flag_not_exclude_dir;+extern reflex::Input::file_encoding_type flag_encoding_type;++// ugrep command-line arguments pointing to argv[]+extern const char *arg_pattern;+extern std::vector<const char*> arg_files;++// redirectable source is standard input by default or a pipe+extern FILE *source;++// redirectable output destination is standard output by default or a pipe+extern FILE *output;++// check TTY availability and set colors+extern void terminal();++// perform a ugrep search given the specified command line flags, patterns, and files+extern void ugrep();++extern void warning(const char *message, const char *arg);+extern void error(const char *message, const char *arg);+extern void abort(const char *message);+extern void abort(const char *message, const std::string& what);++#endif

src/vkey.cpp

new file mode 100644@@ -0,0 +1,897 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      vkey.cpp+@brief     Virtual terminal keyboard input API - static, not thread safe+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt+*/++#include "vkey.hpp"++// expand vkey support for non-portable META-PGUP/PGDN/HOME/END and META-F1/F2/F3/F4+// #define WITH_VKEY_ENABLE_EXPANDED++// fix ALT-LEFT and ALT-RIGHT e.g. with Mac OS Terminal, but this replaces ALT-b and ALT-f+// #define VKEY_FIX_META_LEFT+// #define VKEY_FIX_META_RIGHT++// use ALT-/ to enter Unicode character code followed by / or any non-hexdigit key, e.g. ALT-/3c0/ gives π+#ifndef VKEY_META_UNICODE+# define VKEY_META_UNICODE '/'+#endif++// rotate the key buffer+int VKey::rot_keybuf()+{+  unsigned char ch;++  ch = keybuf[0];+  keybuf[0] = keybuf[1];+  keybuf[1] = keybuf[2];+  keybuf[2] = 0;++  return ch;+}++#ifdef VKEY_DOS++// see https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60)++// wait until key press and return raw VKey::xxx code+int VKey::raw_get()+{+  int ch = _getch();++  if (ch == 0 || ch == 0xE0)+    ch = _getch();++  switch (ch)+  {+    case 10:  return LF;+    case 13:  return CR;+    case 59:  return FN(1);+    case 60:  return FN(2);+    case 61:  return FN(3);+    case 62:  return FN(4);+    case 63:  return FN(5);+    case 64:  return FN(6);+    case 65:  return FN(7);+    case 66:  return FN(8);+    case 67:  return FN(9);+    case 68:  return FN(10);+    case 71:  return HOME;+    case 72:  return UP;+    case 73:  return PGUP;+    case 75:  return LEFT;+    case 77:  return RIGHT;+    case 79:  return END;+    case 80:  return DOWN;+    case 81:  return PGDN;+    case 82:  keybuf[0] = DEL; return META; // INS+    case 83:  return DEL;+    case 115: return HOME; // CTRL-LEFT -> HOME+    case 116: return END; // CTRL-RIGHT -> END+    case 133: return FN(11);+    case 134: return FN(12);+    case 141: return PGUP; // CTRL-UP   -> PGUP+    case 145: return PGDN; // CTRL-DOWN -> PGDN+    case 147: keybuf[0] = DEL;   return META; // CTRL-DEL -> META-DEL+    case 148: keybuf[0] = TAB;   return META; // CTRL-TAB -> META-TAB+    case 152: keybuf[0] = UP;    return META;+    case 155: keybuf[0] = LEFT;  return META;+    case 157: keybuf[0] = RIGHT; return META;+    case 160: keybuf[0] = DOWN;  return META;+    case 163: keybuf[0] = DEL;   return META;+#ifdef WITH_VKEY_ENABLE_EXPANDED+    case 117: keybuf[0] = END;  return META; // CTRL-END+    case 118: keybuf[0] = PGDN; return META; // CTRL-PGDN+    case 119: keybuf[0] = HOME; return META; // CTRL-HOME+    case 134: keybuf[0] = PGUP; return META; // CTRL-PGUP+    case 151: keybuf[0] = HOME; return META; // META-HOME+    case 153: keybuf[0] = PGUP; return META; // META-PGUP+    case 159: keybuf[0] = END;  return META; // META-END+    case 161: keybuf[0] = PGDN; return META; // META-PGDN+    case 162: keybuf[0] = DEL;  return META; // META-DEL+#endif+    default: if (ch >= 1 && ch <= 126) return ch;+  }++  return 0;+}++// wait until key press and return raw VKey::xxx code, time out after timeout ms+int VKey::raw_in(int timeout)+{+  if (keybuf[0])+    return rot_keybuf();++  switch (WaitForSingleObject(hConIn, timeout))+  {+    case WAIT_OBJECT_0:+      if (!_kbhit())+      {+        FlushConsoleInputBuffer(hConIn);+        return 0;+      }+      return raw_get();++    case WAIT_TIMEOUT:+      return 0;++    default:+      return EOF;+  }+}++// wait until key press and return VKey::xxx code+int VKey::get()+{+  int ch;++  if (keybuf[0])+    return rot_keybuf();++  while ((ch = raw_get()) == 0)+    continue;++  return fn_key(ch);+}++// wait until key press and return VKey::xxx code, time out after timeout ms+int VKey::in(int timeout)+{+  if (keybuf[0])+    return rot_keybuf();++  return fn_key(raw_in(timeout));+}++#else++#ifdef VKEY_WIN++// wait until key press and return raw VKey::xxx code+int VKey::raw_get()+{+  char ch;++  if (ReadFile(hConIn, &ch, 1, NULL, NULL))+    return static_cast<unsigned char>(ch);++  return EOF;+}++// wait until key press and return raw VKey::xxx code, time out after timeout ms+int VKey::raw_in(int timeout)+{+  switch (WaitForSingleObject(hConIn, timeout))+  {+    case WAIT_OBJECT_0:+      if (!_kbhit())+      {+        FlushConsoleInputBuffer(hConIn);+        return 0;+      }+      return raw_get();++    case WAIT_TIMEOUT:+      return 0;++    default:+      return EOF;+  }+}++#else++// wait until key press and return raw VKey::xxx code+int VKey::raw_get()+{+  char ch;++  if (read(tty, &ch, 1) <= 0)+    return EOF;++  return static_cast<unsigned char>(ch);+}++// wait until key press and return raw VKey::xxx code, time out after timeout ms+int VKey::raw_in(int timeout)+{+  char ch = 0;+  struct timeval tv;++  fd_set readfds;+  FD_ZERO(&readfds);+  FD_SET(tty, &readfds);+  tv.tv_sec = timeout / 1000;+  tv.tv_usec = (1000 * timeout) % 1000000;++  switch (select(tty + 1, &readfds, NULL, NULL, &tv))+  {+    case 0:+      return 0;++    case 1:+      if (read(tty, &ch, 1) == 1)+        return ch ? static_cast<unsigned char>(ch) : 32;+  }++  return EOF;+}++#endif++// wait for next raw key press within VKey::TIMEOUT ms+int VKey::key()+{+  return VKey::raw_in(VKey::TIMEOUT);+}++// return VKey::META key press or META+/hex/ Unicode code point+int VKey::alt_key(int ch)+{+#ifdef VKEY_META_UNICODE++  if (ch == VKEY_META_UNICODE)+  {+    unsigned char *chp;+    int code = 0;++    do+    {+      ch = raw_get();++      if (ch >= 'A' && ch <= 'Z')+        ch -= 7;+      else if (ch >= 'a' && ch <= 'z')+        ch -= 39;++      if (ch < '0' || ch > '0' + 15)+      {+        (void)vkey(ch);+        break;+      }++      code = 16 * code + ch - '0';+    } while (code <= 0x10FFF);++    if (code < 0x80)+      return code;++    chp = keybuf;++    if (code < 0x0800)+    {+      ch = (0xC0 | ((code >> 6) & 0x1F));+    }+    else+    {+      if (code < 0x010000)+      {+        ch = (0xE0 | ((code >> 12) & 0x0F));+      }+      else+      {+        ch = (0xF0 | ((code >> 18) & 0x07));+        *chp++ = static_cast<unsigned char>(0x80 | ((code >> 12) & 0x3F));+      }+      *chp++ = static_cast<unsigned char>(0x80 | ((code >> 6) & 0x3F));+    }+    *chp++ = static_cast<unsigned char>(0x80 | (code & 0x3F));++    return ch;+  }++#endif++  if (ch >= 32 && ch <= 126 && alt[ch - 32][0] != 0)+  {+    keybuf[0] = alt[ch - 32][1];+    keybuf[1] = alt[ch - 32][2];+    keybuf[2] = alt[ch - 32][3];++    return alt[ch - 32][0];+  }++  keybuf[0] = ch;++  return META;+}++// return VKey::FN or VKey::META key press or META+/hex/ Unicode code point+int VKey::fn_key(int ch)+{+  if (ch >= 256 + '@' && ch < 256 + '@' + 12 && fn[ch - 256 - '@'][0] != '\0')+  {+    if (fn[ch - 256 - '@'][0] == META)+      return alt_key(fn[ch - 256 - '@'][1]);++    keybuf[0] = fn[ch - 256 - '@'][1];+    keybuf[1] = fn[ch - 256 - '@'][2];+    keybuf[2] = fn[ch - 256 - '@'][3];++    return fn[ch - 256 - '@'][0];+  }++  return ch;+}++// translate ANSI escape sequence starting with ch, return VKey::xxx key code+int VKey::ansi_esc(int ch)+{+  int ch2;++  switch (ch)+  {+    case 0:+      return VKey::ESC;+    case 13:+      return 10; // META-ENTER -> LF+    case 27:+      if (keybuf[0]) // nonzero when holding down ESC+      {+        flush();+        return 0;+      }+      keybuf[0] = ESC;+      ch = ansi_esc(key());+      if (ch == 0)+        return 0;+      keybuf[0] = ch;+      return META;+    case 'O':+      switch (ch = key())+      {+        case 0:+          return alt_key('O');+#ifdef WITH_VKEY_ENABLE_EXPANDED+        case '1':+          if (key() == ';')+            key(); // ignore '2'..'8'+          switch (key())+          {+            case 'P': return FN(9);  // META-FN1 -> FN9+            case 'Q': return FN(10); // META-FN2 -> FN10+            case 'R': return FN(11); // META-FN3 -> FN11+            case 'S': return FN(12); // META-FN4 -> FN12+          }+          return 0;+#endif+        case 'A': return UP;+        case 'B': return DOWN;+        case 'C': return RIGHT;+        case 'D': return LEFT;+        case 'F': return END;+        case 'H': return HOME;+        case 'P': return FN(1);+        case 'Q': return FN(2);+        case 'R': return FN(3);+        case 'S': return FN(4);+        case 'T': return FN(5);+        case 'U': return FN(6);+        case 'V': return FN(7);+        case 'W': return FN(8);+        case 'X': return FN(9);+        case 'Y': return FN(10);+        case 'Z': return FN(11);+        case '[': return FN(12);+      }+      return 0;+    case '[':+      switch (ch = key())+      {+        case 0:+          return alt_key('[');+        case '1':+          if ((ch = key()) == '~')+            return HOME;+          if ((ch2 = key()) == ';')+            ch2 = key();+          switch (ch2)+          {+            case '2': // SHIFT+            case '3': // META+            case '4': // META-SHIFT+              switch (key())+              {+                case 'A': keybuf[0] = UP;    return META; // META-UP+                case 'B': keybuf[0] = DOWN;  return META; // META-DOWN+                case 'C': keybuf[0] = RIGHT; return META; // META-RIGHT+                case 'D': keybuf[0] = LEFT;  return META; // META-LEFT+#ifdef WITH_VKEY_ENABLE_EXPANDED+                case 'F': keybuf[0] = END;   return META; // META-END+                case 'H': keybuf[0] = HOME;  return META; // META-HOME+#endif+              }+              return 0;+            case '5': // CTRL+            case '6': // CTRL-SHIFT+              switch (key())+              {+                case 'A': return PGUP; // CTRL-UP    -> PGUP+                case 'B': return PGDN; // CTRL-DOWN  -> PGDN+                case 'C': return END;  // CTRL-RIGHT -> END+                case 'D': return HOME; // CTRL-LEFT  -> HOME+#ifdef WITH_VKEY_ENABLE_EXPANDED+                case 'F': keybuf[0] = END;   return META; // CTRL-END  -> META-END+                case 'H': keybuf[0] = HOME;  return META; // CTRL-HOME -> META-HOME+#endif+              }+              return 0;+#ifdef WITH_VKEY_ENABLE_EXPANDED+            case '7': // META-CTRL+            case '8': // META-CTRL-SHIFT+              switch (key())+              {+                case 'A': keybuf[0] = PGUP; return META; // META-PGUP+                case 'B': keybuf[0] = PGDN; return META; // META-PGDN+                case 'C': keybuf[0] = END;  return META; // META-END+                case 'D': keybuf[0] = HOME; return META; // META-HOME+                case 'F': keybuf[0] = END;  return META; // META-END+                case 'H': keybuf[0] = HOME; return META; // META-HOME+              }+              return 0;+#endif+            case '~':+              switch (ch)+              {+                case '1': return FN(1);+                case '2': return FN(2);+                case '3': return FN(3);+                case '4': return FN(4);+                case '5': return FN(5);+                case '7': return FN(6);+                case '8': return FN(7);+                case '9': return FN(8);+              }+          }+          return 0;+        case '2':+          if ((ch = key()) == '~')+          {+            keybuf[0] = DEL;+            return META; // INS -> META-DEL+          }+          if (ch == ';' || (ch2 = key()) == ';')+          {+            key(); // ignore '2'..'8'+	    ch2 = key();+          }+          if (ch2 == '~')+          {+            switch (ch)+            {+              case '0': return FN(9);+              case '1': return FN(10);+              case '3': return FN(11);+              case '4': return FN(12);+#ifdef WITH_VKEY_ENABLE_EXPANDED+              case ';': return DEL; // META-INS -> DEL+#endif+            }+          }+          return 0;+        case '3':+          switch (key())+          {+            case ';':+              key(); // ignore '2'..'8'+              if (key() != '~')+		 return 0;+              keybuf[0] = DEL;+              return META;+            case '~': return DEL;+          }+          return 0;+        case '4':+          switch (key())+          {+#ifdef WITH_VKEY_ENABLE_EXPANDED+            case ';':+              key(); // ignore '2'..'8'+              if (key() != '~')+		 return 0;+              keybuf[0] = END;+              return META;+#endif+            case '~': return END;+          }+          return 0;+        case '5':+          switch (key())+          {+#ifdef WITH_VKEY_ENABLE_EXPANDED+            case ';':+              key(); // ignore '2'..'8'+              if (key() != '~')+		 return 0;+              keybuf[0] = PGUP;+              return META;+#endif+            case '~': return PGUP;+          }+          return 0;+        case '6':+          switch (key())+          {+#ifdef WITH_VKEY_ENABLE_EXPANDED+            case ';':+              key(); // ignore '2'..'8'+              if (key() != '~')+		 return 0;+	      keybuf[0] = PGDN;+	      return META;+#endif+            case '~': return PGDN;+          }+          return 0;+        case 'A': return UP;+        case 'B': return DOWN;+        case 'C': return RIGHT;+        case 'D': return LEFT;+        case 'F': return END;+        case 'H': return HOME;+        case 'Z': keybuf[0] = TAB; return META;+        case '[':+          switch (key())+          {+            case 'A': return FN(1);+            case 'B': return FN(2);+            case 'C': return FN(3);+            case 'D': return FN(4);+            case 'E': return FN(5);+          }+      }+      return 0;+  }++  return alt_key(ch);+}++// translate ANSI escape sequences, FN, and DEL keys+int VKey::vkey(int ch)+{+  switch (ch)+  {+    case 27:  return fn_key(ansi_esc(key()));+    case 127: return 8;+  }++  return ch;+}++// wait until key press and return VKey::xxx code+int VKey::get()+{+  int ch;++  if (keybuf[0])+    return rot_keybuf();++  while ((ch = vkey(raw_get())) == 0)+    continue;++  return ch;+}++// wait until key press and return VKey::xxx code, time out after timeout ms+int VKey::in(int timeout)+{+  if (keybuf[0])+    return rot_keybuf();++  return vkey(raw_in(timeout));+}++#endif++// flush the key buffer and remove pending key presses until no key is pressed+void VKey::flush()+{+  keybuf[0] = 0;+  keybuf[1] = 0;+  keybuf[2] = 0;++#ifdef OS_WIN++  FlushConsoleInputBuffer(hConIn);++#else++  while (key() > 0)+    continue;++#endif+}++// setup vkey in VKey::NORMAL tty or VKey::RAW raw tty mode (cfmakeraw), returns 0 on success <0 on failure+bool VKey::setup(int mode)+{+#ifdef OS_WIN++  hConIn = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);++  if (hConIn == INVALID_HANDLE_VALUE)+    return false;++  if (!GetConsoleMode(hConIn, &oldInMode))+    return false;++  DWORD inMode = oldInMode & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT);++  if (mode == VKey::RAW)+    inMode &= ~ENABLE_PROCESSED_INPUT;++  // get event when window is resized+  inMode |= ENABLE_WINDOW_INPUT;++#ifdef VKEY_WIN+  inMode |= ENABLE_VIRTUAL_TERMINAL_INPUT;+#endif++  if (!SetConsoleMode(hConIn, inMode))+    return false;++#ifdef CP_UTF8+  SetConsoleCP(CP_UTF8);+#endif++#else++  struct termios newterm;++  tty = open("/dev/tty", O_RDWR);++  if (tty < 0)+  {+    if (isatty(STDIN_FILENO) == 0)+      return false;+    tty = STDIN_FILENO;+  }++  fcntl(tty, F_SETFL, fcntl(tty, F_GETFL) & ~O_NONBLOCK);+  tcgetattr(tty, &oldterm);+  tcgetattr(tty, &newterm);++  if (mode == VKey::RAW)+    cfmakeraw(&newterm);+  else+    newterm.c_lflag &= ~(ECHO | ICANON);++  tcsetattr(tty, TCSADRAIN, &newterm);++#endif++  flush();++  return true;+}++// release vkey resources and restore tty+void VKey::cleanup()+{+#ifdef OS_WIN++  if (hConIn != INVALID_HANDLE_VALUE)+  {+    SetConsoleMode(hConIn, oldInMode);+    CloseHandle(hConIn);+  }++#else++  tcsetattr(tty, TCSAFLUSH, &oldterm);++#endif+}++// assign ALT + key code 32..126 one or more keys stored in string+void VKey::map_alt_key(int key, const char *keys)+{+  if (key >= 32 && key <= 126)+  {+    if (keys == NULL)+    {+      alt[key - 32][0] = 0;+    }+    else+    {+      for (size_t i = 0; i < sizeof(*alt) && *keys; ++i)+      {+        alt[key - 32][i] = *keys;+        if (*keys++ == '\0')+          break;+      }+    }+  }+}++// assign FN 1..12 one or more keys stored in string+void VKey::map_fn_key(unsigned num, const char *keys)+{+  if (num >= 1 && num <= 12)+  {+    if (keys == NULL)+    {+      fn[num - 1][0] = 0;+    }+    else+    {+      for (size_t i = 0; i < sizeof(*fn); ++i)+      {+        fn[num - 1][i] = *keys;+        if (*keys++ == '\0')+          break;+      }+    }+  }+}++#ifdef OS_WIN++// Windows console state+HANDLE VKey::hConIn;+DWORD  VKey::oldInMode;++#else++// Unix/Linux terminal state+int            VKey::tty;+struct termios VKey::oldterm;++#endif++// key buffer to store up to three more keys after ALT/OPTION/META key was pressed+unsigned char VKey::keybuf[3];++// META/ALT/OPTION key mapping table, up to 4 UTF-8 bytes, not required to be \0-terminated+unsigned char VKey::alt[127 - 32][4] = {+  { 0xc2, 0xa0, 0x00 }, // ALT-SPACE -> NBSP+  { 0xe2, 0x81, 0x84 }, // ALT-! -> ⁄+  { 0xc3, 0x86, 0x00 }, // ALT-" -> Æ+  { 0xe2, 0x80, 0xb9 }, // ALT-# -> ‹+  { 0xe2, 0x80, 0xba }, // ALT-$ -> ›+  { 0xef, 0xac, 0x81 }, // ALT-% -> fi+  { 0xe2, 0x80, 0xa1 }, // ALT-& -> ‡+  { 0xc3, 0xa6, 0x00 }, // ALT-' -> æ+  { 0xc2, 0xb7, 0x00 }, // ALT-( -> ·+  { 0xe2, 0x80, 0x9a }, // ALT-) -> ‚+  { 0xc2, 0xb0, 0x00 }, // ALT-* -> °+  { 0xc2, 0xb1, 0x00 }, // ALT-+ -> ±+  { 0xe2, 0x89, 0xa4 }, // ALT-, -> ≤+  { 0xe2, 0x80, 0x93 }, // ALT-- -> –+  { 0xe2, 0x89, 0xa5 }, // ALT-. -> ≥+  { 0xc3, 0xb7, 0x00 }, // ALT-/ -> ÷+  { 0xc2, 0xba, 0x00 }, // ALT-0 -> º+  { 0xc2, 0xa1, 0x00 }, // ALT-1 -> ¡+  { 0xe2, 0x84, 0xa2 }, // ALT-2 -> ™+  { 0xc2, 0xa3, 0x00 }, // ALT-3 -> £+  { 0xc2, 0xa2, 0x00 }, // ALT-4 -> ¢+  { 0xe2, 0x88, 0x9e }, // ALT-5 -> ∞+  { 0xc2, 0xa7, 0x00 }, // ALT-6 -> §+  { 0xc2, 0xb6, 0x00 }, // ALT-7 -> ¶+  { 0xe2, 0x80, 0xa2 }, // ALT-8 -> •+  { 0xc2, 0xaa, 0x00 }, // ALT-9 -> ª+  { 0xc3, 0x9a, 0x00 }, // ALT-: -> Ú+  { 0xe2, 0x80, 0xa6 }, // ALT-; -> …+  { 0xc2, 0xaf, 0x00 }, // ALT-< -> ¯+  { 0xe2, 0x89, 0xa0 }, // ALT-= -> ≠+  { 0xcb, 0x98, 0x00 }, // ALT-> -> ˘+  { 0xc2, 0xbf, 0x00 }, // ALT-? -> ¿+  { 0xe2, 0x82, 0xac }, // ALT-@ -> €+  { 0xc3, 0x85, 0x00 }, // ALT-A -> Å+  { 0xc4, 0xb1, 0x00 }, // ALT-B -> ı+  { 0xc3, 0x87, 0x00 }, // ALT-C -> Ç+  { 0xc3, 0x8e, 0x00 }, // ALT-D -> Î+  { 0xcb, 0x8a, 0x00 }, // acute accent ALT-E -> ´+  { 0xc3, 0x8f, 0x00 }, // ALT-F -> Ï+  { 0xcb, 0x9d, 0x00 }, // ALT-G -> ˝+  { 0xc3, 0x93, 0x00 }, // ALT-H -> Ó+  { 0xcb, 0x86, 0x00 }, // circumflex accent ALT-I -> ˆ+  { 0xc3, 0x94, 0x00 }, // ALT-J -> Ô+  { 0xef, 0xa3, 0xbf }, // ALT-K -> +  { 0xc3, 0x92, 0x00 }, // ALT-L -> Ò+  { 0xc3, 0x82, 0x00 }, // ALT-M -> Â+  { 0xcb, 0x9c, 0x00 }, // tilde accent ALT-N -> ˜+  { 0xc3, 0x98, 0x00 }, // ALT-O -> Ø+  { 0xe2, 0x88, 0x8f }, // ALT-P -> ∏+  { 0xc5, 0x92, 0x00 }, // ALT-Q -> Œ+  { 0xe2, 0x80, 0xb0 }, // ALT-R -> ‰+  { 0xc3, 0x8d, 0x00 }, // ALT-S -> Í+  { 0xcb, 0x87, 0x00 }, // ALT-T -> ˇ+  { 0xc2, 0xa8, 0x00 }, // diaeresis accent ALT-U -> ¨+  { 0xe2, 0x97, 0x8a }, // ALT-V -> ◊+  { 0xe2, 0x80, 0x9e }, // ALT-W -> „+  { 0xcb, 0x9b, 0x00 }, // ALT-X -> ˛+  { 0xc3, 0x81, 0x00 }, // ALT-Y -> Á+  { 0xc2, 0xb8, 0x00 }, // ALT-Z -> ¸+  { 0xe2, 0x80, 0x9c }, // ALT-[ -> “+  { 0xc2, 0xab, 0x00 }, // ALT-\ -> «+  { 0xe2, 0x80, 0x98 }, // ALT-] -> ‘+  { 0xef, 0xac, 0x82 }, // ALT-^ -> fl+  { 0xe2, 0x80, 0x94 }, // ALT-_ -> —+  { 0xcb, 0x8b, 0x00 }, // grave accent modifier ALT-` -> ˋ+  { 0xc3, 0xa5, 0x00 }, // ALT-a -> å+#ifdef VKEY_FIX_META_LEFT+  { 0x1F, 0x02, 0x00 }, // MacOS terminal: ALT-b = META-LEFT+#else+  { 0xe2, 0x88, 0xab }, // ALT-b -> ∫+#endif+  { 0xc3, 0xa7, 0x00 }, // ALT-c -> ç+  { 0xe2, 0x88, 0x82 }, // ALT-d -> ∂+  { 0xcb, 0x8a, 0x00 }, // acute accent modifier ALT-e -> ´+#ifdef VKEY_FIX_META_RIGHT+  { 0x1F, 0x06, 0x00 }, // MacOS terminal: ALT-f = META-RIGHT+#else+  { 0xc6, 0x92, 0x00 }, // ALT-f -> ƒ+#endif+  { 0xc2, 0xa9, 0x00 }, // ALT-g -> ©+  { 0xcb, 0x99, 0x00 }, // ALT-h -> ˙+  { 0xcb, 0x86, 0x00 }, // circumflex accent modifier ALT-i -> ˆ+  { 0xe2, 0x88, 0x86 }, // ALT-j -> ∆+  { 0xcb, 0x9a, 0x00 }, // ALT-k -> ˚+  { 0xc2, 0xac, 0x00 }, // ALT-l -> ¬+  { 0xc2, 0xb5, 0x00 }, // ALT-m -> µ+  { 0xcb, 0x9c, 0x00 }, // tilde accent modifier ALT-n -> ˜+  { 0xc3, 0xb8, 0x00 }, // ALT-o -> ø+  { 0xcf, 0x80, 0x00 }, // ALT-p -> π+  { 0xc5, 0x93, 0x00 }, // ALT-q -> œ+  { 0xc2, 0xae, 0x00 }, // ALT-r -> ®+  { 0xc3, 0x9f, 0x00 }, // ALT-s -> ß+  { 0xe2, 0x80, 0xa0 }, // ALT-t -> †+  { 0xc2, 0xa8, 0x00 }, // diaeresis accent modifier ALT-u -> ¨+  { 0xe2, 0x88, 0x9a }, // ALT-v -> √+  { 0xe2, 0x88, 0x91 }, // ALT-w -> ∑+  { 0xe2, 0x89, 0x88 }, // ALT-x -> ≈+  { 0xc2, 0xa5, 0x00 }, // ALT-y -> ¥+  { 0xce, 0xa9, 0x00 }, // ALT-z -> Ω+  { 0xe2, 0x80, 0x9d }, // ALT-{ -> ”+  { 0xc2, 0xbb, 0x00 }, // ALT-| -> »+  { 0xe2, 0x80, 0x99 }, // ALT-} -> ’+  { 0xcb, 0x9c, 0x00 }, // tilde accent ALT-~ -> ˜+};++// customizable FN key mapping table, up to 4 UTF-8 bytes, when entries are zero then 256+'A'..256+'L' are returned for FN1..FN12+unsigned char VKey::fn[12][4] = {+  { 0 }, // FN1  -> 321+  { 0 }, // FN2  -> 322+  { 0 }, // FN3  -> 323+  { 0 }, // FN4  -> 324+  { 0 }, // FN5  -> 325+  { 0 }, // FN6  -> 326+  { 0 }, // FN7  -> 327+  { 0 }, // FN8  -> 328+  { 0 }, // FN9  -> 329+  { 0 }, // FN10 -> 330+  { 0 }, // FN11 -> 331+  { 0 }, // FN12 -> 332+};

src/vkey.hpp

new file mode 100644@@ -0,0 +1,339 @@+/******************************************************************************\+* Copyright (c) 2019, Robert van Engelen, Genivia Inc. All rights reserved.    *+*                                                                              *+* Redistribution and use in source and binary forms, with or without           *+* modification, are permitted provided that the following conditions are met:  *+*                                                                              *+*   (1) Redistributions of source code must retain the above copyright notice, *+*       this list of conditions and the following disclaimer.                  *+*                                                                              *+*   (2) Redistributions in binary form must reproduce the above copyright      *+*       notice, this list of conditions and the following disclaimer in the    *+*       documentation and/or other materials provided with the distribution.   *+*                                                                              *+*   (3) The name of the author may not be used to endorse or promote products  *+*       derived from this software without specific prior written permission.  *+*                                                                              *+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED *+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF         *+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO   *+* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,       *+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  *+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,     *+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR      *+* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF       *+* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                   *+\******************************************************************************/++/**+@file      vkey.hpp+@brief     Virtual terminal keyboard input API - static, not thread safe+@author    Robert van Engelen - engelen@genivia.com+@copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved.+@copyright (c) BSD-3 License - see LICENSE.txt++Supports Unix/Linux, MacOS, DOS, and Windows.++Key codes:++  -1      interrupted or error+  0       timed out++  32..126 ASCII characters++  31      META/ALT/OPTION/CTRL-_++  8       CTRL-H/BACKSPACE/DELETE+  9       CTRL-I/TAB and SHIFT-TAB is META-TAB+  10      CTRL-J/ENTER/RETURN+  13      CTRL-M/ENTER/RETURN (raw mode)+  27      CTRL-[/ESC+  127     DEL and INS is META-DEL (31 127)++  16      CTRL-P/UP+  14      CTRL-N/DOWN+  2       CTRL-B/LEFT+  6       CTRL-F/RIGHT++  7       CTRL-G/CTRL-UP/PGUP+  4       CTRL-D/CTRL-DOWN/PGDN+  1       CTRL-A/CTRL-LEFT/HOME+  5       CTRL-E/CTRL-RIGHT/END++  3       CTRL-C (requires VKEY_RAW)+  11      CTRL-K+  12      CTRL-L+  15      CTRL-O (requires VKEY_RAW)+  17      CTRL-Q (requires VKEY_RAW, reserved for XON/XOFF flow control)+  18      CTRL-R+  19      CTRL-S (requires VKEY_RAW, reserved for XON/XOFF flow control)+  20      CTRL-T+  21      CTRL-U+  22      CTRL-V (requires VKEY_RAW)+  23      CTRL-W+  24      CTRL-X+  25      CTRL-Y+  26      CTRL-Z/PAUSE+  28      CTRL-\ (Right Slash)+  29      CTRL-] (Right Bracket)+  30      CTRL-^ (Circumflex Accent)++Function keys (if not remapped with vkey_map_fn_key):++  FN1..FN12 -> 256+'A'..256+'L'++ALT/META (if not remapped with vkey_map_alt_key):++  ALT-SPACE -> NBSP+  ALT-! -> ⁄+  ALT-" -> Æ+  ALT-# -> ‹+  ALT-$ -> ›+  ALT-% -> fi+  ALT-& -> ‡+  ALT-' -> æ+  ALT-( -> ·+  ALT-) -> ‚+  ALT-* -> °+  ALT-+ -> ±+  ALT-, -> ≤+  ALT-- -> –+  ALT-. -> ≥+  ALT-/ -> ÷+  ALT-0 -> º+  ALT-1 -> ¡+  ALT-2 -> ™+  ALT-3 -> £+  ALT-4 -> ¢+  ALT-5 -> ∞+  ALT-6 -> §+  ALT-7 -> ¶+  ALT-8 -> •+  ALT-9 -> ª+  ALT-: -> Ú+  ALT-; -> …+  ALT-< -> ¯+  ALT-= -> ≠+  ALT-> -> ˘+  ALT-? -> ¿+  ALT-@ -> €+  ALT-A -> Å+  ALT-B -> ı+  ALT-C -> Ç+  ALT-D -> Î+  acute accent ALT-E -> ´+  ALT-F -> Ï+  ALT-G -> ˝+  ALT-H -> Ó+  circumflex accent ALT-I -> ˆ+  ALT-J -> Ô+  ALT-K -> +  ALT-L -> Ò+  ALT-M -> Â+  tilde accent ALT-N -> ˜+  ALT-O -> Ø+  ALT-P -> ∏+  ALT-Q -> Œ+  ALT-R -> ‰+  ALT-S -> Í+  ALT-T -> ˇ+  diaeresis accent ALT-U -> ¨+  ALT-V -> ◊+  ALT-W -> „+  ALT-X -> ˛+  ALT-Y -> Á+  ALT-Z -> ¸+  ALT-[ -> “+  ALT-\ -> «+  ALT-] -> ‘+  ALT-^ -> fl+  ALT-_ -> —+  grave accent modifier ALT-` -> ˋ+  ALT-a -> å+  ALT-b -> ∫+  ALT-c -> ç+  ALT-d -> ∂+  acute accent modifier ALT-e -> ´+  ALT-f -> ƒ+  ALT-g -> ©+  ALT-h -> ˙+  circumflex accent modifier ALT-i -> ˆ+  ALT-j -> ∆+  ALT-k -> ˚+  ALT-l -> ¬+  ALT-m -> µ+  tilde accent modifier ALT-n -> ˜+  ALT-o -> ø+  ALT-p -> π+  ALT-q -> œ+  ALT-r -> ®+  ALT-s -> ß+  ALT-t -> †+  diaeresis accent modifier ALT-u -> ¨+  ALT-v -> √+  ALT-w -> ∑+  ALT-x -> ≈+  ALT-y -> ¥+  ALT-z -> Ω+  ALT-{ -> ”+  ALT-| -> »+  ALT-} -> ’+  tilde accent ALT-~ -> ˜++Unicode code point entry:++  ALT-/ hex-digits /++*/++#ifndef VKEY_HPP+#define VKEY_HPP++#include "ugrep.hpp"++#ifdef OS_WIN++#ifdef ENABLE_VIRTUAL_TERMINAL_INPUT+# define VKEY_WIN+#else+# define VKEY_DOS+#endif++extern "C" int _getch(void);+extern "C" int _kbhit(void);++#else++#include <termios.h>+#include <unistd.h>+#include <fcntl.h>+#include <sys/ioctl.h>++#endif++class VKey {++ public:++  static const int NORMAL   = 0;   // VKey::setup in tty normal mode+  static const int RAW      = 1;   // VKey::setup in tty raw mode (cfmakeraw)++  static const int META     = 31;  // META/ALT/OPTION/CTRL-_++  static const int BS       = 8;   // CTRL-H/BACKSPACE/DELETE+  static const int TAB      = 9;   // CTRL-I/TAB and SHIFT-TAB is META-TAB+  static const int LF       = 10;  // CTRL-J/ENTER/RETURN+  static const int CR       = 13;  // CTRL-M/ENTER/RETURN (raw mode)+  static const int ESC      = 27;  // CTRL-[/ESC+  static const int DEL      = 127; // DEL and INS is META-DEL++  static const int UP       = 16;  // CTRL-P/UP+  static const int DOWN     = 14;  // CTRL-N/DOWN+  static const int LEFT     = 2;   // CTRL-B/LEFT+  static const int RIGHT    = 6;   // CTRL-F/RIGHT++  static const int PGUP     = 7;   // CTRL-G/CTRL-UP/PGUP+  static const int PGDN     = 4;   // CTRL-D/CTRL-DOWN/PGDN+  static const int HOME     = 1;   // CTRL-A/CTRL-LEFT/HOME+  static const int END      = 5;   // CTRL-E/CTRL-RIGHT/END++  static const int CTRL_C   = 3;   // CTRL-C (requires VKEY_RAW)+  static const int CTRL_K   = 11;  // CTRL-K+  static const int CTRL_L   = 12;  // CTRL-L+  static const int CTRL_O   = 15;  // CTRL-O (requires VKEY_RAW)+  static const int CTRL_Q   = 17;  // CTRL-Q (requires VKEY_RAW, reserved for XON/XOFF flow control)+  static const int CTRL_R   = 18;  // CTRL-R+  static const int CTRL_S   = 19;  // CTRL-S (requires VKEY_RAW, reserved for XON/XOFF flow control)+  static const int CTRL_T   = 20;  // CTRL-T+  static const int CTRL_U   = 21;  // CTRL-U+  static const int CTRL_V   = 22;  // CTRL-V (requires VKEY_RAW)+  static const int CTRL_W   = 23;  // CTRL-W+  static const int CTRL_X   = 24;  // CTRL-X+  static const int CTRL_Y   = 25;  // CTRL-Y+  static const int CTRL_Z   = 26;  // CTRL-Z/PAUSE+  static const int CTRL_RS  = 28;  // CTRL-\ (Right Slash)+  static const int CTRL_RB  = 29;  // CTRL-] (Right Bracket)+  static const int CTRL_CA  = 30;  // CTRL-^ (Circumflex Accent)++  static constexpr int FN(int num)+  {+    return 255 + '@' + num;        // FN1..FN12 is 256+'A'..256+'L'+  }++  // setup vkey in VKey::NORMAL tty or VKey::RAW raw tty mode (cfmakeraw), returns 0 on success <0 on failure+  static bool setup(int mode = NORMAL);++  // release vkey resources and restore tty+  static void cleanup();++  // wait until key press and return VKey::xxx code+  static int get();++  // wait until key press and return VKey::xxx code, time out after timeout ms+  static int in(int timeout);++  // wait until key press and return unmapped VKey::xxx code+  static int raw_get();++  // wait until key press and return unmapped VKey::xxx code, time out after timeout ms+  static int raw_in(int timeout);++  // flush the key buffer and remove pending key presses until no key is pressed+  static void flush();++  // assign ALT + key code 32..126 one to four keys/chars stored in string+  static void map_alt_key(int key, const char *keys);++  // assign FN 1..12 one to four keys/chars stored in string+  static void map_fn_key(unsigned num, const char *keys);++ protected:++  // default 50ms timeout to allow the key queue to be filled with ANSI escape codes+  static const int TIMEOUT = 50;++  // rotate the key buffer+  static int rot_keybuf();++  // translate ANSI escape sequences, FN, and DEL keys+  static int vkey(int ch);++  // wait for next raw key press within VKey::TIMEOUT ms+  static int key();++  // return VKey::META key press or META+/hex/ Unicode code point+  static int alt_key(int ch);++  // return VKey::FN or VKey::META key press or META+/hex/ Unicode code point+  static int fn_key(int ch);++  // translate ANSI escape sequences, FN, and DEL keys+  static int ansi_esc(int ch);++#ifdef OS_WIN++  // Windows console state+  static HANDLE hConIn;+  static DWORD  oldInMode;++#else++  // Unix/Linux terminal state+  static int            tty;+  static struct termios oldterm;++#endif++  // key buffer to store up to three more keys after ALT/OPTION/META key was pressed+  static unsigned char keybuf[3];++  // META/ALT/OPTION key mapping table, up to 4 UTF-8 bytes, not required to be \0-terminated+  static unsigned char alt[127 - 32][4];++  // customizable FN key mapping table, up to 4 UTF-8 bytes, when entries are zero then 256+'A'..256+'L' are returned for FN1..FN12+  static unsigned char fn[12][4];++};++#endif

src/zstream.hpp

@@ -28,14 +28,14 @@  /** @file      zstream.hpp-@brief     file decompression streams written in C++11+@brief     file decompression streams @author    Robert van Engelen - engelen@genivia.com @copyright (c) 2019-2020, Robert van Engelen, Genivia Inc. All rights reserved. @copyright (c) BSD-3 License - see LICENSE.txt */ -#ifndef ZSTREAM_H-#define ZSTREAM_H+#ifndef ZSTREAM_HPP+#define ZSTREAM_HPP  #include <cstdio> #include <cstdlib>

tests/archive.gz

Binary file changed

tests/archive.tar.zip

Binary file changed

tests/archive.tgz

Binary file changed

tests/archive.zip

Binary file changed

tests/gen.sh

@@ -7,7 +7,7 @@ if [ ! -x "../src/ugrep" ] ; then   exit 1 fi -read -p "Are you sure to overwrite all test cases with new ones? [y/n] " -rsn1 key < /dev/tty+read -p "Are you sure to overwrite all test cases with new ones? (y/n [n]) " -rsn1 key < /dev/tty case $key in   y|Y)     echo yes@@ -68,7 +68,7 @@ END $UG -Fiwco -f lorem lorem.utf8.txt  > out/lorem.utf8.out $UG -Fiwco -f lorem lorem.utf16.txt > out/lorem.utf16.out $UG -Fiwco -f lorem lorem.utf32.txt > out/lorem.utf32.out-cat lorem | $UG -Fiwco -Q LATIN1 -f - lorem.latin1.txt > out/lorem.latin1.out+cat lorem | $UG -Fiwco --encoding=LATIN1 -f - lorem.latin1.txt > out/lorem.latin1.out  $UG -ci hello Hello.bat Hello.class Hello.java Hello.pdf Hello.sh Hello.txt > out/Hello_Hello-ci.out $UG -cj hello Hello.bat Hello.class Hello.java Hello.pdf Hello.sh Hello.txt > out/Hello_Hello-cj.out

tests/out/Hello_-F.out

@@ -1,15 +1,15 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Binary file Hello.class matches-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Binary file Hello.pdf matches-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Binary file Hello.class matches+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Binary file Hello.pdf matches+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-Fw.out

@@ -1,15 +1,15 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Binary file Hello.class matches-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Binary file Hello.pdf matches-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Binary file Hello.class matches+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Binary file Hello.pdf matches+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-Fx.out

@@ -1 +1 @@-Hello.java:+Hello.java:

tests/out/Hello_-G.out

@@ -1,15 +1,15 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Binary file Hello.class matches-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Binary file Hello.pdf matches-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Binary file Hello.class matches+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Binary file Hello.pdf matches+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-I-c.out

@@ -1,6 +1,6 @@-Hello.bat:2-Hello.class:0-Hello.java:7-Hello.pdf:134-Hello.sh:2-Hello.txt:1+Hello.bat:2+Hello.class:0+Hello.java:7+Hello.pdf:134+Hello.sh:2+Hello.txt:1

tests/out/Hello_-I-co.out

@@ -1,6 +1,6 @@-Hello.bat:2-Hello.class:0-Hello.java:7-Hello.pdf:134-Hello.sh:2-Hello.txt:1+Hello.bat:2+Hello.class:0+Hello.java:7+Hello.pdf:134+Hello.sh:2+Hello.txt:1

tests/out/Hello_-I-cv.out

@@ -1,6 +1,6 @@-Hello.bat:0-Hello.class:0-Hello.java:0-Hello.pdf:0-Hello.sh:0-Hello.txt:0+Hello.bat:0+Hello.class:0+Hello.java:0+Hello.pdf:0+Hello.sh:0+Hello.txt:0

tests/out/Hello_-I-l.out

@@ -1,5 +1,5 @@-Hello.bat-Hello.java-Hello.pdf-Hello.sh-Hello.txt+Hello.bat+Hello.java+Hello.pdf+Hello.sh+Hello.txt

tests/out/Hello_-I-n.out

@@ -1,13 +1,13 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello

tests/out/Hello_-I-nC1.out

@@ -1,13 +1,13 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello\ No newline at end of file+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello\ No newline at end of file

tests/out/Hello_-I-nkbT.out

@@ -1,13 +1,13 @@-Hello.bat:     1:  1:      0:	#!/bin/sh-Hello.bat:     2:  1:     10:	echo "Hello World!"-Hello.java:     1:  1:      0:	import java.lang.*;-Hello.java:     2:  1:     20:	-Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting-Hello.java:     4:  1:     74:	{ public static void main(String[] arg)-Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");-Hello.java:     6:  1:    154:	  }-Hello.java:     7:  1:    158:	}-Hello.pdf:     1:  1:      0:	%PDF-1.3-Hello.sh:     1:  1:      0:	#!/bin/sh-Hello.sh:     2:  1:     10:	echo "Hello World!"-Hello.txt:     1:  1:      0:	Hello+Hello.bat:     1:  1:      0:	#!/bin/sh+Hello.bat:     2:  1:     10:	echo "Hello World!"+Hello.java:     1:  1:      0:	import java.lang.*;+Hello.java:     2:  1:     20:	+Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting+Hello.java:     4:  1:     74:	{ public static void main(String[] arg)+Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");+Hello.java:     6:  1:    154:	  }+Hello.java:     7:  1:    158:	}+Hello.pdf:     1:  1:      0:	%PDF-1.3+Hello.sh:     1:  1:      0:	#!/bin/sh+Hello.sh:     2:  1:     10:	echo "Hello World!"+Hello.txt:     1:  1:      0:	Hello

tests/out/Hello_-I-nvy.out

@@ -1,13 +1,13 @@-Hello.bat-1-#!/bin/sh-Hello.bat-2-echo "Hello World!"-Hello.java-1-import java.lang.*;-Hello.java-2--Hello.java-3-public class Hello // prints a Hello World! greeting-Hello.java-4-{ public static void main(String[] arg)-Hello.java-5-  { System.out.println("Hello World!");-Hello.java-6-  }-Hello.java-7-}-Hello.pdf-1-%PDF-1.3-Hello.sh-1-#!/bin/sh-Hello.sh-2-echo "Hello World!"-Hello.txt-1-Hello\ No newline at end of file+Hello.bat-1-#!/bin/sh+Hello.bat-2-echo "Hello World!"+Hello.java-1-import java.lang.*;+Hello.java-2-+Hello.java-3-public class Hello // prints a Hello World! greeting+Hello.java-4-{ public static void main(String[] arg)+Hello.java-5-  { System.out.println("Hello World!");+Hello.java-6-  }+Hello.java-7-}+Hello.pdf-1-%PDF-1.3+Hello.sh-1-#!/bin/sh+Hello.sh-2-echo "Hello World!"+Hello.txt-1-Hello\ No newline at end of file

tests/out/Hello_-I-ny.out

@@ -1,13 +1,13 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello\ No newline at end of file+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello\ No newline at end of file

tests/out/Hello_-I-o.out

@@ -1,13 +1,13 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-I-on.out

@@ -1,13 +1,13 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello

tests/out/Hello_-I-onkbT.out

@@ -1,13 +1,13 @@-Hello.bat:     1:  1:      0:	#!/bin/sh-Hello.bat:     2:  1:     10:	echo "Hello World!"-Hello.java:     1:  1:      0:	import java.lang.*;-Hello.java:     2:  1:     20:	-Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting-Hello.java:     4:  1:     74:	{ public static void main(String[] arg)-Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");-Hello.java:     6:  1:    154:	  }-Hello.java:     7:  1:    158:	}-Hello.pdf:     1:  1:      0:	%PDF-1.3-Hello.sh:     1:  1:      0:	#!/bin/sh-Hello.sh:     2:  1:     10:	echo "Hello World!"-Hello.txt:     1:  1:      0:	Hello+Hello.bat:     1:  1:      0:	#!/bin/sh+Hello.bat:     2:  1:     10:	echo "Hello World!"+Hello.java:     1:  1:      0:	import java.lang.*;+Hello.java:     2:  1:     20:	+Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting+Hello.java:     4:  1:     74:	{ public static void main(String[] arg)+Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");+Hello.java:     6:  1:    154:	  }+Hello.java:     7:  1:    158:	}+Hello.pdf:     1:  1:      0:	%PDF-1.3+Hello.sh:     1:  1:      0:	#!/bin/sh+Hello.sh:     2:  1:     10:	echo "Hello World!"+Hello.txt:     1:  1:      0:	Hello

tests/out/Hello_-I-ounkbT.out

@@ -1,13 +1,13 @@-Hello.bat:     1:  1:      0:	#!/bin/sh-Hello.bat:     2:  1:     10:	echo "Hello World!"-Hello.java:     1:  1:      0:	import java.lang.*;-Hello.java:     2:  1:     20:	-Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting-Hello.java:     4:  1:     74:	{ public static void main(String[] arg)-Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");-Hello.java:     6:  1:    154:	  }-Hello.java:     7:  1:    158:	}-Hello.pdf:     1:  1:      0:	%PDF-1.3-Hello.sh:     1:  1:      0:	#!/bin/sh-Hello.sh:     2:  1:     10:	echo "Hello World!"-Hello.txt:     1:  1:      0:	Hello+Hello.bat:     1:  1:      0:	#!/bin/sh+Hello.bat:     2:  1:     10:	echo "Hello World!"+Hello.java:     1:  1:      0:	import java.lang.*;+Hello.java:     2:  1:     20:	+Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting+Hello.java:     4:  1:     74:	{ public static void main(String[] arg)+Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");+Hello.java:     6:  1:    154:	  }+Hello.java:     7:  1:    158:	}+Hello.pdf:     1:  1:      0:	%PDF-1.3+Hello.sh:     1:  1:      0:	#!/bin/sh+Hello.sh:     2:  1:     10:	echo "Hello World!"+Hello.txt:     1:  1:      0:	Hello

tests/out/Hello_-I-unkbT.out

@@ -1,13 +1,13 @@-Hello.bat:     1:  1:      0:	#!/bin/sh-Hello.bat:     2:  1:     10:	echo "Hello World!"-Hello.java:     1:  1:      0:	import java.lang.*;-Hello.java:     2:  1:     20:	-Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting-Hello.java:     4:  1:     74:	{ public static void main(String[] arg)-Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");-Hello.java:     6:  1:    154:	  }-Hello.java:     7:  1:    158:	}-Hello.pdf:     1:  1:      0:	%PDF-1.3-Hello.sh:     1:  1:      0:	#!/bin/sh-Hello.sh:     2:  1:     10:	echo "Hello World!"-Hello.txt:     1:  1:      0:	Hello+Hello.bat:     1:  1:      0:	#!/bin/sh+Hello.bat:     2:  1:     10:	echo "Hello World!"+Hello.java:     1:  1:      0:	import java.lang.*;+Hello.java:     2:  1:     20:	+Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting+Hello.java:     4:  1:     74:	{ public static void main(String[] arg)+Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");+Hello.java:     6:  1:    154:	  }+Hello.java:     7:  1:    158:	}+Hello.pdf:     1:  1:      0:	%PDF-1.3+Hello.sh:     1:  1:      0:	#!/bin/sh+Hello.sh:     2:  1:     10:	echo "Hello World!"+Hello.txt:     1:  1:      0:	Hello

tests/out/Hello_-I.out

@@ -1,13 +1,13 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-IP.out

@@ -1,13 +1,13 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-IPw.out

@@ -1,13 +1,13 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-IPx.out

@@ -1 +1 @@-Hello.java:+Hello.java:

tests/out/Hello_-Iw.out

@@ -1,13 +1,13 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.sh:#!/bin/sh-Hello.sh:echo "Hello World!"-Hello.txt:Hello+Hello.bat:#!/bin/sh+Hello.bat:echo "Hello World!"+Hello.java:import java.lang.*;+Hello.java:+Hello.java:public class Hello // prints a Hello World! greeting+Hello.java:{ public static void main(String[] arg)+Hello.java:  { System.out.println("Hello World!");+Hello.java:  }+Hello.java:}+Hello.pdf:%PDF-1.3+Hello.sh:#!/bin/sh+Hello.sh:echo "Hello World!"+Hello.txt:Hello

tests/out/Hello_-Ix.out

@@ -1 +1 @@-Hello.java:+Hello.java:

tests/out/Hello_-W-c.out

@@ -1,6 +1,6 @@-Hello.bat:2-Hello.class:8-Hello.java:7-Hello.pdf:134-Hello.sh:2-Hello.txt:1+Hello.bat:2+Hello.class:8+Hello.java:7+Hello.pdf:134+Hello.sh:2+Hello.txt:1

tests/out/Hello_-W-co.out

@@ -1,6 +1,6 @@-Hello.bat:2-Hello.class:8-Hello.java:7-Hello.pdf:134-Hello.sh:2-Hello.txt:1+Hello.bat:2+Hello.class:8+Hello.java:7+Hello.pdf:134+Hello.sh:2+Hello.txt:1

tests/out/Hello_-W-cv.out

@@ -1,6 +1,6 @@-Hello.bat:0-Hello.class:0-Hello.java:0-Hello.pdf:0-Hello.sh:0-Hello.txt:0+Hello.bat:0+Hello.class:0+Hello.java:0+Hello.pdf:0+Hello.sh:0+Hello.txt:0

tests/out/Hello_-W-l.out

@@ -1,6 +1,6 @@-Hello.bat-Hello.class-Hello.java-Hello.pdf-Hello.sh-Hello.txt+Hello.bat+Hello.class+Hello.java+Hello.pdf+Hello.sh+Hello.txt

tests/out/Hello_-W-n.out

@@ -1,466 +1,466 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.class:1:-00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|-Hello.class:2:-00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|-00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|-Hello.class:3:-00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|-00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|-Hello.class:4:-00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|-00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|-Hello.class:5:-00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|-00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|-Hello.class:6:-00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|-00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|-Hello.class:7:-00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|-Hello.class:8:-00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|-00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.pdf:2:-00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|-Hello.pdf:3:4 0 obj-Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf:5:stream-Hello.pdf:6:-00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|-Hello.pdf:7:-00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|-00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|-Hello.pdf:8:-00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|-00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|-Hello.pdf:9:endstream-Hello.pdf:10:endobj-Hello.pdf:11:5 0 obj-Hello.pdf:12:123-Hello.pdf:13:endobj-Hello.pdf:14:2 0 obj-Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf:16:>>-Hello.pdf:17:endobj-Hello.pdf:18:6 0 obj-Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf:20:>> >>-Hello.pdf:21:endobj-Hello.pdf:22:9 0 obj-Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf:24:stream-Hello.pdf:25:-00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|-Hello.pdf:26:-00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|-00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|-Hello.pdf:27:-000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|-00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|-Hello.pdf:28:-000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|-000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:29:-00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|-00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|-Hello.pdf:30:-00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|-00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|-Hello.pdf:31:endstream-Hello.pdf:32:endobj-Hello.pdf:33:10 0 obj-Hello.pdf:34:1116-Hello.pdf:35:endobj-Hello.pdf:36:7 0 obj-Hello.pdf:37:[ /ICCBased 9 0 R ]-Hello.pdf:38:endobj-Hello.pdf:39:3 0 obj-Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf:41:endobj-Hello.pdf:42:11 0 obj-Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf:44:endobj-Hello.pdf:45:8 0 obj-Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf:49:0 0 602 ] >>-Hello.pdf:50:endobj-Hello.pdf:51:12 0 obj-Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf:55:>>-Hello.pdf:56:endobj-Hello.pdf:57:13 0 obj-Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf:59:stream-Hello.pdf:60:-00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|-Hello.pdf:61:-000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|-000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|-Hello.pdf:62:-00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|-00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|-Hello.pdf:63:-00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|-Hello.pdf:64:-00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|-00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|-Hello.pdf:65:-00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|-00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|-Hello.pdf:66:-00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|-00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|-Hello.pdf:67:-00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|-00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|-Hello.pdf:68:-00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|-00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|-Hello.pdf:69:-00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|-Hello.pdf:70:-00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|-00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|-00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|-00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|-Hello.pdf:71:-00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|-00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|-00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|-00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|-00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|-00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|-00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|-00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|-00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|-00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|-00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|-00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|-00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|-Hello.pdf:72:-00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|-00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|-00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|-00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|-00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|-00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|-00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|-00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|-Hello.pdf:73:-00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|-Hello.pdf:74:-00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|-00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|-00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|-00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|-00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|-00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|-00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|-00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|-00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|-Hello.pdf:75:-00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|-00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|-Hello.pdf:76:-00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|-00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|-Hello.pdf:77:-00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|-00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|-00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|-00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|-00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|-00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|-00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|-00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|-00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|-00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|-00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|-00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|-00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|-00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|-00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|-00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|-00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|-00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|-00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|-00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|-00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|-00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|-00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|-00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|-00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|-00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|-000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|-000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|-000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|-000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|-000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|-000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|-00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|-00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|-00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|-00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|-00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|-00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|-00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|-00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|-00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|-00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|-000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|-000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|-Hello.pdf:78:-000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|-000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|-000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|-000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|-000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|-00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|-00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|-00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|-00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|-00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|-00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|-00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|-00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|-00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|-00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|-000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|-000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|-000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|-000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|-000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|-000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|-00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|-00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|-00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|-00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|-00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|-00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|-00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|-00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|-00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|-00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|-000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|-000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|-000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|-000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|-000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|-000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|-00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|-00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|-00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|-00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:79:endstream-Hello.pdf:80:endobj-Hello.pdf:81:14 0 obj-Hello.pdf:82:2734-Hello.pdf:83:endobj-Hello.pdf:84:15 0 obj-Hello.pdf:85:(Hello)-Hello.pdf:86:endobj-Hello.pdf:87:16 0 obj-Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)-Hello.pdf:89:endobj-Hello.pdf:90:17 0 obj-Hello.pdf:91:(TextEdit)-Hello.pdf:92:endobj-Hello.pdf:93:18 0 obj-Hello.pdf:94:(D:20200124010711Z00'00')-Hello.pdf:95:endobj-Hello.pdf:96:19 0 obj-Hello.pdf:97:()-Hello.pdf:98:endobj-Hello.pdf:99:20 0 obj-Hello.pdf:100:[ ]-Hello.pdf:101:endobj-Hello.pdf:102:1 0 obj-Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate-Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>-Hello.pdf:105:endobj-Hello.pdf:106:xref-Hello.pdf:107:0 21-Hello.pdf:108:0000000000 65535 f -Hello.pdf:109:0000005392 00000 n -Hello.pdf:110:0000000238 00000 n -Hello.pdf:111:0000001714 00000 n -Hello.pdf:112:0000000022 00000 n -Hello.pdf:113:0000000219 00000 n -Hello.pdf:114:0000000342 00000 n -Hello.pdf:115:0000001679 00000 n -Hello.pdf:116:0000001847 00000 n -Hello.pdf:117:0000000439 00000 n -Hello.pdf:118:0000001658 00000 n -Hello.pdf:119:0000001797 00000 n -Hello.pdf:120:0000002110 00000 n -Hello.pdf:121:0000002362 00000 n -Hello.pdf:122:0000005186 00000 n -Hello.pdf:123:0000005207 00000 n -Hello.pdf:124:0000005231 00000 n -Hello.pdf:125:0000005284 00000 n -Hello.pdf:126:0000005311 00000 n -Hello.pdf:127:0000005353 00000 n -Hello.pdf:128:0000005372 00000 n -Hello.pdf:129:trailer-Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>-Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>-Hello.pdf:132:startxref-Hello.pdf:133:5536-Hello.pdf:134:%%EOF-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.class:1:+00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|+Hello.class:2:+00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|+00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|+Hello.class:3:+00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|+00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|+00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|+00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|+00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|+00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|+Hello.class:4:+00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|+00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|+Hello.class:5:+00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|+00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|+00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|+000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|+000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|+000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|+000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|+000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|+000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|+00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|+00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|+00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|+00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|+00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|+00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|+Hello.class:6:+00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|+00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|+00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|+00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|+Hello.class:7:+00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|+Hello.class:8:+00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|+00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.pdf:2:+00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|+00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|+Hello.pdf:3:4 0 obj+Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>+Hello.pdf:5:stream+Hello.pdf:6:+00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|+00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|+Hello.pdf:7:+00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|+00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|+00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|+00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|+Hello.pdf:8:+00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|+00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|+000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|+000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|+000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|+Hello.pdf:9:endstream+Hello.pdf:10:endobj+Hello.pdf:11:5 0 obj+Hello.pdf:12:123+Hello.pdf:13:endobj+Hello.pdf:14:2 0 obj+Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]+Hello.pdf:16:>>+Hello.pdf:17:endobj+Hello.pdf:18:6 0 obj+Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R+Hello.pdf:20:>> >>+Hello.pdf:21:endobj+Hello.pdf:22:9 0 obj+Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>+Hello.pdf:24:stream+Hello.pdf:25:+00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|+00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|+00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|+00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|+00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|+00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|+Hello.pdf:26:+00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|+00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|+00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|+00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|+00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|+000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|+000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|+000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|+000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|+000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|+000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|+00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|+00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|+00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|+00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|+00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|+00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|+00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|+00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|+00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|+00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|+000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|+000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|+000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|+000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|+000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |+000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|+Hello.pdf:27:+000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|+00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|+00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|+00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|+00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|+00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|+00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|+00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|+00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|+00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|+00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|+000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|+000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|+000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|+Hello.pdf:28:+000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|+000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|+000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|+000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|+00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|+00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|+00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|+00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|+00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|+00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|+00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:29:+00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|+00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|+00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|+00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|+000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|+000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|+000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|+000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|+000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|+000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|+00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|+00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|+00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|+00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|+00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|+Hello.pdf:30:+00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|+00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|+00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|+Hello.pdf:31:endstream+Hello.pdf:32:endobj+Hello.pdf:33:10 0 obj+Hello.pdf:34:1116+Hello.pdf:35:endobj+Hello.pdf:36:7 0 obj+Hello.pdf:37:[ /ICCBased 9 0 R ]+Hello.pdf:38:endobj+Hello.pdf:39:3 0 obj+Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>+Hello.pdf:41:endobj+Hello.pdf:42:11 0 obj+Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>+Hello.pdf:44:endobj+Hello.pdf:45:8 0 obj+Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor+Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602+Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602+Hello.pdf:49:0 0 602 ] >>+Hello.pdf:50:endobj+Hello.pdf:51:12 0 obj+Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox+Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729+Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R+Hello.pdf:55:>>+Hello.pdf:56:endobj+Hello.pdf:57:13 0 obj+Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>+Hello.pdf:59:stream+Hello.pdf:60:+00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|+00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|+000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|+000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|+000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|+Hello.pdf:61:+000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|+000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|+000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|+000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|+00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|+00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|+00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|+00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|+00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|+00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|+00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|+00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|+00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|+00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|+00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|+00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|+00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|+00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|+00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|+00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|+00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|+00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|+00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|+00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|+00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|+00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|+00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|+00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|+00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|+00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|+00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|+00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|+Hello.pdf:62:+00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|+00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|+00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||+00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|+Hello.pdf:63:+00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|+Hello.pdf:64:+00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|+00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|+00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|+00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|+00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|+00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|+00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|+Hello.pdf:65:+00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|+00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|+00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|+00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|+Hello.pdf:66:+00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|+00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|+00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|+00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|+00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|+00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|+00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|+00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|+Hello.pdf:67:+00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|+00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|+Hello.pdf:68:+00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|+00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|+Hello.pdf:69:+00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|+Hello.pdf:70:+00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|+00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|+00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|+00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|+Hello.pdf:71:+00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|+00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|+00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|+00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|+00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|+00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|+00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|+00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|+00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|+00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|+00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|+00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|+00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|+Hello.pdf:72:+00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|+00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|+00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|+00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|+00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|+00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|+00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|+00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|+Hello.pdf:73:+00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|+Hello.pdf:74:+00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|+00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|+00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|+00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|+00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|+00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|+00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|+00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|+00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|+Hello.pdf:75:+00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|+00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|+Hello.pdf:76:+00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|+00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|+Hello.pdf:77:+00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|+00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|+00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|+00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|+00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|+00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|+00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|+00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|+00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|+00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|+00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|+00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|+00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|+00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|+00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|+00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|+00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|+00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|+00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|+00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|+00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|+00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|+00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|+00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|+00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|+00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|+000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|+000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|+000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|+000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|+000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|+000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|+00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|+00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|+00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|+00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|+00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|+00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|+00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|+00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|+00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|+00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|+000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|+000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|+Hello.pdf:78:+000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|+000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|+000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|+000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|+000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|+00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|+00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|+00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|+00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|+00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|+00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|+00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|+00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|+00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|+00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|+000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|+000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|+000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|+000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|+000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|+000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|+00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|+00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|+00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|+00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|+00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|+00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|+00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|+00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|+00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|+00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|+000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|+000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|+000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|+000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|+000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|+000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|+00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|+00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|+00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|+00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:79:endstream+Hello.pdf:80:endobj+Hello.pdf:81:14 0 obj+Hello.pdf:82:2734+Hello.pdf:83:endobj+Hello.pdf:84:15 0 obj+Hello.pdf:85:(Hello)+Hello.pdf:86:endobj+Hello.pdf:87:16 0 obj+Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)+Hello.pdf:89:endobj+Hello.pdf:90:17 0 obj+Hello.pdf:91:(TextEdit)+Hello.pdf:92:endobj+Hello.pdf:93:18 0 obj+Hello.pdf:94:(D:20200124010711Z00'00')+Hello.pdf:95:endobj+Hello.pdf:96:19 0 obj+Hello.pdf:97:()+Hello.pdf:98:endobj+Hello.pdf:99:20 0 obj+Hello.pdf:100:[ ]+Hello.pdf:101:endobj+Hello.pdf:102:1 0 obj+Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate+Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>+Hello.pdf:105:endobj+Hello.pdf:106:xref+Hello.pdf:107:0 21+Hello.pdf:108:0000000000 65535 f +Hello.pdf:109:0000005392 00000 n +Hello.pdf:110:0000000238 00000 n +Hello.pdf:111:0000001714 00000 n +Hello.pdf:112:0000000022 00000 n +Hello.pdf:113:0000000219 00000 n +Hello.pdf:114:0000000342 00000 n +Hello.pdf:115:0000001679 00000 n +Hello.pdf:116:0000001847 00000 n +Hello.pdf:117:0000000439 00000 n +Hello.pdf:118:0000001658 00000 n +Hello.pdf:119:0000001797 00000 n +Hello.pdf:120:0000002110 00000 n +Hello.pdf:121:0000002362 00000 n +Hello.pdf:122:0000005186 00000 n +Hello.pdf:123:0000005207 00000 n +Hello.pdf:124:0000005231 00000 n +Hello.pdf:125:0000005284 00000 n +Hello.pdf:126:0000005311 00000 n +Hello.pdf:127:0000005353 00000 n +Hello.pdf:128:0000005372 00000 n +Hello.pdf:129:trailer+Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>+Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>+Hello.pdf:132:startxref+Hello.pdf:133:5536+Hello.pdf:134:%%EOF+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello

tests/out/Hello_-W-nC1.out

@@ -1,466 +1,466 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.class:1:-00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|-Hello.class:2:-00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|-00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|-Hello.class:3:-00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|-00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|-Hello.class:4:-00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|-00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|-Hello.class:5:-00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|-00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|-Hello.class:6:-00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|-00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|-Hello.class:7:-00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|-Hello.class:8:-00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|-00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.pdf:2:-00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|-Hello.pdf:3:4 0 obj-Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf:5:stream-Hello.pdf:6:-00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|-Hello.pdf:7:-00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|-00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|-Hello.pdf:8:-00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|-00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|-Hello.pdf:9:endstream-Hello.pdf:10:endobj-Hello.pdf:11:5 0 obj-Hello.pdf:12:123-Hello.pdf:13:endobj-Hello.pdf:14:2 0 obj-Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf:16:>>-Hello.pdf:17:endobj-Hello.pdf:18:6 0 obj-Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf:20:>> >>-Hello.pdf:21:endobj-Hello.pdf:22:9 0 obj-Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf:24:stream-Hello.pdf:25:-00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|-Hello.pdf:26:-00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|-00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|-Hello.pdf:27:-000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|-00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|-Hello.pdf:28:-000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|-000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:29:-00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|-00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|-Hello.pdf:30:-00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|-00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|-Hello.pdf:31:endstream-Hello.pdf:32:endobj-Hello.pdf:33:10 0 obj-Hello.pdf:34:1116-Hello.pdf:35:endobj-Hello.pdf:36:7 0 obj-Hello.pdf:37:[ /ICCBased 9 0 R ]-Hello.pdf:38:endobj-Hello.pdf:39:3 0 obj-Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf:41:endobj-Hello.pdf:42:11 0 obj-Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf:44:endobj-Hello.pdf:45:8 0 obj-Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf:49:0 0 602 ] >>-Hello.pdf:50:endobj-Hello.pdf:51:12 0 obj-Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf:55:>>-Hello.pdf:56:endobj-Hello.pdf:57:13 0 obj-Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf:59:stream-Hello.pdf:60:-00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|-Hello.pdf:61:-000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|-000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|-Hello.pdf:62:-00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|-00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|-Hello.pdf:63:-00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|-Hello.pdf:64:-00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|-00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|-Hello.pdf:65:-00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|-00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|-Hello.pdf:66:-00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|-00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|-Hello.pdf:67:-00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|-00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|-Hello.pdf:68:-00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|-00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|-Hello.pdf:69:-00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|-Hello.pdf:70:-00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|-00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|-00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|-00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|-Hello.pdf:71:-00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|-00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|-00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|-00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|-00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|-00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|-00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|-00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|-00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|-00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|-00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|-00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|-00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|-Hello.pdf:72:-00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|-00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|-00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|-00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|-00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|-00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|-00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|-00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|-Hello.pdf:73:-00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|-Hello.pdf:74:-00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|-00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|-00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|-00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|-00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|-00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|-00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|-00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|-00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|-Hello.pdf:75:-00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|-00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|-Hello.pdf:76:-00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|-00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|-Hello.pdf:77:-00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|-00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|-00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|-00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|-00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|-00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|-00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|-00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|-00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|-00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|-00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|-00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|-00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|-00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|-00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|-00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|-00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|-00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|-00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|-00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|-00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|-00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|-00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|-00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|-00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|-00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|-000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|-000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|-000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|-000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|-000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|-000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|-00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|-00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|-00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|-00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|-00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|-00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|-00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|-00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|-00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|-00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|-000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|-000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|-Hello.pdf:78:-000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|-000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|-000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|-000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|-000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|-00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|-00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|-00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|-00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|-00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|-00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|-00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|-00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|-00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|-00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|-000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|-000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|-000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|-000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|-000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|-000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|-00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|-00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|-00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|-00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|-00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|-00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|-00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|-00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|-00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|-00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|-000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|-000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|-000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|-000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|-000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|-000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|-00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|-00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|-00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|-00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:79:endstream-Hello.pdf:80:endobj-Hello.pdf:81:14 0 obj-Hello.pdf:82:2734-Hello.pdf:83:endobj-Hello.pdf:84:15 0 obj-Hello.pdf:85:(Hello)-Hello.pdf:86:endobj-Hello.pdf:87:16 0 obj-Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)-Hello.pdf:89:endobj-Hello.pdf:90:17 0 obj-Hello.pdf:91:(TextEdit)-Hello.pdf:92:endobj-Hello.pdf:93:18 0 obj-Hello.pdf:94:(D:20200124010711Z00'00')-Hello.pdf:95:endobj-Hello.pdf:96:19 0 obj-Hello.pdf:97:()-Hello.pdf:98:endobj-Hello.pdf:99:20 0 obj-Hello.pdf:100:[ ]-Hello.pdf:101:endobj-Hello.pdf:102:1 0 obj-Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate-Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>-Hello.pdf:105:endobj-Hello.pdf:106:xref-Hello.pdf:107:0 21-Hello.pdf:108:0000000000 65535 f -Hello.pdf:109:0000005392 00000 n -Hello.pdf:110:0000000238 00000 n -Hello.pdf:111:0000001714 00000 n -Hello.pdf:112:0000000022 00000 n -Hello.pdf:113:0000000219 00000 n -Hello.pdf:114:0000000342 00000 n -Hello.pdf:115:0000001679 00000 n -Hello.pdf:116:0000001847 00000 n -Hello.pdf:117:0000000439 00000 n -Hello.pdf:118:0000001658 00000 n -Hello.pdf:119:0000001797 00000 n -Hello.pdf:120:0000002110 00000 n -Hello.pdf:121:0000002362 00000 n -Hello.pdf:122:0000005186 00000 n -Hello.pdf:123:0000005207 00000 n -Hello.pdf:124:0000005231 00000 n -Hello.pdf:125:0000005284 00000 n -Hello.pdf:126:0000005311 00000 n -Hello.pdf:127:0000005353 00000 n -Hello.pdf:128:0000005372 00000 n -Hello.pdf:129:trailer-Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>-Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>-Hello.pdf:132:startxref-Hello.pdf:133:5536-Hello.pdf:134:%%EOF-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello\ No newline at end of file+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.class:1:+00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|+Hello.class:2:+00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|+00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|+Hello.class:3:+00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|+00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|+00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|+00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|+00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|+00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|+Hello.class:4:+00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|+00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|+Hello.class:5:+00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|+00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|+00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|+000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|+000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|+000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|+000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|+000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|+000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|+00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|+00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|+00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|+00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|+00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|+00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|+Hello.class:6:+00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|+00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|+00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|+00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|+Hello.class:7:+00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|+Hello.class:8:+00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|+00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.pdf:2:+00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|+00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|+Hello.pdf:3:4 0 obj+Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>+Hello.pdf:5:stream+Hello.pdf:6:+00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|+00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|+Hello.pdf:7:+00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|+00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|+00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|+00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|+Hello.pdf:8:+00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|+00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|+000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|+000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|+000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|+Hello.pdf:9:endstream+Hello.pdf:10:endobj+Hello.pdf:11:5 0 obj+Hello.pdf:12:123+Hello.pdf:13:endobj+Hello.pdf:14:2 0 obj+Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]+Hello.pdf:16:>>+Hello.pdf:17:endobj+Hello.pdf:18:6 0 obj+Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R+Hello.pdf:20:>> >>+Hello.pdf:21:endobj+Hello.pdf:22:9 0 obj+Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>+Hello.pdf:24:stream+Hello.pdf:25:+00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|+00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|+00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|+00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|+00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|+00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|+Hello.pdf:26:+00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|+00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|+00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|+00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|+00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|+000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|+000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|+000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|+000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|+000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|+000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|+00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|+00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|+00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|+00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|+00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|+00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|+00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|+00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|+00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|+00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|+000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|+000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|+000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|+000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|+000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |+000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|+Hello.pdf:27:+000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|+00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|+00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|+00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|+00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|+00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|+00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|+00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|+00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|+00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|+00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|+000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|+000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|+000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|+Hello.pdf:28:+000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|+000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|+000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|+000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|+00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|+00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|+00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|+00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|+00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|+00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|+00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:29:+00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|+00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|+00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|+00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|+000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|+000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|+000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|+000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|+000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|+000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|+00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|+00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|+00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|+00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|+00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|+Hello.pdf:30:+00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|+00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|+00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|+Hello.pdf:31:endstream+Hello.pdf:32:endobj+Hello.pdf:33:10 0 obj+Hello.pdf:34:1116+Hello.pdf:35:endobj+Hello.pdf:36:7 0 obj+Hello.pdf:37:[ /ICCBased 9 0 R ]+Hello.pdf:38:endobj+Hello.pdf:39:3 0 obj+Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>+Hello.pdf:41:endobj+Hello.pdf:42:11 0 obj+Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>+Hello.pdf:44:endobj+Hello.pdf:45:8 0 obj+Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor+Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602+Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602+Hello.pdf:49:0 0 602 ] >>+Hello.pdf:50:endobj+Hello.pdf:51:12 0 obj+Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox+Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729+Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R+Hello.pdf:55:>>+Hello.pdf:56:endobj+Hello.pdf:57:13 0 obj+Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>+Hello.pdf:59:stream+Hello.pdf:60:+00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|+00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|+000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|+000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|+000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|+Hello.pdf:61:+000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|+000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|+000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|+000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|+00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|+00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|+00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|+00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|+00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|+00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|+00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|+00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|+00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|+00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|+00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|+00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|+00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|+00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|+00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|+00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|+00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|+00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|+00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|+00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|+00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|+00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|+00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|+00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|+00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|+00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|+00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|+00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|+Hello.pdf:62:+00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|+00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|+00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||+00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|+Hello.pdf:63:+00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|+Hello.pdf:64:+00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|+00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|+00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|+00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|+00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|+00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|+00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|+Hello.pdf:65:+00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|+00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|+00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|+00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|+Hello.pdf:66:+00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|+00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|+00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|+00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|+00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|+00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|+00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|+00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|+Hello.pdf:67:+00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|+00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|+Hello.pdf:68:+00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|+00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|+Hello.pdf:69:+00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|+Hello.pdf:70:+00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|+00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|+00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|+00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|+Hello.pdf:71:+00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|+00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|+00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|+00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|+00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|+00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|+00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|+00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|+00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|+00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|+00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|+00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|+00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|+Hello.pdf:72:+00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|+00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|+00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|+00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|+00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|+00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|+00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|+00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|+Hello.pdf:73:+00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|+Hello.pdf:74:+00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|+00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|+00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|+00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|+00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|+00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|+00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|+00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|+00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|+Hello.pdf:75:+00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|+00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|+Hello.pdf:76:+00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|+00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|+Hello.pdf:77:+00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|+00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|+00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|+00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|+00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|+00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|+00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|+00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|+00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|+00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|+00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|+00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|+00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|+00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|+00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|+00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|+00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|+00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|+00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|+00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|+00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|+00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|+00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|+00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|+00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|+00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|+000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|+000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|+000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|+000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|+000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|+000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|+00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|+00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|+00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|+00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|+00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|+00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|+00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|+00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|+00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|+00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|+000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|+000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|+Hello.pdf:78:+000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|+000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|+000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|+000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|+000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|+00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|+00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|+00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|+00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|+00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|+00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|+00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|+00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|+00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|+00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|+000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|+000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|+000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|+000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|+000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|+000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|+00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|+00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|+00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|+00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|+00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|+00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|+00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|+00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|+00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|+00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|+000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|+000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|+000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|+000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|+000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|+000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|+00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|+00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|+00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|+00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:79:endstream+Hello.pdf:80:endobj+Hello.pdf:81:14 0 obj+Hello.pdf:82:2734+Hello.pdf:83:endobj+Hello.pdf:84:15 0 obj+Hello.pdf:85:(Hello)+Hello.pdf:86:endobj+Hello.pdf:87:16 0 obj+Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)+Hello.pdf:89:endobj+Hello.pdf:90:17 0 obj+Hello.pdf:91:(TextEdit)+Hello.pdf:92:endobj+Hello.pdf:93:18 0 obj+Hello.pdf:94:(D:20200124010711Z00'00')+Hello.pdf:95:endobj+Hello.pdf:96:19 0 obj+Hello.pdf:97:()+Hello.pdf:98:endobj+Hello.pdf:99:20 0 obj+Hello.pdf:100:[ ]+Hello.pdf:101:endobj+Hello.pdf:102:1 0 obj+Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate+Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>+Hello.pdf:105:endobj+Hello.pdf:106:xref+Hello.pdf:107:0 21+Hello.pdf:108:0000000000 65535 f +Hello.pdf:109:0000005392 00000 n +Hello.pdf:110:0000000238 00000 n +Hello.pdf:111:0000001714 00000 n +Hello.pdf:112:0000000022 00000 n +Hello.pdf:113:0000000219 00000 n +Hello.pdf:114:0000000342 00000 n +Hello.pdf:115:0000001679 00000 n +Hello.pdf:116:0000001847 00000 n +Hello.pdf:117:0000000439 00000 n +Hello.pdf:118:0000001658 00000 n +Hello.pdf:119:0000001797 00000 n +Hello.pdf:120:0000002110 00000 n +Hello.pdf:121:0000002362 00000 n +Hello.pdf:122:0000005186 00000 n +Hello.pdf:123:0000005207 00000 n +Hello.pdf:124:0000005231 00000 n +Hello.pdf:125:0000005284 00000 n +Hello.pdf:126:0000005311 00000 n +Hello.pdf:127:0000005353 00000 n +Hello.pdf:128:0000005372 00000 n +Hello.pdf:129:trailer+Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>+Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>+Hello.pdf:132:startxref+Hello.pdf:133:5536+Hello.pdf:134:%%EOF+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello\ No newline at end of file

tests/out/Hello_-W-nkbT.out

@@ -1,466 +1,466 @@-Hello.bat:     1:  1:      0:	#!/bin/sh-Hello.bat:     2:  1:     10:	echo "Hello World!"-Hello.class:     1:  1:      0:	-00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|-Hello.class:     2:  1:     11:	-00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|-00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|-Hello.class:     3:  1:     24:	-00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|-00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|-Hello.class:     4:  1:    109:	-00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|-00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|-Hello.class:     5:  1:    122:	-00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|-00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|-Hello.class:     6:  1:    345:	-00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|-00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|-Hello.class:     7:  1:    392:	-00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|-Hello.class:     8:  1:    396:	-00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|-00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java:     1:  1:      0:	import java.lang.*;-Hello.java:     2:  1:     20:	-Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting-Hello.java:     4:  1:     74:	{ public static void main(String[] arg)-Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");-Hello.java:     6:  1:    154:	  }-Hello.java:     7:  1:    158:	}-Hello.pdf:     1:  1:      0:	%PDF-1.3-Hello.pdf:     2:  1:      9:	-00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|-Hello.pdf:     3:  1:     22:	4 0 obj-Hello.pdf:     4:  1:     30:	<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf:     5:  1:     71:	stream-Hello.pdf:     6:  1:     78:	-00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|-Hello.pdf:     7:  1:     84:	-00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|-00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|-Hello.pdf:     8:  1:    138:	-00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|-00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|-Hello.pdf:     9:  1:    202:	endstream-Hello.pdf:    10:  1:    212:	endobj-Hello.pdf:    11:  1:    219:	5 0 obj-Hello.pdf:    12:  1:    227:	123-Hello.pdf:    13:  1:    231:	endobj-Hello.pdf:    14:  1:    238:	2 0 obj-Hello.pdf:    15:  1:    246:	<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf:    16:  1:    332:	>>-Hello.pdf:    17:  1:    335:	endobj-Hello.pdf:    18:  1:    342:	6 0 obj-Hello.pdf:    19:  1:    350:	<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf:    20:  1:    426:	>> >>-Hello.pdf:    21:  1:    432:	endobj-Hello.pdf:    22:  1:    439:	9 0 obj-Hello.pdf:    23:  1:    447:	<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf:    24:  1:    517:	stream-Hello.pdf:    25:  1:    524:	-00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|-Hello.pdf:    26:  1:    606:	-00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|-00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|-Hello.pdf:    27:  1:   1019:	-000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|-00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|-Hello.pdf:    28:  1:   1223:	-000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|-000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:    29:  1:   1377:	-00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|-00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|-Hello.pdf:    30:  1:   1604:	-00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|-00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|-Hello.pdf:    31:  1:   1641:	endstream-Hello.pdf:    32:  1:   1651:	endobj-Hello.pdf:    33:  1:   1658:	10 0 obj-Hello.pdf:    34:  1:   1667:	1116-Hello.pdf:    35:  1:   1672:	endobj-Hello.pdf:    36:  1:   1679:	7 0 obj-Hello.pdf:    37:  1:   1687:	[ /ICCBased 9 0 R ]-Hello.pdf:    38:  1:   1707:	endobj-Hello.pdf:    39:  1:   1714:	3 0 obj-Hello.pdf:    40:  1:   1722:	<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf:    41:  1:   1790:	endobj-Hello.pdf:    42:  1:   1797:	11 0 obj-Hello.pdf:    43:  1:   1806:	<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf:    44:  1:   1840:	endobj-Hello.pdf:    45:  1:   1847:	8 0 obj-Hello.pdf:    46:  1:   1855:	<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf:    47:  1:   1937:	12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf:    48:  1:   2014:	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf:    49:  1:   2090:	0 0 602 ] >>-Hello.pdf:    50:  1:   2103:	endobj-Hello.pdf:    51:  1:   2110:	12 0 obj-Hello.pdf:    52:  1:   2119:	<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf:    53:  1:   2196:	[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf:    54:  1:   2273:	/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf:    55:  1:   2352:	>>-Hello.pdf:    56:  1:   2355:	endobj-Hello.pdf:    57:  1:   2362:	13 0 obj-Hello.pdf:    58:  1:   2371:	<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf:    59:  1:   2427:	stream-Hello.pdf:    60:  1:   2434:	-00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|-Hello.pdf:    61:  1:   2511:	-000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|-000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|-Hello.pdf:    62:  1:   2998:	-00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|-00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|-Hello.pdf:    63:  1:   3045:	-00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|-Hello.pdf:    64:  1:   3052:	-00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|-00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|-Hello.pdf:    65:  1:   3143:	-00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|-00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|-Hello.pdf:    66:  1:   3188:	-00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|-00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|-Hello.pdf:    67:  1:   3303:	-00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|-00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|-Hello.pdf:    68:  1:   3325:	-00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|-00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|-Hello.pdf:    69:  1:   3330:	-00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|-Hello.pdf:    70:  1:   3339:	-00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|-00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|-00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|-00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|-Hello.pdf:    71:  1:   3385:	-00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|-00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|-00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|-00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|-00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|-00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|-00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|-00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|-00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|-00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|-00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|-00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|-00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|-Hello.pdf:    72:  1:   3577:	-00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|-00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|-00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|-00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|-00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|-00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|-00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|-00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|-Hello.pdf:    73:  1:   3683:	-00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|-Hello.pdf:    74:  1:   3695:	-00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|-00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|-00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|-00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|-00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|-00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|-00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|-00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|-00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|-Hello.pdf:    75:  1:   3822:	-00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|-00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|-Hello.pdf:    76:  1:   3833:	-00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|-00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|-Hello.pdf:    77:  1:   3852:	-00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|-00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|-00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|-00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|-00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|-00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|-00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|-00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|-00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|-00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|-00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|-00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|-00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|-00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|-00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|-00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|-00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|-00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|-00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|-00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|-00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|-00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|-00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|-00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|-00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|-00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|-000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|-000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|-000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|-000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|-000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|-000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|-00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|-00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|-00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|-00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|-00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|-00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|-00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|-00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|-00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|-00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|-000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|-000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|-Hello.pdf:    78:  1:   4532:	-000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|-000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|-000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|-000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|-000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|-00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|-00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|-00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|-00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|-00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|-00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|-00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|-00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|-00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|-00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|-000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|-000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|-000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|-000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|-000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|-000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|-00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|-00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|-00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|-00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|-00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|-00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|-00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|-00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|-00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|-00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|-000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|-000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|-000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|-000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|-000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|-000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|-00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|-00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|-00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|-00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:    79:  1:   5169:	endstream-Hello.pdf:    80:  1:   5179:	endobj-Hello.pdf:    81:  1:   5186:	14 0 obj-Hello.pdf:    82:  1:   5195:	2734-Hello.pdf:    83:  1:   5200:	endobj-Hello.pdf:    84:  1:   5207:	15 0 obj-Hello.pdf:    85:  1:   5216:	(Hello)-Hello.pdf:    86:  1:   5224:	endobj-Hello.pdf:    87:  1:   5231:	16 0 obj-Hello.pdf:    88:  1:   5240:	(Mac OS X 10.12.6 Quartz PDFContext)-Hello.pdf:    89:  1:   5277:	endobj-Hello.pdf:    90:  1:   5284:	17 0 obj-Hello.pdf:    91:  1:   5293:	(TextEdit)-Hello.pdf:    92:  1:   5304:	endobj-Hello.pdf:    93:  1:   5311:	18 0 obj-Hello.pdf:    94:  1:   5320:	(D:20200124010711Z00'00')-Hello.pdf:    95:  1:   5346:	endobj-Hello.pdf:    96:  1:   5353:	19 0 obj-Hello.pdf:    97:  1:   5362:	()-Hello.pdf:    98:  1:   5365:	endobj-Hello.pdf:    99:  1:   5372:	20 0 obj-Hello.pdf:   100:  1:   5381:	[ ]-Hello.pdf:   101:  1:   5385:	endobj-Hello.pdf:   102:  1:   5392:	1 0 obj-Hello.pdf:   103:  1:   5400:	<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate-Hello.pdf:   104:  1:   5480:	18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>-Hello.pdf:   105:  1:   5529:	endobj-Hello.pdf:   106:  1:   5536:	xref-Hello.pdf:   107:  1:   5541:	0 21-Hello.pdf:   108:  1:   5546:	0000000000 65535 f -Hello.pdf:   109:  1:   5566:	0000005392 00000 n -Hello.pdf:   110:  1:   5586:	0000000238 00000 n -Hello.pdf:   111:  1:   5606:	0000001714 00000 n -Hello.pdf:   112:  1:   5626:	0000000022 00000 n -Hello.pdf:   113:  1:   5646:	0000000219 00000 n -Hello.pdf:   114:  1:   5666:	0000000342 00000 n -Hello.pdf:   115:  1:   5686:	0000001679 00000 n -Hello.pdf:   116:  1:   5706:	0000001847 00000 n -Hello.pdf:   117:  1:   5726:	0000000439 00000 n -Hello.pdf:   118:  1:   5746:	0000001658 00000 n -Hello.pdf:   119:  1:   5766:	0000001797 00000 n -Hello.pdf:   120:  1:   5786:	0000002110 00000 n -Hello.pdf:   121:  1:   5806:	0000002362 00000 n -Hello.pdf:   122:  1:   5826:	0000005186 00000 n -Hello.pdf:   123:  1:   5846:	0000005207 00000 n -Hello.pdf:   124:  1:   5866:	0000005231 00000 n -Hello.pdf:   125:  1:   5886:	0000005284 00000 n -Hello.pdf:   126:  1:   5906:	0000005311 00000 n -Hello.pdf:   127:  1:   5926:	0000005353 00000 n -Hello.pdf:   128:  1:   5946:	0000005372 00000 n -Hello.pdf:   129:  1:   5966:	trailer-Hello.pdf:   130:  1:   5974:	<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>-Hello.pdf:   131:  1:   6052:	<8db88d3335070bd9583341583cf769a3> ] >>-Hello.pdf:   132:  1:   6092:	startxref-Hello.pdf:   133:  1:   6102:	5536-Hello.pdf:   134:  1:   6107:	%%EOF-Hello.sh:     1:  1:      0:	#!/bin/sh-Hello.sh:     2:  1:     10:	echo "Hello World!"-Hello.txt:     1:  1:      0:	Hello+Hello.bat:     1:  1:      0:	#!/bin/sh+Hello.bat:     2:  1:     10:	echo "Hello World!"+Hello.class:     1:  1:      0:	+00000000:  ca fe ba be 00 00 00 34  00 1d 0a -- -- -- -- --  |....@@@4@]J-----|+Hello.class:     2:  1:     11:	+00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|+00000010:  00 10 00 11 08 00 12 0a  -- -- -- -- -- -- -- --  |@P@QH@RJ--------|+Hello.class:     3:  1:     24:	+00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|+00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|+00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|+00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|+00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|+00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a -- -- --  |/String;)VA@J---|+Hello.class:     4:  1:    109:	+00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|+00000070:  72 63 65 46 69 6c 65 01  00 0a -- -- -- -- -- --  |rceFileA@J------|+Hello.class:     5:  1:    122:	+00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|+00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|+00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|+000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|+000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|+000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|+000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|+000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|+000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|+00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|+00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|+00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|+00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|+00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|+00000150:  00 01 b1 00 00 00 01 00  0a -- -- -- -- -- -- --  |@A.@@@A@J-------|+Hello.class:     6:  1:    345:	+00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|+00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|+00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|+00000180:  04 b1 00 00 00 01 00 0a  -- -- -- -- -- -- -- --  |D.@@@A@J--------|+Hello.class:     7:  1:    392:	+00000180:  -- -- -- -- -- -- -- --  00 00 00 0a -- -- -- --  |--------@@@J----|+Hello.class:     8:  1:    396:	+00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|+00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|+Hello.java:     1:  1:      0:	import java.lang.*;+Hello.java:     2:  1:     20:	+Hello.java:     3:  1:     21:	public class Hello // prints a Hello World! greeting+Hello.java:     4:  1:     74:	{ public static void main(String[] arg)+Hello.java:     5:  1:    114:	  { System.out.println("Hello World!");+Hello.java:     6:  1:    154:	  }+Hello.java:     7:  1:    158:	}+Hello.pdf:     1:  1:      0:	%PDF-1.3+Hello.pdf:     2:  1:      9:	+00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|+00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|+Hello.pdf:     3:  1:     22:	4 0 obj+Hello.pdf:     4:  1:     30:	<< /Length 5 0 R /Filter /FlateDecode >>+Hello.pdf:     5:  1:     71:	stream+Hello.pdf:     6:  1:     78:	+00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|+00000050:  45 8e bb 0a -- -- -- --  -- -- -- -- -- -- -- --  |E..J------------|+Hello.pdf:     7:  1:     84:	+00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|+00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|+00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|+00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a -- -- -- -- -- --  |..R...\LYJ------|+Hello.pdf:     8:  1:    138:	+00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|+00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|+000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|+000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|+000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|+Hello.pdf:     9:  1:    202:	endstream+Hello.pdf:    10:  1:    212:	endobj+Hello.pdf:    11:  1:    219:	5 0 obj+Hello.pdf:    12:  1:    227:	123+Hello.pdf:    13:  1:    231:	endobj+Hello.pdf:    14:  1:    238:	2 0 obj+Hello.pdf:    15:  1:    246:	<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]+Hello.pdf:    16:  1:    332:	>>+Hello.pdf:    17:  1:    335:	endobj+Hello.pdf:    18:  1:    342:	6 0 obj+Hello.pdf:    19:  1:    350:	<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R+Hello.pdf:    20:  1:    426:	>> >>+Hello.pdf:    21:  1:    432:	endobj+Hello.pdf:    22:  1:    439:	9 0 obj+Hello.pdf:    23:  1:    447:	<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>+Hello.pdf:    24:  1:    517:	stream+Hello.pdf:    25:  1:    524:	+00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|+00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|+00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|+00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|+00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|+00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a -- --  |H.*6/.....J5OJ--|+Hello.pdf:    26:  1:    606:	+00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|+00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|+00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|+00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|+00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|+000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|+000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|+000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|+000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|+000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|+000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|+00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|+00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|+00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|+00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|+00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|+00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|+00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|+00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|+00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|+00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|+000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|+000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|+000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|+000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|+000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |+000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a -- -- -- -- --  |..Q...XM}.J-----|+Hello.pdf:    27:  1:   1019:	+000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|+00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|+00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|+00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|+00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|+00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|+00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|+00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|+00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|+00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|+00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|+000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|+000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|+000004c0:  59 92 d7 e4 fb f2 0a --  -- -- -- -- -- -- -- --  |Y.....J---------|+Hello.pdf:    28:  1:   1223:	+000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|+000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|+000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|+000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|+00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|+00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|+00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|+00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|+00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|+00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|+00000560:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:    29:  1:   1377:	+00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|+00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|+00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|+00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|+000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|+000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|+000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|+000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|+000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|+000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|+00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|+00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|+00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|+00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|+00000640:  6d 35 1a 0a -- -- -- --  -- -- -- -- -- -- -- --  |m5ZJ------------|+Hello.pdf:    30:  1:   1604:	+00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|+00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|+00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|+Hello.pdf:    31:  1:   1641:	endstream+Hello.pdf:    32:  1:   1651:	endobj+Hello.pdf:    33:  1:   1658:	10 0 obj+Hello.pdf:    34:  1:   1667:	1116+Hello.pdf:    35:  1:   1672:	endobj+Hello.pdf:    36:  1:   1679:	7 0 obj+Hello.pdf:    37:  1:   1687:	[ /ICCBased 9 0 R ]+Hello.pdf:    38:  1:   1707:	endobj+Hello.pdf:    39:  1:   1714:	3 0 obj+Hello.pdf:    40:  1:   1722:	<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>+Hello.pdf:    41:  1:   1790:	endobj+Hello.pdf:    42:  1:   1797:	11 0 obj+Hello.pdf:    43:  1:   1806:	<< /Type /Catalog /Pages 3 0 R >>+Hello.pdf:    44:  1:   1840:	endobj+Hello.pdf:    45:  1:   1847:	8 0 obj+Hello.pdf:    46:  1:   1855:	<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor+Hello.pdf:    47:  1:   1937:	12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602+Hello.pdf:    48:  1:   2014:	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602+Hello.pdf:    49:  1:   2090:	0 0 602 ] >>+Hello.pdf:    50:  1:   2103:	endobj+Hello.pdf:    51:  1:   2110:	12 0 obj+Hello.pdf:    52:  1:   2119:	<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox+Hello.pdf:    53:  1:   2196:	[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729+Hello.pdf:    54:  1:   2273:	/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R+Hello.pdf:    55:  1:   2352:	>>+Hello.pdf:    56:  1:   2355:	endobj+Hello.pdf:    57:  1:   2362:	13 0 obj+Hello.pdf:    58:  1:   2371:	<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>+Hello.pdf:    59:  1:   2427:	stream+Hello.pdf:    60:  1:   2434:	+00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|+00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|+000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|+000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|+000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a --  |.+E]I.T.b#E..BJ-|+Hello.pdf:    61:  1:   2511:	+000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|+000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|+000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|+000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|+00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|+00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|+00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|+00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|+00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|+00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|+00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|+00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|+00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|+00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|+00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|+00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|+00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|+00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|+00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|+00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|+00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|+00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|+00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|+00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|+00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|+00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|+00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|+00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|+00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|+00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|+00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|+00000bb0:  e1 ea 04 f9 61 0a -- --  -- -- -- -- -- -- -- --  |..D.aJ----------|+Hello.pdf:    62:  1:   2998:	+00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|+00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|+00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||+00000be0:  b2 51 e1 2f 0a -- -- --  -- -- -- -- -- -- -- --  |.Q./J-----------|+Hello.pdf:    63:  1:   3045:	+00000be0:  -- -- -- -- -- ef 54 60  9f c2 db 0a -- -- -- --  |-----.T`...J----|+Hello.pdf:    64:  1:   3052:	+00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|+00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|+00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|+00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|+00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|+00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|+00000c40:  81 ab f8 bd c2 8b 0a --  -- -- -- -- -- -- -- --  |......J---------|+Hello.pdf:    65:  1:   3143:	+00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|+00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|+00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|+00000c70:  a6 cb a7 0a -- -- -- --  -- -- -- -- -- -- -- --  |...J------------|+Hello.pdf:    66:  1:   3188:	+00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|+00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|+00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|+00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|+00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|+00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|+00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|+00000ce0:  0f 2a ac 70 e2 57 0a --  -- -- -- -- -- -- -- --  |O*.p.WJ---------|+Hello.pdf:    67:  1:   3303:	+00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|+00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a -- -- --  |/U*....Ur...J---|+Hello.pdf:    68:  1:   3325:	+00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|+00000d00:  fd 0a -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.J--------------|+Hello.pdf:    69:  1:   3330:	+00000d00:  -- -- e5 36 fc 42 61 89  c2 3d 0a -- -- -- -- --  |--.6.Ba..=J-----|+Hello.pdf:    70:  1:   3339:	+00000d00:  -- -- -- -- -- -- -- --  -- -- -- 8b cb ac 72 b1  |-----------...r.|+00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|+00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|+00000d30:  dd e4 fc 49 28 e9 86 79  0a -- -- -- -- -- -- --  |...I(..yJ-------|+Hello.pdf:    71:  1:   3385:	+00000d30:  -- -- -- -- -- -- -- --  -- 77 e5 e2 4e 85 b9 b9  |---------w..N...|+00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|+00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|+00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|+00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|+00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|+00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|+00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|+00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|+00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|+00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|+00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|+00000df0:  31 24 22 02 81 42 fd 67  0a -- -- -- -- -- -- --  |1$"B.B.gJ-------|+Hello.pdf:    72:  1:   3577:	+00000df0:  -- -- -- -- -- -- -- --  -- 83 39 84 c1 ad b8 41  |---------.9....A|+00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|+00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|+00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|+00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|+00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|+00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|+00000e60:  c9 ee 0a -- -- -- -- --  -- -- -- -- -- -- -- --  |..J-------------|+Hello.pdf:    73:  1:   3683:	+00000e60:  -- -- -- dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a --  |---.T.*t...:L.J-|+Hello.pdf:    74:  1:   3695:	+00000e60:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- 70  |---------------p|+00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|+00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|+00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|+00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|+00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|+00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|+00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|+00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a -- --  |5NV....'(.s&.J--|+Hello.pdf:    75:  1:   3822:	+00000ee0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 71 a9  |--------------q.|+00000ef0:  88 75 20 46 c1 c2 a6 2d  0a -- -- -- -- -- -- --  |.u F...-J-------|+Hello.pdf:    76:  1:   3833:	+00000ef0:  -- -- -- -- -- -- -- --  -- d2 05 70 72 68 85 c6  |---------.Eprh..|+00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a -- -- -- --  |.6H.CP~.C""J----|+Hello.pdf:    77:  1:   3852:	+00000f00:  -- -- -- -- -- -- -- --  -- -- -- -- 57 ac 16 59  |------------W.VY|+00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|+00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|+00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|+00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|+00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|+00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|+00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|+00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|+00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|+00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|+00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|+00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|+00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|+00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|+00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|+00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|+00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|+00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|+00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|+00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|+00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|+00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|+00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|+00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|+00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|+000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|+000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|+000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|+000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|+000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|+000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|+00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|+00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|+00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|+00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|+00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|+00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|+00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|+00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|+00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|+00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|+000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|+000011b0:  79 47 d4 0a -- -- -- --  -- -- -- -- -- -- -- --  |yG.J------------|+Hello.pdf:    78:  1:   4532:	+000011b0:  -- -- -- -- 97 28 90 11  a6 50 55 95 61 73 52 d0  |----.(.Q.PU.asR.|+000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|+000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|+000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|+000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|+00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|+00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|+00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|+00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|+00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|+00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|+00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|+00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|+00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|+00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|+000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|+000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|+000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|+000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|+000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|+000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|+00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|+00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|+00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|+00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|+00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|+00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|+00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|+00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|+00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|+00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|+000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|+000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|+000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|+000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|+000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|+000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|+00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|+00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|+00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|+00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:    79:  1:   5169:	endstream+Hello.pdf:    80:  1:   5179:	endobj+Hello.pdf:    81:  1:   5186:	14 0 obj+Hello.pdf:    82:  1:   5195:	2734+Hello.pdf:    83:  1:   5200:	endobj+Hello.pdf:    84:  1:   5207:	15 0 obj+Hello.pdf:    85:  1:   5216:	(Hello)+Hello.pdf:    86:  1:   5224:	endobj+Hello.pdf:    87:  1:   5231:	16 0 obj+Hello.pdf:    88:  1:   5240:	(Mac OS X 10.12.6 Quartz PDFContext)+Hello.pdf:    89:  1:   5277:	endobj+Hello.pdf:    90:  1:   5284:	17 0 obj+Hello.pdf:    91:  1:   5293:	(TextEdit)+Hello.pdf:    92:  1:   5304:	endobj+Hello.pdf:    93:  1:   5311:	18 0 obj+Hello.pdf:    94:  1:   5320:	(D:20200124010711Z00'00')+Hello.pdf:    95:  1:   5346:	endobj+Hello.pdf:    96:  1:   5353:	19 0 obj+Hello.pdf:    97:  1:   5362:	()+Hello.pdf:    98:  1:   5365:	endobj+Hello.pdf:    99:  1:   5372:	20 0 obj+Hello.pdf:   100:  1:   5381:	[ ]+Hello.pdf:   101:  1:   5385:	endobj+Hello.pdf:   102:  1:   5392:	1 0 obj+Hello.pdf:   103:  1:   5400:	<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate+Hello.pdf:   104:  1:   5480:	18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>+Hello.pdf:   105:  1:   5529:	endobj+Hello.pdf:   106:  1:   5536:	xref+Hello.pdf:   107:  1:   5541:	0 21+Hello.pdf:   108:  1:   5546:	0000000000 65535 f +Hello.pdf:   109:  1:   5566:	0000005392 00000 n +Hello.pdf:   110:  1:   5586:	0000000238 00000 n +Hello.pdf:   111:  1:   5606:	0000001714 00000 n +Hello.pdf:   112:  1:   5626:	0000000022 00000 n +Hello.pdf:   113:  1:   5646:	0000000219 00000 n +Hello.pdf:   114:  1:   5666:	0000000342 00000 n +Hello.pdf:   115:  1:   5686:	0000001679 00000 n +Hello.pdf:   116:  1:   5706:	0000001847 00000 n +Hello.pdf:   117:  1:   5726:	0000000439 00000 n +Hello.pdf:   118:  1:   5746:	0000001658 00000 n +Hello.pdf:   119:  1:   5766:	0000001797 00000 n +Hello.pdf:   120:  1:   5786:	0000002110 00000 n +Hello.pdf:   121:  1:   5806:	0000002362 00000 n +Hello.pdf:   122:  1:   5826:	0000005186 00000 n +Hello.pdf:   123:  1:   5846:	0000005207 00000 n +Hello.pdf:   124:  1:   5866:	0000005231 00000 n +Hello.pdf:   125:  1:   5886:	0000005284 00000 n +Hello.pdf:   126:  1:   5906:	0000005311 00000 n +Hello.pdf:   127:  1:   5926:	0000005353 00000 n +Hello.pdf:   128:  1:   5946:	0000005372 00000 n +Hello.pdf:   129:  1:   5966:	trailer+Hello.pdf:   130:  1:   5974:	<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>+Hello.pdf:   131:  1:   6052:	<8db88d3335070bd9583341583cf769a3> ] >>+Hello.pdf:   132:  1:   6092:	startxref+Hello.pdf:   133:  1:   6102:	5536+Hello.pdf:   134:  1:   6107:	%%EOF+Hello.sh:     1:  1:      0:	#!/bin/sh+Hello.sh:     2:  1:     10:	echo "Hello World!"+Hello.txt:     1:  1:      0:	Hello

tests/out/Hello_-W-nvy.out

@@ -1,434 +1,434 @@-Hello.bat-1-#!/bin/sh-Hello.bat-2-echo "Hello World!"-Hello.class-1--Hello.class-2--00000000-  ca fe ba be 00 00 00 34  00 1d 0a 00 06 00 0f 09  |....@@@4@]J@F@OI|-Hello.class-3--00000010-  00 10 00 11 08 00 12 0a  00 13 00 14 07 00 15 07  |@P@QH@RJ@S@TG@UG|-00000020-  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030-  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040-  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050-  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-Hello.class-4--00000060-  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a 53 6f 75  |/String;)VA@JSou|-Hello.class-5--00000070-  72 63 65 46 69 6c 65 01  00 0a 48 65 6c 6c 6f 2e  |rceFileA@JHello.|-00000080-  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090-  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0-  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0-  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0-  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0-  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0-  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0-  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100-  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110-  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120-  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130-  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140-  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-Hello.class-6--00000150-  00 01 b1 00 00 00 01 00  0a 00 00 00 06 00 01 00  |@A.@@@A@J@@@F@A@|-00000160-  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170-  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-Hello.class-7--Hello.class-8--00000180-  04 b1 00 00 00 01 00 0a  00 00 00 0a 00 02 00 00  |D.@@@A@J@@@J@B@@|-00000190-  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java-1-import java.lang.*;-Hello.java-2--Hello.java-3-public class Hello // prints a Hello World! greeting-Hello.java-4-{ public static void main(String[] arg)-Hello.java-5-  { System.out.println("Hello World!");-Hello.java-6-  }-Hello.java-7-}-Hello.pdf-1-%PDF-1.3-Hello.pdf-2--00000000-  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010-  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|-Hello.pdf-3-4 0 obj-Hello.pdf-4-<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf-5-stream-Hello.pdf-6--00000040-  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-Hello.pdf-7--00000050-  45 8e bb 0a 02 31 14 44  7b bf e2 94 5a 98 bd 89  |E..JB1TD{...Z...|-00000060-  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070-  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-Hello.pdf-8--00000080-  e2 a9 12 f3 99 90 5c 4c  59 0a 9f 89 07 6f 86 6b  |..R...\LYJ..Go.k|-00000090-  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0-  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0-  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0-  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|-Hello.pdf-9-endstream-Hello.pdf-10-endobj-Hello.pdf-11-5 0 obj-Hello.pdf-12-123-Hello.pdf-13-endobj-Hello.pdf-14-2 0 obj-Hello.pdf-15-<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf-16->>-Hello.pdf-17-endobj-Hello.pdf-18-6 0 obj-Hello.pdf-19-<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf-20->> >>-Hello.pdf-21-endobj-Hello.pdf-22-9 0 obj-Hello.pdf-23-<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf-24-stream-Hello.pdf-25--00000200-  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210-  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220-  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230-  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240-  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-Hello.pdf-26--00000250-  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a 11 5a  |H.*6/.....J5OJQZ|-00000260-  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270-  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280-  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290-  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0-  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0-  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0-  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0-  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0-  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0-  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300-  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310-  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320-  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330-  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340-  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350-  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360-  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370-  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380-  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390-  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0-  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0-  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0-  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0-  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0-  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-Hello.pdf-27--000003f0-  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a d0 70 d0 7c f4  |..Q...XM}.J.p.|.|-00000400-  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410-  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420-  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430-  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440-  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450-  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460-  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470-  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480-  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490-  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0-  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0-  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-Hello.pdf-28--000004c0-  59 92 d7 e4 fb f2 0a be  f7 e4 d5 a4 0d f9 67 79  |Y.....J.....M.gy|-000004d0-  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0-  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0-  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500-  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510-  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520-  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530-  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540-  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550-  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-Hello.pdf-29--00000560-  0a 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |JK_.wFc..3..^C..|-00000570-  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580-  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590-  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0-  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0-  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0-  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0-  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0-  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0-  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600-  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610-  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620-  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630-  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-Hello.pdf-30--00000640-  6d 35 1a 0a 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |m5ZJT.LL.iV..w7.|-00000650-  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660-  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|-Hello.pdf-31-endstream-Hello.pdf-32-endobj-Hello.pdf-33-10 0 obj-Hello.pdf-34-1116-Hello.pdf-35-endobj-Hello.pdf-36-7 0 obj-Hello.pdf-37-[ /ICCBased 9 0 R ]-Hello.pdf-38-endobj-Hello.pdf-39-3 0 obj-Hello.pdf-40-<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf-41-endobj-Hello.pdf-42-11 0 obj-Hello.pdf-43-<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf-44-endobj-Hello.pdf-45-8 0 obj-Hello.pdf-46-<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf-47-12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf-48-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf-49-0 0 602 ] >>-Hello.pdf-50-endobj-Hello.pdf-51-12 0 obj-Hello.pdf-52-<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf-53-[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf-54-/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf-55->>-Hello.pdf-56-endobj-Hello.pdf-57-13 0 obj-Hello.pdf-58-<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf-59-stream-Hello.pdf-60--00000980-  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990-  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0-  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0-  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-Hello.pdf-61--000009c0-  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a f8  |.+E]I.T.b#E..BJ.|-000009d0-  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0-  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0-  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00-  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10-  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20-  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30-  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40-  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50-  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60-  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70-  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80-  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90-  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0-  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0-  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0-  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0-  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0-  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0-  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00-  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10-  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20-  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30-  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40-  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50-  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60-  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70-  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80-  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90-  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0-  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-Hello.pdf-62--00000bb0-  e1 ea 04 f9 61 0a 3e a8  c0 91 41 68 62 a1 69 10  |..D.aJ>...Ahb.iP|-00000bc0-  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0-  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-Hello.pdf-63--Hello.pdf-64--00000be0-  b2 51 e1 2f 0a ef 54 60  9f c2 db 0a 7f 56 d8 bb  |.Q./J.T`...J~V..|-00000bf0-  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00-  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10-  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20-  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30-  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-Hello.pdf-65--00000c40-  81 ab f8 bd c2 8b 0a bf  4b c2 36 85 17 9e b7 c9  |......J.K.6.W...|-00000c50-  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60-  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-Hello.pdf-66--00000c70-  a6 cb a7 0a f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |...J..SN.d:.p.7.|-00000c80-  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90-  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0-  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0-  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0-  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0-  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-Hello.pdf-67--00000ce0-  0f 2a ac 70 e2 57 0a cb  15 1e 70 0e 93 0f 4c c2  |O*.p.WJ.U^pN.OL.|-Hello.pdf-68--00000cf0-  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a 54 74 c4  |/U*....Ur...JTt.|-Hello.pdf-69--Hello.pdf-70--00000d00-  fd 0a e5 36 fc 42 61 89  c2 3d 0a 8b cb ac 72 b1  |.J.6.Ba..=J...r.|-00000d10-  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|-00000d20-  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|-Hello.pdf-71--00000d30-  dd e4 fc 49 28 e9 86 79  0a 77 e5 e2 4e 85 b9 b9  |...I(..yJw..N...|-00000d40-  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|-00000d50-  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|-00000d60-  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|-00000d70-  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|-00000d80-  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|-00000d90-  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|-00000da0-  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|-00000db0-  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|-00000dc0-  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|-00000dd0-  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|-00000de0-  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|-Hello.pdf-72--00000df0-  31 24 22 02 81 42 fd 67  0a 83 39 84 c1 ad b8 41  |1$"B.B.gJ.9....A|-00000e00-  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|-00000e10-  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|-00000e20-  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|-00000e30-  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|-00000e40-  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|-00000e50-  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|-Hello.pdf-73--Hello.pdf-74--00000e60-  c9 ee 0a dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a 70  |..J.T.*t...:L.Jp|-00000e70-  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|-00000e80-  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|-00000e90-  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|-00000ea0-  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|-00000eb0-  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|-00000ec0-  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|-00000ed0-  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|-Hello.pdf-75--00000ee0-  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a 71 a9  |5NV....'(.s&.Jq.|-Hello.pdf-76--00000ef0-  88 75 20 46 c1 c2 a6 2d  0a d2 05 70 72 68 85 c6  |.u F...-J.Eprh..|-Hello.pdf-77--00000f00-  80 36 08 82 03 10 7e 90  03 22 22 0a 57 ac 16 59  |.6H.CP~.C""JW.VY|-00000f10-  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|-00000f20-  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|-00000f30-  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|-00000f40-  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|-00000f50-  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|-00000f60-  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|-00000f70-  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|-00000f80-  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|-00000f90-  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|-00000fa0-  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|-00000fb0-  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|-00000fc0-  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|-00000fd0-  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|-00000fe0-  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|-00000ff0-  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|-00001000-  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|-00001010-  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|-00001020-  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|-00001030-  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|-00001040-  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|-00001050-  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|-00001060-  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|-00001070-  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|-00001080-  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|-00001090-  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|-000010a0-  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|-000010b0-  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|-000010c0-  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|-000010d0-  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|-000010e0-  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|-000010f0-  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|-00001100-  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|-00001110-  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|-00001120-  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|-00001130-  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|-00001140-  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|-00001150-  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|-00001160-  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|-00001170-  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|-00001180-  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|-00001190-  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|-000011a0-  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|-Hello.pdf-78--000011b0-  79 47 d4 0a 97 28 90 11  a6 50 55 95 61 73 52 d0  |yG.J.(.Q.PU.asR.|-000011c0-  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|-000011d0-  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|-000011e0-  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|-000011f0-  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|-00001200-  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|-00001210-  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|-00001220-  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|-00001230-  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|-00001240-  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|-00001250-  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|-00001260-  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|-00001270-  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|-00001280-  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|-00001290-  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|-000012a0-  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|-000012b0-  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|-000012c0-  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|-000012d0-  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|-000012e0-  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|-000012f0-  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|-00001300-  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|-00001310-  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|-00001320-  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|-00001330-  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|-00001340-  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|-00001350-  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|-00001360-  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|-00001370-  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|-00001380-  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|-00001390-  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|-000013a0-  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|-000013b0-  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|-000013c0-  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|-000013d0-  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|-000013e0-  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|-000013f0-  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|-00001400-  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|-00001410-  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|-00001420-  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|-00001430-  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf-79-endstream-Hello.pdf-80-endobj-Hello.pdf-81-14 0 obj-Hello.pdf-82-2734-Hello.pdf-83-endobj-Hello.pdf-84-15 0 obj-Hello.pdf-85-(Hello)-Hello.pdf-86-endobj-Hello.pdf-87-16 0 obj-Hello.pdf-88-(Mac OS X 10.12.6 Quartz PDFContext)-Hello.pdf-89-endobj-Hello.pdf-90-17 0 obj-Hello.pdf-91-(TextEdit)-Hello.pdf-92-endobj-Hello.pdf-93-18 0 obj-Hello.pdf-94-(D:20200124010711Z00'00')-Hello.pdf-95-endobj-Hello.pdf-96-19 0 obj-Hello.pdf-97-()-Hello.pdf-98-endobj-Hello.pdf-99-20 0 obj-Hello.pdf-100-[ ]-Hello.pdf-101-endobj-Hello.pdf-102-1 0 obj-Hello.pdf-103-<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate-Hello.pdf-104-18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>-Hello.pdf-105-endobj-Hello.pdf-106-xref-Hello.pdf-107-0 21-Hello.pdf-108-0000000000 65535 f -Hello.pdf-109-0000005392 00000 n -Hello.pdf-110-0000000238 00000 n -Hello.pdf-111-0000001714 00000 n -Hello.pdf-112-0000000022 00000 n -Hello.pdf-113-0000000219 00000 n -Hello.pdf-114-0000000342 00000 n -Hello.pdf-115-0000001679 00000 n -Hello.pdf-116-0000001847 00000 n -Hello.pdf-117-0000000439 00000 n -Hello.pdf-118-0000001658 00000 n -Hello.pdf-119-0000001797 00000 n -Hello.pdf-120-0000002110 00000 n -Hello.pdf-121-0000002362 00000 n -Hello.pdf-122-0000005186 00000 n -Hello.pdf-123-0000005207 00000 n -Hello.pdf-124-0000005231 00000 n -Hello.pdf-125-0000005284 00000 n -Hello.pdf-126-0000005311 00000 n -Hello.pdf-127-0000005353 00000 n -Hello.pdf-128-0000005372 00000 n -Hello.pdf-129-trailer-Hello.pdf-130-<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>-Hello.pdf-131-<8db88d3335070bd9583341583cf769a3> ] >>-Hello.pdf-132-startxref-Hello.pdf-133-5536-Hello.pdf-134-%%EOF-Hello.sh-1-#!/bin/sh-Hello.sh-2-echo "Hello World!"-Hello.txt-1-Hello\ No newline at end of file+Hello.bat-1-#!/bin/sh+Hello.bat-2-echo "Hello World!"+Hello.class-1-+Hello.class-2-+00000000-  ca fe ba be 00 00 00 34  00 1d 0a 00 06 00 0f 09  |....@@@4@]J@F@OI|+Hello.class-3-+00000010-  00 10 00 11 08 00 12 0a  00 13 00 14 07 00 15 07  |@P@QH@RJ@S@TG@UG|+00000020-  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|+00000030-  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|+00000040-  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|+00000050-  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|+Hello.class-4-+00000060-  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a 53 6f 75  |/String;)VA@JSou|+Hello.class-5-+00000070-  72 63 65 46 69 6c 65 01  00 0a 48 65 6c 6c 6f 2e  |rceFileA@JHello.|+00000080-  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|+00000090-  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|+000000a0-  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|+000000b0-  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|+000000c0-  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|+000000d0-  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|+000000e0-  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|+000000f0-  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|+00000100-  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|+00000110-  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|+00000120-  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|+00000130-  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|+00000140-  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|+Hello.class-6-+00000150-  00 01 b1 00 00 00 01 00  0a 00 00 00 06 00 01 00  |@A.@@@A@J@@@F@A@|+00000160-  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|+00000170-  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|+Hello.class-7-+Hello.class-8-+00000180-  04 b1 00 00 00 01 00 0a  00 00 00 0a 00 02 00 00  |D.@@@A@J@@@J@B@@|+00000190-  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|+Hello.java-1-import java.lang.*;+Hello.java-2-+Hello.java-3-public class Hello // prints a Hello World! greeting+Hello.java-4-{ public static void main(String[] arg)+Hello.java-5-  { System.out.println("Hello World!");+Hello.java-6-  }+Hello.java-7-}+Hello.pdf-1-%PDF-1.3+Hello.pdf-2-+00000000-  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|+00000010-  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|+Hello.pdf-3-4 0 obj+Hello.pdf-4-<< /Length 5 0 R /Filter /FlateDecode >>+Hello.pdf-5-stream+Hello.pdf-6-+00000040-  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|+Hello.pdf-7-+00000050-  45 8e bb 0a 02 31 14 44  7b bf e2 94 5a 98 bd 89  |E..JB1TD{...Z...|+00000060-  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|+00000070-  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|+Hello.pdf-8-+00000080-  e2 a9 12 f3 99 90 5c 4c  59 0a 9f 89 07 6f 86 6b  |..R...\LYJ..Go.k|+00000090-  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|+000000a0-  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|+000000b0-  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|+000000c0-  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|+Hello.pdf-9-endstream+Hello.pdf-10-endobj+Hello.pdf-11-5 0 obj+Hello.pdf-12-123+Hello.pdf-13-endobj+Hello.pdf-14-2 0 obj+Hello.pdf-15-<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]+Hello.pdf-16->>+Hello.pdf-17-endobj+Hello.pdf-18-6 0 obj+Hello.pdf-19-<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R+Hello.pdf-20->> >>+Hello.pdf-21-endobj+Hello.pdf-22-9 0 obj+Hello.pdf-23-<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>+Hello.pdf-24-stream+Hello.pdf-25-+00000200-  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|+00000210-  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|+00000220-  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|+00000230-  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|+00000240-  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|+Hello.pdf-26-+00000250-  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a 11 5a  |H.*6/.....J5OJQZ|+00000260-  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|+00000270-  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|+00000280-  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|+00000290-  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|+000002a0-  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|+000002b0-  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|+000002c0-  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|+000002d0-  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|+000002e0-  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|+000002f0-  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|+00000300-  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|+00000310-  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|+00000320-  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|+00000330-  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|+00000340-  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|+00000350-  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|+00000360-  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|+00000370-  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|+00000380-  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|+00000390-  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|+000003a0-  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|+000003b0-  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|+000003c0-  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|+000003d0-  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|+000003e0-  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |+Hello.pdf-27-+000003f0-  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a d0 70 d0 7c f4  |..Q...XM}.J.p.|.|+00000400-  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|+00000410-  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|+00000420-  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|+00000430-  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|+00000440-  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|+00000450-  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|+00000460-  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|+00000470-  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|+00000480-  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|+00000490-  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|+000004a0-  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|+000004b0-  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|+Hello.pdf-28-+000004c0-  59 92 d7 e4 fb f2 0a be  f7 e4 d5 a4 0d f9 67 79  |Y.....J.....M.gy|+000004d0-  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|+000004e0-  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|+000004f0-  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|+00000500-  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|+00000510-  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|+00000520-  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|+00000530-  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|+00000540-  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|+00000550-  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|+Hello.pdf-29-+00000560-  0a 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |JK_.wFc..3..^C..|+00000570-  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|+00000580-  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|+00000590-  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|+000005a0-  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|+000005b0-  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|+000005c0-  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|+000005d0-  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|+000005e0-  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|+000005f0-  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|+00000600-  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|+00000610-  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|+00000620-  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|+00000630-  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|+Hello.pdf-30-+00000640-  6d 35 1a 0a 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |m5ZJT.LL.iV..w7.|+00000650-  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|+00000660-  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|+Hello.pdf-31-endstream+Hello.pdf-32-endobj+Hello.pdf-33-10 0 obj+Hello.pdf-34-1116+Hello.pdf-35-endobj+Hello.pdf-36-7 0 obj+Hello.pdf-37-[ /ICCBased 9 0 R ]+Hello.pdf-38-endobj+Hello.pdf-39-3 0 obj+Hello.pdf-40-<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>+Hello.pdf-41-endobj+Hello.pdf-42-11 0 obj+Hello.pdf-43-<< /Type /Catalog /Pages 3 0 R >>+Hello.pdf-44-endobj+Hello.pdf-45-8 0 obj+Hello.pdf-46-<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor+Hello.pdf-47-12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602+Hello.pdf-48-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602+Hello.pdf-49-0 0 602 ] >>+Hello.pdf-50-endobj+Hello.pdf-51-12 0 obj+Hello.pdf-52-<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox+Hello.pdf-53-[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729+Hello.pdf-54-/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R+Hello.pdf-55->>+Hello.pdf-56-endobj+Hello.pdf-57-13 0 obj+Hello.pdf-58-<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>+Hello.pdf-59-stream+Hello.pdf-60-+00000980-  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|+00000990-  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|+000009a0-  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|+000009b0-  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|+Hello.pdf-61-+000009c0-  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a f8  |.+E]I.T.b#E..BJ.|+000009d0-  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|+000009e0-  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|+000009f0-  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|+00000a00-  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|+00000a10-  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|+00000a20-  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|+00000a30-  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|+00000a40-  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|+00000a50-  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|+00000a60-  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|+00000a70-  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|+00000a80-  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|+00000a90-  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|+00000aa0-  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|+00000ab0-  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|+00000ac0-  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|+00000ad0-  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|+00000ae0-  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|+00000af0-  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|+00000b00-  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|+00000b10-  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|+00000b20-  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|+00000b30-  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|+00000b40-  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|+00000b50-  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|+00000b60-  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|+00000b70-  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|+00000b80-  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|+00000b90-  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|+00000ba0-  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|+Hello.pdf-62-+00000bb0-  e1 ea 04 f9 61 0a 3e a8  c0 91 41 68 62 a1 69 10  |..D.aJ>...Ahb.iP|+00000bc0-  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|+00000bd0-  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||+Hello.pdf-63-+Hello.pdf-64-+00000be0-  b2 51 e1 2f 0a ef 54 60  9f c2 db 0a 7f 56 d8 bb  |.Q./J.T`...J~V..|+00000bf0-  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|+00000c00-  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|+00000c10-  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|+00000c20-  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|+00000c30-  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|+Hello.pdf-65-+00000c40-  81 ab f8 bd c2 8b 0a bf  4b c2 36 85 17 9e b7 c9  |......J.K.6.W...|+00000c50-  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|+00000c60-  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|+Hello.pdf-66-+00000c70-  a6 cb a7 0a f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |...J..SN.d:.p.7.|+00000c80-  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|+00000c90-  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|+00000ca0-  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|+00000cb0-  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|+00000cc0-  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|+00000cd0-  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|+Hello.pdf-67-+00000ce0-  0f 2a ac 70 e2 57 0a cb  15 1e 70 0e 93 0f 4c c2  |O*.p.WJ.U^pN.OL.|+Hello.pdf-68-+00000cf0-  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a 54 74 c4  |/U*....Ur...JTt.|+Hello.pdf-69-+Hello.pdf-70-+00000d00-  fd 0a e5 36 fc 42 61 89  c2 3d 0a 8b cb ac 72 b1  |.J.6.Ba..=J...r.|+00000d10-  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|+00000d20-  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|+Hello.pdf-71-+00000d30-  dd e4 fc 49 28 e9 86 79  0a 77 e5 e2 4e 85 b9 b9  |...I(..yJw..N...|+00000d40-  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|+00000d50-  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|+00000d60-  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|+00000d70-  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|+00000d80-  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|+00000d90-  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|+00000da0-  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|+00000db0-  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|+00000dc0-  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|+00000dd0-  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|+00000de0-  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|+Hello.pdf-72-+00000df0-  31 24 22 02 81 42 fd 67  0a 83 39 84 c1 ad b8 41  |1$"B.B.gJ.9....A|+00000e00-  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|+00000e10-  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|+00000e20-  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|+00000e30-  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|+00000e40-  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|+00000e50-  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|+Hello.pdf-73-+Hello.pdf-74-+00000e60-  c9 ee 0a dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a 70  |..J.T.*t...:L.Jp|+00000e70-  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|+00000e80-  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|+00000e90-  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|+00000ea0-  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|+00000eb0-  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|+00000ec0-  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|+00000ed0-  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|+Hello.pdf-75-+00000ee0-  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a 71 a9  |5NV....'(.s&.Jq.|+Hello.pdf-76-+00000ef0-  88 75 20 46 c1 c2 a6 2d  0a d2 05 70 72 68 85 c6  |.u F...-J.Eprh..|+Hello.pdf-77-+00000f00-  80 36 08 82 03 10 7e 90  03 22 22 0a 57 ac 16 59  |.6H.CP~.C""JW.VY|+00000f10-  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|+00000f20-  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|+00000f30-  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|+00000f40-  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|+00000f50-  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|+00000f60-  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|+00000f70-  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|+00000f80-  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|+00000f90-  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|+00000fa0-  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|+00000fb0-  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|+00000fc0-  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|+00000fd0-  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|+00000fe0-  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|+00000ff0-  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|+00001000-  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|+00001010-  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|+00001020-  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|+00001030-  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|+00001040-  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|+00001050-  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|+00001060-  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|+00001070-  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|+00001080-  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|+00001090-  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|+000010a0-  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|+000010b0-  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|+000010c0-  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|+000010d0-  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|+000010e0-  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|+000010f0-  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|+00001100-  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|+00001110-  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|+00001120-  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|+00001130-  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|+00001140-  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|+00001150-  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|+00001160-  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|+00001170-  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|+00001180-  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|+00001190-  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|+000011a0-  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|+Hello.pdf-78-+000011b0-  79 47 d4 0a 97 28 90 11  a6 50 55 95 61 73 52 d0  |yG.J.(.Q.PU.asR.|+000011c0-  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|+000011d0-  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|+000011e0-  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|+000011f0-  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|+00001200-  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|+00001210-  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|+00001220-  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|+00001230-  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|+00001240-  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|+00001250-  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|+00001260-  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|+00001270-  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|+00001280-  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|+00001290-  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|+000012a0-  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|+000012b0-  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|+000012c0-  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|+000012d0-  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|+000012e0-  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|+000012f0-  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|+00001300-  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|+00001310-  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|+00001320-  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|+00001330-  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|+00001340-  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|+00001350-  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|+00001360-  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|+00001370-  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|+00001380-  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|+00001390-  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|+000013a0-  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|+000013b0-  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|+000013c0-  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|+000013d0-  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|+000013e0-  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|+000013f0-  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|+00001400-  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|+00001410-  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|+00001420-  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|+00001430-  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf-79-endstream+Hello.pdf-80-endobj+Hello.pdf-81-14 0 obj+Hello.pdf-82-2734+Hello.pdf-83-endobj+Hello.pdf-84-15 0 obj+Hello.pdf-85-(Hello)+Hello.pdf-86-endobj+Hello.pdf-87-16 0 obj+Hello.pdf-88-(Mac OS X 10.12.6 Quartz PDFContext)+Hello.pdf-89-endobj+Hello.pdf-90-17 0 obj+Hello.pdf-91-(TextEdit)+Hello.pdf-92-endobj+Hello.pdf-93-18 0 obj+Hello.pdf-94-(D:20200124010711Z00'00')+Hello.pdf-95-endobj+Hello.pdf-96-19 0 obj+Hello.pdf-97-()+Hello.pdf-98-endobj+Hello.pdf-99-20 0 obj+Hello.pdf-100-[ ]+Hello.pdf-101-endobj+Hello.pdf-102-1 0 obj+Hello.pdf-103-<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate+Hello.pdf-104-18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>+Hello.pdf-105-endobj+Hello.pdf-106-xref+Hello.pdf-107-0 21+Hello.pdf-108-0000000000 65535 f +Hello.pdf-109-0000005392 00000 n +Hello.pdf-110-0000000238 00000 n +Hello.pdf-111-0000001714 00000 n +Hello.pdf-112-0000000022 00000 n +Hello.pdf-113-0000000219 00000 n +Hello.pdf-114-0000000342 00000 n +Hello.pdf-115-0000001679 00000 n +Hello.pdf-116-0000001847 00000 n +Hello.pdf-117-0000000439 00000 n +Hello.pdf-118-0000001658 00000 n +Hello.pdf-119-0000001797 00000 n +Hello.pdf-120-0000002110 00000 n +Hello.pdf-121-0000002362 00000 n +Hello.pdf-122-0000005186 00000 n +Hello.pdf-123-0000005207 00000 n +Hello.pdf-124-0000005231 00000 n +Hello.pdf-125-0000005284 00000 n +Hello.pdf-126-0000005311 00000 n +Hello.pdf-127-0000005353 00000 n +Hello.pdf-128-0000005372 00000 n +Hello.pdf-129-trailer+Hello.pdf-130-<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>+Hello.pdf-131-<8db88d3335070bd9583341583cf769a3> ] >>+Hello.pdf-132-startxref+Hello.pdf-133-5536+Hello.pdf-134-%%EOF+Hello.sh-1-#!/bin/sh+Hello.sh-2-echo "Hello World!"+Hello.txt-1-Hello\ No newline at end of file

tests/out/Hello_-W-ny.out

@@ -1,434 +1,434 @@-Hello.bat:1:#!/bin/sh-Hello.bat:2:echo "Hello World!"-Hello.class:1:-Hello.class:2:-00000000:  ca fe ba be 00 00 00 34  00 1d 0a 00 06 00 0f 09  |....@@@4@]J@F@OI|-Hello.class:3:-00000010:  00 10 00 11 08 00 12 0a  00 13 00 14 07 00 15 07  |@P@QH@RJ@S@TG@UG|-00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-Hello.class:4:-00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a 53 6f 75  |/String;)VA@JSou|-Hello.class:5:-00000070:  72 63 65 46 69 6c 65 01  00 0a 48 65 6c 6c 6f 2e  |rceFileA@JHello.|-00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-Hello.class:6:-00000150:  00 01 b1 00 00 00 01 00  0a 00 00 00 06 00 01 00  |@A.@@@A@J@@@F@A@|-00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-Hello.class:7:-Hello.class:8:-00000180:  04 b1 00 00 00 01 00 0a  00 00 00 0a 00 02 00 00  |D.@@@A@J@@@J@B@@|-00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java:1:import java.lang.*;-Hello.java:2:-Hello.java:3:public class Hello // prints a Hello World! greeting-Hello.java:4:{ public static void main(String[] arg)-Hello.java:5:  { System.out.println("Hello World!");-Hello.java:6:  }-Hello.java:7:}-Hello.pdf:1:%PDF-1.3-Hello.pdf:2:-00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|-Hello.pdf:3:4 0 obj-Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf:5:stream-Hello.pdf:6:-00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-Hello.pdf:7:-00000050:  45 8e bb 0a 02 31 14 44  7b bf e2 94 5a 98 bd 89  |E..JB1TD{...Z...|-00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-Hello.pdf:8:-00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a 9f 89 07 6f 86 6b  |..R...\LYJ..Go.k|-00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|-Hello.pdf:9:endstream-Hello.pdf:10:endobj-Hello.pdf:11:5 0 obj-Hello.pdf:12:123-Hello.pdf:13:endobj-Hello.pdf:14:2 0 obj-Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf:16:>>-Hello.pdf:17:endobj-Hello.pdf:18:6 0 obj-Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf:20:>> >>-Hello.pdf:21:endobj-Hello.pdf:22:9 0 obj-Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf:24:stream-Hello.pdf:25:-00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-Hello.pdf:26:-00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a 11 5a  |H.*6/.....J5OJQZ|-00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-Hello.pdf:27:-000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a d0 70 d0 7c f4  |..Q...XM}.J.p.|.|-00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-Hello.pdf:28:-000004c0:  59 92 d7 e4 fb f2 0a be  f7 e4 d5 a4 0d f9 67 79  |Y.....J.....M.gy|-000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-Hello.pdf:29:-00000560:  0a 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |JK_.wFc..3..^C..|-00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-Hello.pdf:30:-00000640:  6d 35 1a 0a 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |m5ZJT.LL.iV..w7.|-00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|-Hello.pdf:31:endstream-Hello.pdf:32:endobj-Hello.pdf:33:10 0 obj-Hello.pdf:34:1116-Hello.pdf:35:endobj-Hello.pdf:36:7 0 obj-Hello.pdf:37:[ /ICCBased 9 0 R ]-Hello.pdf:38:endobj-Hello.pdf:39:3 0 obj-Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf:41:endobj-Hello.pdf:42:11 0 obj-Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf:44:endobj-Hello.pdf:45:8 0 obj-Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf:49:0 0 602 ] >>-Hello.pdf:50:endobj-Hello.pdf:51:12 0 obj-Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf:55:>>-Hello.pdf:56:endobj-Hello.pdf:57:13 0 obj-Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf:59:stream-Hello.pdf:60:-00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-Hello.pdf:61:-000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a f8  |.+E]I.T.b#E..BJ.|-000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-Hello.pdf:62:-00000bb0:  e1 ea 04 f9 61 0a 3e a8  c0 91 41 68 62 a1 69 10  |..D.aJ>...Ahb.iP|-00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-Hello.pdf:63:-Hello.pdf:64:-00000be0:  b2 51 e1 2f 0a ef 54 60  9f c2 db 0a 7f 56 d8 bb  |.Q./J.T`...J~V..|-00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-Hello.pdf:65:-00000c40:  81 ab f8 bd c2 8b 0a bf  4b c2 36 85 17 9e b7 c9  |......J.K.6.W...|-00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-Hello.pdf:66:-00000c70:  a6 cb a7 0a f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |...J..SN.d:.p.7.|-00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-Hello.pdf:67:-00000ce0:  0f 2a ac 70 e2 57 0a cb  15 1e 70 0e 93 0f 4c c2  |O*.p.WJ.U^pN.OL.|-Hello.pdf:68:-00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a 54 74 c4  |/U*....Ur...JTt.|-Hello.pdf:69:-Hello.pdf:70:-00000d00:  fd 0a e5 36 fc 42 61 89  c2 3d 0a 8b cb ac 72 b1  |.J.6.Ba..=J...r.|-00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|-00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|-Hello.pdf:71:-00000d30:  dd e4 fc 49 28 e9 86 79  0a 77 e5 e2 4e 85 b9 b9  |...I(..yJw..N...|-00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|-00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|-00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|-00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|-00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|-00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|-00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|-00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|-00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|-00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|-00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|-Hello.pdf:72:-00000df0:  31 24 22 02 81 42 fd 67  0a 83 39 84 c1 ad b8 41  |1$"B.B.gJ.9....A|-00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|-00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|-00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|-00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|-00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|-00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|-Hello.pdf:73:-Hello.pdf:74:-00000e60:  c9 ee 0a dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a 70  |..J.T.*t...:L.Jp|-00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|-00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|-00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|-00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|-00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|-00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|-00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|-Hello.pdf:75:-00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a 71 a9  |5NV....'(.s&.Jq.|-Hello.pdf:76:-00000ef0:  88 75 20 46 c1 c2 a6 2d  0a d2 05 70 72 68 85 c6  |.u F...-J.Eprh..|-Hello.pdf:77:-00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a 57 ac 16 59  |.6H.CP~.C""JW.VY|-00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|-00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|-00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|-00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|-00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|-00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|-00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|-00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|-00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|-00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|-00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|-00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|-00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|-00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|-00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|-00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|-00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|-00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|-00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|-00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|-00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|-00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|-00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|-00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|-00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|-000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|-000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|-000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|-000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|-000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|-000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|-00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|-00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|-00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|-00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|-00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|-00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|-00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|-00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|-00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|-00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|-000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|-Hello.pdf:78:-000011b0:  79 47 d4 0a 97 28 90 11  a6 50 55 95 61 73 52 d0  |yG.J.(.Q.PU.asR.|-000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|-000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|-000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|-000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|-00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|-00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|-00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|-00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|-00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|-00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|-00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|-00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|-00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|-00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|-000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|-000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|-000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|-000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|-000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|-000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|-00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|-00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|-00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|-00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|-00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|-00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|-00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|-00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|-00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|-00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|-000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|-000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|-000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|-000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|-000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|-000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|-00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|-00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|-00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|-00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|-Hello.pdf:79:endstream-Hello.pdf:80:endobj-Hello.pdf:81:14 0 obj-Hello.pdf:82:2734-Hello.pdf:83:endobj-Hello.pdf:84:15 0 obj-Hello.pdf:85:(Hello)-Hello.pdf:86:endobj-Hello.pdf:87:16 0 obj-Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)-Hello.pdf:89:endobj-Hello.pdf:90:17 0 obj-Hello.pdf:91:(TextEdit)-Hello.pdf:92:endobj-Hello.pdf:93:18 0 obj-Hello.pdf:94:(D:20200124010711Z00'00')-Hello.pdf:95:endobj-Hello.pdf:96:19 0 obj-Hello.pdf:97:()-Hello.pdf:98:endobj-Hello.pdf:99:20 0 obj-Hello.pdf:100:[ ]-Hello.pdf:101:endobj-Hello.pdf:102:1 0 obj-Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate-Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>-Hello.pdf:105:endobj-Hello.pdf:106:xref-Hello.pdf:107:0 21-Hello.pdf:108:0000000000 65535 f -Hello.pdf:109:0000005392 00000 n -Hello.pdf:110:0000000238 00000 n -Hello.pdf:111:0000001714 00000 n -Hello.pdf:112:0000000022 00000 n -Hello.pdf:113:0000000219 00000 n -Hello.pdf:114:0000000342 00000 n -Hello.pdf:115:0000001679 00000 n -Hello.pdf:116:0000001847 00000 n -Hello.pdf:117:0000000439 00000 n -Hello.pdf:118:0000001658 00000 n -Hello.pdf:119:0000001797 00000 n -Hello.pdf:120:0000002110 00000 n -Hello.pdf:121:0000002362 00000 n -Hello.pdf:122:0000005186 00000 n -Hello.pdf:123:0000005207 00000 n -Hello.pdf:124:0000005231 00000 n -Hello.pdf:125:0000005284 00000 n -Hello.pdf:126:0000005311 00000 n -Hello.pdf:127:0000005353 00000 n -Hello.pdf:128:0000005372 00000 n -Hello.pdf:129:trailer-Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>-Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>-Hello.pdf:132:startxref-Hello.pdf:133:5536-Hello.pdf:134:%%EOF-Hello.sh:1:#!/bin/sh-Hello.sh:2:echo "Hello World!"-Hello.txt:1:Hello\ No newline at end of file+Hello.bat:1:#!/bin/sh+Hello.bat:2:echo "Hello World!"+Hello.class:1:+Hello.class:2:+00000000:  ca fe ba be 00 00 00 34  00 1d 0a 00 06 00 0f 09  |....@@@4@]J@F@OI|+Hello.class:3:+00000010:  00 10 00 11 08 00 12 0a  00 13 00 14 07 00 15 07  |@P@QH@RJ@S@TG@UG|+00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|+00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|+00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|+00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|+Hello.class:4:+00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 0a 53 6f 75  |/String;)VA@JSou|+Hello.class:5:+00000070:  72 63 65 46 69 6c 65 01  00 0a 48 65 6c 6c 6f 2e  |rceFileA@JHello.|+00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|+00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|+000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|+000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|+000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|+000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|+000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|+000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|+00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|+00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|+00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|+00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|+00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|+Hello.class:6:+00000150:  00 01 b1 00 00 00 01 00  0a 00 00 00 06 00 01 00  |@A.@@@A@J@@@F@A@|+00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|+00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|+Hello.class:7:+Hello.class:8:+00000180:  04 b1 00 00 00 01 00 0a  00 00 00 0a 00 02 00 00  |D.@@@A@J@@@J@B@@|+00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|+Hello.java:1:import java.lang.*;+Hello.java:2:+Hello.java:3:public class Hello // prints a Hello World! greeting+Hello.java:4:{ public static void main(String[] arg)+Hello.java:5:  { System.out.println("Hello World!");+Hello.java:6:  }+Hello.java:7:}+Hello.pdf:1:%PDF-1.3+Hello.pdf:2:+00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|+00000010:  f3 a0 d0 c4 c6 0a -- --  -- -- -- -- -- -- -- --  |.....J----------|+Hello.pdf:3:4 0 obj+Hello.pdf:4:<< /Length 5 0 R /Filter /FlateDecode >>+Hello.pdf:5:stream+Hello.pdf:6:+00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|+Hello.pdf:7:+00000050:  45 8e bb 0a 02 31 14 44  7b bf e2 94 5a 98 bd 89  |E..JB1TD{...Z...|+00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|+00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|+Hello.pdf:8:+00000080:  e2 a9 12 f3 99 90 5c 4c  59 0a 9f 89 07 6f 86 6b  |..R...\LYJ..Go.k|+00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|+000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|+000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|+000000c0:  37 b5 37 e3 17 4e ff 20  a5 0a -- -- -- -- -- --  |7.7.WN. .J------|+Hello.pdf:9:endstream+Hello.pdf:10:endobj+Hello.pdf:11:5 0 obj+Hello.pdf:12:123+Hello.pdf:13:endobj+Hello.pdf:14:2 0 obj+Hello.pdf:15:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]+Hello.pdf:16:>>+Hello.pdf:17:endobj+Hello.pdf:18:6 0 obj+Hello.pdf:19:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R+Hello.pdf:20:>> >>+Hello.pdf:21:endobj+Hello.pdf:22:9 0 obj+Hello.pdf:23:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>+Hello.pdf:24:stream+Hello.pdf:25:+00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|+00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|+00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|+00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|+00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|+Hello.pdf:26:+00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f 0a 11 5a  |H.*6/.....J5OJQZ|+00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|+00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|+00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|+00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|+000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|+000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|+000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|+000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|+000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|+000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|+00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|+00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|+00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|+00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|+00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|+00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|+00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|+00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|+00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|+00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|+000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|+000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|+000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|+000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|+000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |+Hello.pdf:27:+000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b 0a d0 70 d0 7c f4  |..Q...XM}.J.p.|.|+00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|+00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|+00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|+00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|+00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|+00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|+00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|+00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|+00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|+00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|+000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|+000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|+Hello.pdf:28:+000004c0:  59 92 d7 e4 fb f2 0a be  f7 e4 d5 a4 0d f9 67 79  |Y.....J.....M.gy|+000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|+000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|+000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|+00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|+00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|+00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|+00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|+00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|+00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|+Hello.pdf:29:+00000560:  0a 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |JK_.wFc..3..^C..|+00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|+00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|+00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|+000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|+000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|+000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|+000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|+000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|+000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|+00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|+00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|+00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|+00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|+Hello.pdf:30:+00000640:  6d 35 1a 0a 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |m5ZJT.LL.iV..w7.|+00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|+00000660:  ea 26 d1 7f b7 8f 93 34  0a -- -- -- -- -- -- --  |.&.~...4J-------|+Hello.pdf:31:endstream+Hello.pdf:32:endobj+Hello.pdf:33:10 0 obj+Hello.pdf:34:1116+Hello.pdf:35:endobj+Hello.pdf:36:7 0 obj+Hello.pdf:37:[ /ICCBased 9 0 R ]+Hello.pdf:38:endobj+Hello.pdf:39:3 0 obj+Hello.pdf:40:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>+Hello.pdf:41:endobj+Hello.pdf:42:11 0 obj+Hello.pdf:43:<< /Type /Catalog /Pages 3 0 R >>+Hello.pdf:44:endobj+Hello.pdf:45:8 0 obj+Hello.pdf:46:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor+Hello.pdf:47:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602+Hello.pdf:48:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602+Hello.pdf:49:0 0 602 ] >>+Hello.pdf:50:endobj+Hello.pdf:51:12 0 obj+Hello.pdf:52:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox+Hello.pdf:53:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729+Hello.pdf:54:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R+Hello.pdf:55:>>+Hello.pdf:56:endobj+Hello.pdf:57:13 0 obj+Hello.pdf:58:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>+Hello.pdf:59:stream+Hello.pdf:60:+00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|+00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|+000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|+000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|+Hello.pdf:61:+000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 0a f8  |.+E]I.T.b#E..BJ.|+000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|+000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|+000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|+00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|+00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|+00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|+00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|+00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|+00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|+00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|+00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|+00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|+00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|+00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|+00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|+00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|+00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|+00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|+00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|+00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|+00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|+00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|+00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|+00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|+00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|+00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|+00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|+00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|+00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|+00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|+Hello.pdf:62:+00000bb0:  e1 ea 04 f9 61 0a 3e a8  c0 91 41 68 62 a1 69 10  |..D.aJ>...Ahb.iP|+00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|+00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||+Hello.pdf:63:+Hello.pdf:64:+00000be0:  b2 51 e1 2f 0a ef 54 60  9f c2 db 0a 7f 56 d8 bb  |.Q./J.T`...J~V..|+00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|+00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|+00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|+00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|+00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|+Hello.pdf:65:+00000c40:  81 ab f8 bd c2 8b 0a bf  4b c2 36 85 17 9e b7 c9  |......J.K.6.W...|+00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|+00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|+Hello.pdf:66:+00000c70:  a6 cb a7 0a f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |...J..SN.d:.p.7.|+00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|+00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|+00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|+00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|+00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|+00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|+Hello.pdf:67:+00000ce0:  0f 2a ac 70 e2 57 0a cb  15 1e 70 0e 93 0f 4c c2  |O*.p.WJ.U^pN.OL.|+Hello.pdf:68:+00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 0a 54 74 c4  |/U*....Ur...JTt.|+Hello.pdf:69:+Hello.pdf:70:+00000d00:  fd 0a e5 36 fc 42 61 89  c2 3d 0a 8b cb ac 72 b1  |.J.6.Ba..=J...r.|+00000d10:  1d 8b 23 82 02 47 f5 32  2b ca 1a f4 45 49 58 14  |].#.BG.2+.Z.EIXT|+00000d20:  d0 17 2a dc ad b0 40 a1  74 fe 24 59 5a 8b f9 25  |.W*...@.t.$YZ..%|+Hello.pdf:71:+00000d30:  dd e4 fc 49 28 e9 86 79  0a 77 e5 e2 4e 85 b9 b9  |...I(..yJw..N...|+00000d40:  28 6e c5 9c 3a cc 56 28  52 28 54 98 35 b3 a3 9c  |(n..:.V(R(T.5...|+00000d50:  a5 30 93 1c 72 66 47 cc  50 98 ae 70 87 c2 ed 53  |.0.\rfG.P..p...S|+00000d60:  12 e4 ed 36 4c 2b c4 6d  fb 30 95 85 a9 2e 4c 49  |R..6L+.m.0....LI|+00000d70:  00 3f d1 41 17 6e 55 f8  b9 c2 2d 19 e9 f2 96 5c  |@?.AWnU...-Y...\|+00000d80:  4c 56 98 a4 30 51 61 42  05 c6 2b dc ec c2 38 85  |LV..0QaBE.+...8.|+00000d90:  b1 c2 2f c7 2a dc 54 87  31 dd 70 e3 e8 34 79 63  |../.*.T.1.p..4yc|+00000da0:  7f 8c 1e 9e 24 47 a7 61  54 41 9a 1c a5 30 92 a5  |~.^.$G.aTA.\.0..|+00000db0:  91 85 18 c1 d2 88 3a 14  a4 21 9f 81 fc fe 18 3e  |..X...:T.!....X>|+00000dc0:  cc 29 87 27 61 78 44 0b  04 e2 f4 61 43 ed 72 98  |.).'axDKD..aC.r.|+00000dd0:  13 c3 22 1a b1 34 34 60  93 43 ed 18 1a 11 0d 2c  |S."Z.44`.C.XZQM,|+00000de0:  05 86 58 65 c0 86 40 44  54 b2 34 c4 1a 27 87 58  |E.Xe..@DT.4.Z'.X|+Hello.pdf:72:+00000df0:  31 24 22 02 81 42 fd 67  0a 83 39 84 c1 ad b8 41  |1$"B.B.gJ.9....A|+00000e00:  e1 fa 6e 18 a4 30 90 0b  3c b0 10 03 7a b7 97 03  |..nX.0.K<.PCz..C|+00000e10:  c6 a0 bf 42 3f bf 4b f6  53 e8 3b 06 7d 7a b5 97  |...B?.K.S.;F}z..|+00000e20:  7d c6 20 8f 87 3c 85 5c  56 cc 55 e8 cd d3 bd db  |}. ..<.\V.U.....|+00000e30:  a3 57 7b e4 30 97 93 86  9e 71 a9 b2 67 1d fc d9  |.W{.0....q..g]..|+00000e40:  c9 d2 ef 82 3f a2 19 6e  b3 1d 4e 99 9d 8c 6c 23  |....?.Yn.]N...l#|+00000e50:  dc 5a 3d ab 87 4f 66 29  f4 60 cd 1e 3e 74 d7 06  |.Z=..Of).`.^>t.F|+Hello.pdf:73:+Hello.pdf:74:+00000e60:  c9 ee 0a dd 14 ba 2a 74  b1 c3 97 3a 4c fa 0a 70  |..J.T.*t...:L.Jp|+00000e70:  9d 1d 5e 85 ce 76 bb ec  ac e0 71 fb a5 a7 02 6e  |.]^..v....q...Bn|+00000e80:  3f 3a 8d 41 47 f6 dc 51  a1 83 42 26 d7 36 53 21  |?:.AG..Q..B&.6S!|+00000e90:  83 ef 4a 46 3a da 2b a4  2b a4 29 b4 63 0b ed 46  |..JF:.+.+.).cK.F|+00000ea0:  20 35 c5 2f 53 87 21 c5  e5 90 29 7e b8 1c 48 66  | 5./S.!...)~.\Hf|+00000eb0:  bd 64 17 92 78 7d 92 82  93 33 77 0e 83 83 3d 38  |.dW.x}...3wN..=8|+00000ec0:  9c 70 44 6b 67 b7 59 a5  dd 0e 7b b4 76 b6 c4 78  |.pDkg.Y..N{.v..x|+00000ed0:  69 b3 c2 16 ad 5d 22 d7  2e 31 1e 89 5c bb 1d ba  |i..V.]"..1^.\.].|+Hello.pdf:75:+00000ee0:  35 0e 56 e3 d9 ea af 27  28 c4 73 26 f1 0a 71 a9  |5NV....'(.s&.Jq.|+Hello.pdf:76:+00000ef0:  88 75 20 46 c1 c2 a6 2d  0a d2 05 70 72 68 85 c6  |.u F...-J.Eprh..|+Hello.pdf:77:+00000f00:  80 36 08 82 03 10 7e 90  03 22 22 0a 57 ac 16 59  |.6H.CP~.C""JW.VY|+00000f10:  ff 3f 8d fe c7 53 e1 4f  67 84 1a cd be 4d ac e5  |.?...S.Og.Z..M..|+00000f20:  d1 d8 47 44 e8 21 6d 19  7f a5 bf bf 22 b4 87 75  |..GD.!mY~..."..u|+00000f30:  34 53 2f 22 1a c5 4a b1  93 f9 ad bc b7 68 a4 e5  |4S/"Z.J......h..|+00000f40:  74 5e c4 e3 6d d1 9f b9  7a 5e 1b d4 3d 8c d6 d0  |t^..m...z^[.=...|+00000f50:  66 73 75 0d 4e d3 62 ec  a2 43 f4 0e 1d 63 ee b4  |fsuMN.b..C.N]c..|+00000f60:  18 08 5e 2b 0e 91 47 9c  60 3f 2b 7f f0 a1 a1 9e  |XH^+N.G.`?+~....|+00000f70:  a5 3d 4c cb 51 8f a0 e8  24 4a 68 8b 78 89 2d 96  |.=L.Q...$Jh.x.-.|+00000f80:  53 44 94 d2 32 8d 47 6d  22 5b de af 1f 64 74 3f  |SD..2.Gm"[.._dt?|+00000f90:  3d c4 d7 a3 b4 85 4a 99  37 32 58 ce f1 7f 4c 3b  |=.....J.72X..~L;|+00000fa0:  68 15 5d a0 0d da 19 9a  c2 fc 4e da cb f1 28 fe  |hU].M.Y...N...(.|+00000fb0:  fc 9a b9 88 26 6a 61 4b  db b4 c1 da 6c d6 db cb  |....&jaK....l...|+00000fc0:  d6 36 d1 26 b1 9c 9a 68  91 4e fc 29 57 74 4a 36  |.6.&...h.N.)WtJ6|+00000fd0:  69 59 6c 75 07 67 40 34  93 36 cb 26 b9 c1 a8 07  |iYluGg@4.6.&...G|+00000fe0:  8f 4d f2 1c cf 10 75 b0  44 2c ae 18 2f 67 61 d4  |.M.\.Pu.D,.X/ga.|+00000ff0:  6e ab d8 25 7a 6b e3 e8  10 af 2f a7 c9 b8 0d 77  |n..%zk..P./...Mw|+00001000:  e3 98 58 a1 7b f5 25 38  43 35 1a 61 3a dd 49 07  |..X.{.%8C5Za:.IG|+00001010:  64 93 c5 45 35 31 5e aa  b1 cc 16 f7 e9 d3 cd ab  |d..E51^...V.....|+00001020:  9c ad 95 6b 4b f4 e9 62  1b 9d 61 9b 33 f1 1d cb  |...kK..b[.a.3.].|+00001030:  1e 8e 6c b3 99 31 d1 0e  6d a2 1c 27 c7 71 ce b3  |^.l..1.Nm.\'.q..|+00001040:  19 db 6c d2 9a 28 b5 38  68 3f 5a b9 ee 6b 35 25  |Y.l..(.8h?Z..k5%|+00001050:  46 e9 23 30 84 f3 29 d7  6f a2 0d f4 0c db ed ca  |F.#0..).o.M.L...|+00001060:  95 21 2a 45 5f f6 5e 4a  e5 72 75 f4 a2 6d 7c f9  |.!*E_.^J.ru..m|.|+00001070:  e5 6a d4 72 45 cd 6a 88  3c 6d 30 6d d6 66 8b 55  |.j.rE.j.<m0m.f.U|+00001080:  1c 6d 0b 57 b3 14 f9 d4  9f 7d 74 90 67 69 85 d8  |\mKW.T...}t.gi..|+00001090:  c1 71 53 4c 05 2d 92 4d  bc 55 24 ea 41 f4 5a 8c  |.qSLE-.M.U$.A.Z.|+000010a0:  45 ea fc f7 a6 6c b7 23  ac f9 46 17 86 03 13 82  |E....l.#..FW.CS.|+000010b0:  ee 7d 21 8f 3f fb 27 a2  db 11 e3 0e d3 f8 70 e2  |.}!.?.'..Q.N..p.|+000010c0:  7d ee c8 b5 6b e3 83 7a  86 0c 85 65 66 18 be d8  |}...k..z.L.efX..|+000010d0:  b0 ee f3 9e fa 4f 93 a7  fc d9 63 c6 07 dd 11 d1  |.....O....c.G.Q.|+000010e0:  ae 20 bf cd 6c c1 f4 7c  06 27 05 d9 03 ff 0c 98  |. ..l..|F'E.C.L.|+000010f0:  dd 15 30 16 05 46 87 a5  8f 7f a3 a7 87 dd b3 8a  |.U0VEF...~......|+00001100:  dd 55 8e 2a ef a0 2a 47  d1 20 3f ef ff b2 c7 30  |.U.*..*G. ?....0|+00001110:  19 1f 7c 59 88 47 42 11  71 6d 45 84 f2 3b bc ce  |Y_|Y.GBQqmE..;..|+00001120:  bb 48 dc 71 3b 4f c7 65  bb dd 05 73 f3 c3 62 3a  |.H.q;O.e..Es..b:|+00001130:  0b f1 d9 0c f4 f0 30 97  90 ed 1e c1 61 8e 98 18  |K..L..0...^.a..X|+00001140:  f4 86 dc 55 ee aa d1 85  55 ee 11 ee e2 19 85 1c  |...U....U.Q..Y.\|+00001150:  b7 39 f2 44 51 55 28 87  33 98 14 9c cb 74 72 d0  |.9.DQU(.3.T..tr.|+00001160:  13 0e 84 32 7e 60 8b 42  21 c3 bb d5 b0 c3 4b 58  |SN.2~`.B!.....KX|+00001170:  bd 2a c4 16 ee 6c b3 c0  a3 09 e5 5c 65 a5 c4 ec  |.*.V.l...I.\e...|+00001180:  31 ee 30 ba 8c 0f 4e 08  86 2b f3 33 c2 81 fc 50  |1.0..ONH.+.3...P|+00001190:  86 c7 e3 2e 08 37 8c 0f  86 1b f2 33 3c a1 10 6b  |....H7.O.[.3<.Pk|+000011a0:  d9 7e 88 94 23 ae 98 9b  d6 16 b3 9d 63 b6 f5 e0  |.~..#....V..c...|+Hello.pdf:78:+000011b0:  79 47 d4 0a 97 28 90 11  a6 50 55 95 61 73 52 d0  |yG.J.(.Q.PU.asR.|+000011c0:  eb 09 57 56 55 65 54 71  1e 6d 72 84 1a 7e 02 08  |.IWVUeTq^mr.Z~BH|+000011d0:  fa 29 10 68 03 22 64 d8  e0 4a 14 f0 f7 60 3c 1b  |.)PhC"d..JT..`<[|+000011e0:  e3 c1 eb c9 30 00 af c7  eb e1 38 43 f9 ec db 69  |....0@....8C...i|+000011f0:  dc 9a 02 8e d4 13 f2 f3  6e 9c 8a b9 af e4 5e ce  |..B..S..n.....^.|+00001200:  fd 9c c1 f3 b3 18 dd e7  f3 f9 82 cf 00 53 58 1e  |.....X......@SX^|+00001210:  45 dd fe 6d bf ce f0 7f  d9 b4 1f e9 c1 94 74 93  |E..m...~.._...t.|+00001220:  76 e1 67 77 3b 9d 14 99  fc af 2f 56 b5 7a b1 dc  |v.gw;.T.../V.z..|+00001230:  c2 a7 aa 18 ea b4 cb dc  f3 13 59 84 eb 55 11 2b  |...X.....SY..UQ+|+00001240:  97 6b 3a e5 bc 75 b8 b9  37 39 0e 37 1f 6e ee 95  |.k:..u..79N7_n..|+00001250:  ec f4 38 7d 1e a7 a7 58  a7 2b 8b 90 71 e5 0b 55  |..8}^..X.+..q.KU|+00001260:  1b 63 fb ee fc 42 4b 77  c3 ac 30 72 d0 47 f1 bf  |[c...BKw..0r.G..|+00001270:  20 81 6e 36 4e 15 7c 6f  73 f8 d6 71 b7 3a f8 58  | .n6NU|os..q.:.X|+00001280:  f4 1e 77 e6 c5 71 c6 58  96 3c ea dc 63 18 17 2c  |.^w..q.X.<..cXW,|+00001290:  c7 bd c7 6f 0b 43 41 e7  6e e1 1e 9f b3 93 a3 8a  |...oKCA.n.^.....|+000012a0:  a5 84 ac 5e bd 93 f3 d8  75 9e d3 cb d4 bb b2 51  |...^....u......Q|+000012b0:  eb de d8 78 f5 83 46 d9  74 f5 2d ed 86 d6 2c ed  |...x..F.t.-...,.|+000012c0:  9b ab 4e f6 af 51 f9 b5  cf f8 ad 51 4e 29 94 49  |..N..Q.....QN).I|+000012d0:  79 46 04 3b 19 74 b0 81  08 69 ec 21 93 3d 65 e6  |yFD;Yt..Hi.!.=e.|+000012e0:  f0 3b cf 42 89 0c ee a4  64 4a 37 47 a3 0e 86 17  |.;.B.L..dJ7G.N.W|+000012f0:  91 e2 49 b1 a4 e6 e5 f6  eb 9f 62 13 5e 37 39 1d  |..I.......bS^79]|+00001300:  94 97 9b 14 d3 53 78 3b  5b 62 f4 e9 57 3e 8b 7d  |...T.Sx;[b..W>.}|+00001310:  e3 a5 60 43 c9 dc 3d 53  d5 65 75 54 b8 cf 1d b9  |..`C..=S.euT..].|+00001320:  14 b6 ae 7d 78 c5 8b b1  5a f5 14 cb 17 fb 06 0c  |T..}x...Z.T.W.FL|+00001330:  7c 2d 2b 4b 0c 14 c9 c2  2a 02 ea 93 c7 ca 5e 08  ||-+KLT..*B....^H|+00001340:  cf 37 ea 72 8e eb 32 c5  d2 9e bd 76 8d 46 95 c8  |.7.r..2....v.F..|+00001350:  b7 d8 88 ca a8 43 dc 71  8e 48 e7 53 9e 11 51 22  |.....C.q.H.S.QQ"|+00001360:  c5 47 23 71 a5 5e 2f 52  bc 9d bb f4 75 7a fa 7a  |.G#q.^/R....uz.z|+00001370:  b4 03 53 43 1f 9c 79 f6  15 f5 91 38 21 d6 df bf  |.CSC_.y.U..8!...|+00001380:  f4 f1 43 6f e2 e2 1a a3  e6 1a ad e4 9c 47 71 ce  |..Co..Z..Z...Gq.|+00001390:  09 d4 8e bc 81 64 4b 75  12 55 5b eb 93 36 a6 c5  |I....dKuRU[..6..|+000013a0:  25 d9 f3 91 94 f2 b3 34  c7 85 e6 2b c6 2d fc fc  |%......4...+.-..|+000013b0:  42 b3 e3 6c 2f d1 d9 92  e2 32 72 ec db a7 4b d7  |B..l/....2r...K.|+000013c0:  dc 24 a7 43 f3 76 d6 9c  8e 24 ad b8 7a cd 9a ea  |.$.C.v...$..z...|+000013d0:  d5 6b d6 ac 3e 73 a9 e5  ab 33 2d 2d 38 71 f4 48  |.k..>s...3--8q.H|+000013e0:  d3 b1 63 4d 47 8e 6e 56  ef ab 4f d5 29 75 48 f8  |..cMG.nV..O.)uH.|+000013f0:  f9 b3 d3 51 f4 34 fc 9a  ed da 52 f3 39 35 4e a7  |...Q.4....R.95N.|+00001400:  3f 6e 92 c5 2c 7e 7e 6f  a6 89 cc 09 3e 3a 46 75  |?n..,~~o...I>:Fu|+00001410:  2c c6 0b 72 e4 84 c9 63  a7 8c c8 1a 5b 34 7f 5e  |,.Kr...c...Z[4~^|+00001420:  a9 7f 62 d1 9c c5 f3 66  2c 24 fa 17 20 2d 06 e4  |.~b....f,$.W -F.|+00001430:  0a -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |J---------------|+Hello.pdf:79:endstream+Hello.pdf:80:endobj+Hello.pdf:81:14 0 obj+Hello.pdf:82:2734+Hello.pdf:83:endobj+Hello.pdf:84:15 0 obj+Hello.pdf:85:(Hello)+Hello.pdf:86:endobj+Hello.pdf:87:16 0 obj+Hello.pdf:88:(Mac OS X 10.12.6 Quartz PDFContext)+Hello.pdf:89:endobj+Hello.pdf:90:17 0 obj+Hello.pdf:91:(TextEdit)+Hello.pdf:92:endobj+Hello.pdf:93:18 0 obj+Hello.pdf:94:(D:20200124010711Z00'00')+Hello.pdf:95:endobj+Hello.pdf:96:19 0 obj+Hello.pdf:97:()+Hello.pdf:98:endobj+Hello.pdf:99:20 0 obj+Hello.pdf:100:[ ]+Hello.pdf:101:endobj+Hello.pdf:102:1 0 obj+Hello.pdf:103:<< /Title 15 0 R /Producer 16 0 R /Creator 17 0 R /CreationDate 18 0 R /ModDate+Hello.pdf:104:18 0 R /Keywords 19 0 R /AAPL:Keywords 20 0 R >>+Hello.pdf:105:endobj+Hello.pdf:106:xref+Hello.pdf:107:0 21+Hello.pdf:108:0000000000 65535 f +Hello.pdf:109:0000005392 00000 n +Hello.pdf:110:0000000238 00000 n +Hello.pdf:111:0000001714 00000 n +Hello.pdf:112:0000000022 00000 n +Hello.pdf:113:0000000219 00000 n +Hello.pdf:114:0000000342 00000 n +Hello.pdf:115:0000001679 00000 n +Hello.pdf:116:0000001847 00000 n +Hello.pdf:117:0000000439 00000 n +Hello.pdf:118:0000001658 00000 n +Hello.pdf:119:0000001797 00000 n +Hello.pdf:120:0000002110 00000 n +Hello.pdf:121:0000002362 00000 n +Hello.pdf:122:0000005186 00000 n +Hello.pdf:123:0000005207 00000 n +Hello.pdf:124:0000005231 00000 n +Hello.pdf:125:0000005284 00000 n +Hello.pdf:126:0000005311 00000 n +Hello.pdf:127:0000005353 00000 n +Hello.pdf:128:0000005372 00000 n +Hello.pdf:129:trailer+Hello.pdf:130:<< /Size 21 /Root 11 0 R /Info 1 0 R /ID [ <8db88d3335070bd9583341583cf769a3>+Hello.pdf:131:<8db88d3335070bd9583341583cf769a3> ] >>+Hello.pdf:132:startxref+Hello.pdf:133:5536+Hello.pdf:134:%%EOF+Hello.sh:1:#!/bin/sh+Hello.sh:2:echo "Hello World!"+Hello.txt:1:Hello\ No newline at end of file

tests/out/Hello_-W-o.out

@@ -1,464 +1,464 @@-Hello.bat:#!/bin/sh-Hello.bat:echo "Hello World!"-Hello.class:-00000000:  ca fe ba be 00 00 00 34  00 1d -- -- -- -- -- --  |....@@@4@]------|-Hello.class:-00000000:  -- -- -- -- -- -- -- --  -- -- -- 00 06 00 0f 09  |-----------@F@OI|-00000010:  00 10 00 11 08 00 12 --  -- -- -- -- -- -- -- --  |@P@QH@R---------|-Hello.class:-00000010:  -- -- -- -- -- -- -- --  00 13 00 14 07 00 15 07  |--------@S@TG@UG|-00000020:  00 16 01 00 06 3c 69 6e  69 74 3e 01 00 03 28 29  |@VA@F<init>A@C()|-00000030:  56 01 00 04 43 6f 64 65  01 00 0f 4c 69 6e 65 4e  |VA@DCodeA@OLineN|-00000040:  75 6d 62 65 72 54 61 62  6c 65 01 00 04 6d 61 69  |umberTableA@Dmai|-00000050:  6e 01 00 16 28 5b 4c 6a  61 76 61 2f 6c 61 6e 67  |nA@V([Ljava/lang|-00000060:  2f 53 74 72 69 6e 67 3b  29 56 01 00 -- -- -- --  |/String;)VA@----|-Hello.class:-00000060:  -- -- -- -- -- -- -- --  -- -- -- -- -- 53 6f 75  |-------------Sou|-00000070:  72 63 65 46 69 6c 65 01  00 -- -- -- -- -- -- --  |rceFileA@-------|-Hello.class:-00000070:  -- -- -- -- -- -- -- --  -- -- 48 65 6c 6c 6f 2e  |----------Hello.|-00000080:  6a 61 76 61 0c 00 07 00  08 07 00 17 0c 00 18 00  |javaL@G@HG@WL@X@|-00000090:  19 01 00 0c 48 65 6c 6c  6f 20 57 6f 72 6c 64 21  |YA@LHello World!|-000000a0:  07 00 1a 0c 00 1b 00 1c  01 00 05 48 65 6c 6c 6f  |G@ZL@[@\A@EHello|-000000b0:  01 00 10 6a 61 76 61 2f  6c 61 6e 67 2f 4f 62 6a  |A@Pjava/lang/Obj|-000000c0:  65 63 74 01 00 10 6a 61  76 61 2f 6c 61 6e 67 2f  |ectA@Pjava/lang/|-000000d0:  53 79 73 74 65 6d 01 00  03 6f 75 74 01 00 15 4c  |SystemA@CoutA@UL|-000000e0:  6a 61 76 61 2f 69 6f 2f  50 72 69 6e 74 53 74 72  |java/io/PrintStr|-000000f0:  65 61 6d 3b 01 00 13 6a  61 76 61 2f 69 6f 2f 50  |eam;A@Sjava/io/P|-00000100:  72 69 6e 74 53 74 72 65  61 6d 01 00 07 70 72 69  |rintStreamA@Gpri|-00000110:  6e 74 6c 6e 01 00 15 28  4c 6a 61 76 61 2f 6c 61  |ntlnA@U(Ljava/la|-00000120:  6e 67 2f 53 74 72 69 6e  67 3b 29 56 00 21 00 05  |ng/String;)V@!@E|-00000130:  00 06 00 00 00 00 00 02  00 01 00 07 00 08 00 01  |@F@@@@@B@A@G@H@A|-00000140:  00 09 00 00 00 1d 00 01  00 01 00 00 00 05 2a b7  |@I@@@]@A@A@@@E*.|-00000150:  00 01 b1 00 00 00 01 00  -- -- -- -- -- -- -- --  |@A.@@@A@--------|-Hello.class:-00000150:  -- -- -- -- -- -- -- --  -- 00 00 00 06 00 01 00  |---------@@@F@A@|-00000160:  00 00 02 00 09 00 0b 00  0c 00 01 00 09 00 00 00  |@@B@I@K@L@A@I@@@|-00000170:  25 00 02 00 01 00 00 00  09 b2 00 02 12 03 b6 00  |%@B@A@@@I.@BRC.@|-00000180:  04 b1 00 00 00 01 00 --  -- -- -- -- -- -- -- --  |D.@@@A@---------|-Hello.class:-00000180:  -- -- -- -- -- -- -- --  00 00 00 -- -- -- -- --  |--------@@@-----|-Hello.class:-00000180:  -- -- -- -- -- -- -- --  -- -- -- -- 00 02 00 00  |------------@B@@|-00000190:  00 04 00 08 00 05 00 01  00 0d 00 00 00 02 00 0e  |@D@H@E@A@M@@@B@N|-Hello.java:import java.lang.*;-Hello.java:-Hello.java:public class Hello // prints a Hello World! greeting-Hello.java:{ public static void main(String[] arg)-Hello.java:  { System.out.println("Hello World!");-Hello.java:  }-Hello.java:}-Hello.pdf:%PDF-1.3-Hello.pdf:-00000000:  -- -- -- -- -- -- -- --  -- 25 c4 e5 f2 e5 eb a7  |---------%......|-00000010:  f3 a0 d0 c4 c6 -- -- --  -- -- -- -- -- -- -- --  |.....-----------|-Hello.pdf:4 0 obj-Hello.pdf:<< /Length 5 0 R /Filter /FlateDecode >>-Hello.pdf:stream-Hello.pdf:-00000040:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 78 01  |--------------xA|-00000050:  45 8e bb -- -- -- -- --  -- -- -- -- -- -- -- --  |E..-------------|-Hello.pdf:-00000050:  -- -- -- -- 02 31 14 44  7b bf e2 94 5a 98 bd 89  |----B1TD{...Z...|-00000060:  79 98 56 11 6c 17 2e f8  01 61 2d 64 d7 65 cd ff  |y.VQlW..Aa-d.e..|-00000070:  83 17 2c ac 86 99 39 0c  b3 31 b2 51 02 b9 46 97  |.W,...9L.1.QB.F.|-00000080:  e2 a9 12 f3 99 90 5c 4c  59 -- -- -- -- -- -- --  |..R...\LY-------|-Hello.pdf:-00000080:  -- -- -- -- -- -- -- --  -- -- 9f 89 07 6f 86 6b  |----------..Go.k|-00000090:  f7 b4 8e d0 9b e1 e2 6a  a9 52 6a b2 40 38 fe ad  |.......j.Rj.@8..|-000000a0:  ed 94 20 bb b6 70 51 a3  44 c4 a3 0d ef 7f a0 69  |.. ..pQ.D..M.~.i|-000000b0:  c2 0b ba 30 a8 7a ac 7c  b2 bf 4f f3 bc 1e d0 17  |.K.0.z.|..O..^.W|-000000c0:  37 b5 37 e3 17 4e ff 20  a5 -- -- -- -- -- -- --  |7.7.WN. .-------|-Hello.pdf:endstream-Hello.pdf:endobj-Hello.pdf:5 0 obj-Hello.pdf:123-Hello.pdf:endobj-Hello.pdf:2 0 obj-Hello.pdf:<< /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 612 792]-Hello.pdf:>>-Hello.pdf:endobj-Hello.pdf:6 0 obj-Hello.pdf:<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R >> /Font << /TT1 8 0 R-Hello.pdf:>> >>-Hello.pdf:endobj-Hello.pdf:9 0 obj-Hello.pdf:<< /Length 10 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >>-Hello.pdf:stream-Hello.pdf:-00000200:  -- -- -- -- -- -- -- --  -- -- -- -- 78 01 85 55  |------------xA.U|-00000210:  5d 68 1c 55 14 3e bb 73  67 03 12 07 1f b4 0d 2d  |]h\UT>.sgCRG_.M-|-00000220:  b4 83 3f 6d 09 e9 32 89  56 13 8b b5 db 4d ba 49  |..?mI.2.VS...M.I|-00000230:  13 b7 eb 66 53 9b 2a ca  74 76 36 3b cd 64 66 9c  |S..fS.*.tv6;.df.|-00000240:  99 dd 26 a1 4f a5 e0 9b  16 04 e9 ab a0 3e c6 82  |..&.O...VD...>..|-00000250:  08 b6 2a 36 2f f6 a5 a5  c5 92 4a 35 0f -- -- --  |H.*6/.....J5O---|-Hello.pdf:-00000250:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- 11 5a  |--------------QZ|-00000260:  8c 20 28 7d 52 f0 3b 33  db 64 76 41 32 c3 9d f9  |. (}R.;3.dvA2...|-00000270:  ee b9 e7 9e 7b ce 77 ee  b9 97 a8 eb 6f dd f3 ec  |....{.w.....o...|-00000280:  b4 4a 34 e7 84 7e a1 9c  9b 3e 39 7d 4a ed ba 4d  |.J4..~...>9}J..M|-00000290:  69 52 a8 9b f0 e8 46 e0  e5 4a a5 09 c6 8e eb 98  |iR....F..J.I....|-000002a0:  fc 6f 7f 1e de a5 14 4b  ee ec 67 5b ed 63 5b f6  |.o~^..TK..g[.c[.|-000002b0:  e4 aa 19 18 d0 ba 86 e6  56 03 63 8e 28 a5 11 65  |..YX....VCc.(.Qe|-000002c0:  6a 86 e7 87 44 5d 97 20  1f 3c 1b 7a 8c 6f 03 3f  |j...D]. _<[z.oC?|-000002d0:  39 5b 29 e7 81 d7 80 95  d6 5c 40 7a aa 60 3a a6  |9[)......\@z.`:.|-000002e0:  6f 19 6a c1 d7 17 d4 92  ef d6 2c 3b e9 eb 56 e3  |oYj..W....,;..V.|-000002f0:  6c 63 cb 67 ce 6e b0 af  fc ec 46 eb 0e 66 27 c7  |lc.g.n....F.Nf'.|-00000300:  f1 ef 85 cf 17 4c 67 6a  12 78 1f f0 92 a1 8f 30  |....WLgjRx_....0|-00000310:  ee 03 be db b4 4e 14 63  9c 4e 7b e1 91 72 ac 9f  |.C...NTc.N{..r..|-00000320:  ce 36 66 a7 72 2d f9 c9  9a 7f 74 aa 25 bf 50 6f  |.6f.r-...~t.%.Po|-00000330:  8c 32 ce 12 a5 97 16 eb  95 37 80 9f 00 5e 75 4e  |.2.R..V..7..@^uN|-00000340:  17 8f b7 f4 d7 67 dd 71  b6 d3 43 24 f5 18 41 fe  |W....g.q..C$.XA.|-00000350:  14 f0 b3 c0 5a dd 1c e3  3c a9 c0 15 df 2d b3 3e  |T...Z.\.<..U.-.>|-00000360:  cb c3 aa 39 3c 02 fc 32  f0 25 2b 1c ab 00 c3 be  |...9<B.2.%+\.@..|-00000370:  f4 43 d0 9c 64 39 b0 a0  c5 7a 9e fd c4 5a 22 7b  |.C..d9...z...Z"{|-00000380:  46 3f 56 02 de 06 7c c8  b4 0b bc 16 ec 88 8a 17  |F?VB.F|..K.V...W|-00000390:  96 d8 e6 20 f0 bc 63 17  79 2d c4 2e 2e 9b 41 14  |... ..cWy-....AT|-000003a0:  2f 62 17 3f 85 f5 ca 68  ac 2f a7 43 bf c2 73 9f  |/bW?...h./.C..s.|-000003b0:  26 92 f7 d4 ac a3 63 c0  e0 44 1e ad fb a3 2c 87  |&.....c..D^...,.|-000003c0:  3f 72 e8 d9 d1 de 7a 11  78 c9 6f 94 39 f6 3d c0  |?r....zQx.o.9.=.|-000003d0:  6b ba 3f 52 00 86 cd cc  63 55 7d 98 79 7e 01 78  |k.?R@...cU}.y~Ax|-000003e0:  80 4e a4 74 32 c9 a5 d3  f8 1a e4 d0 bf 88 37 20  |.N.t2....Z....7 |-000003f0:  8b 9a 11 f2 c8 c7 58 0d  7d 9b -- -- -- -- -- --  |..Q...XM}.------|-Hello.pdf:-000003f0:  -- -- -- -- -- -- -- --  -- -- -- d0 70 d0 7c f4  |-----------.p.|.|-00000400:  0c 68 15 80 74 5a 00 2a  25 b4 4c f4 58 27 9e a3  |LhU.tZ@*%.L.X'..|-00000410:  52 15 3d 95 66 a2 59 41  84 d8 ca fd a8 6f 50 7e  |RU=.f.YA.....oP~|-00000420:  d7 a7 d4 80 b4 4e eb 90  d6 81 5e a3 5f 22 c9 3c  |.....N....^._".<|-00000430:  fd 4a 73 e8 e7 21 6d 60  6c a6 c3 6e 1e 5e 38 b4  |.Js..!m`l..n^^8.|-00000440:  08 0f d8 13 b6 f9 a0 65  d3 15 db 85 26 9e 47 3b  |HO.S...e.U..&.G;|-00000450:  28 26 c4 2b 62 50 0c 91  2a 5e 15 87 c5 21 31 0c  |(&.+bPL.*^U..!1L|-00000460:  e9 90 38 18 cd 89 bd 4f  fa ce 7e 3e d8 b0 f4 2e  |..8X...O..~>....|-00000470:  d6 4d fa be 0c 0e 42 ac  67 c3 33 07 ac 70 34 01  |.M..LNB.g.3G.p4A|-00000480:  3c f8 07 eb ce 46 9a 09  b6 2e ee 68 ec f3 bc 8f  |<.G..F.I...h....|-00000490:  de 3f ef bf 63 19 b7 3e  f8 b3 8d bd 00 fa 31 27  |.?..cY.>....@.1'|-000004a0:  bf c1 a2 0b 6b 26 25 e6  5e 3f f7 4d 4f c2 43 75  |...Kk&%.^?.MO.Cu|-000004b0:  45 7c f5 d6 9d ee eb e7  e8 78 32 4b 51 de aa 9d  |E|.......x2KQ...|-000004c0:  59 92 d7 e4 fb f2 -- --  -- -- -- -- -- -- -- --  |Y.....----------|-Hello.pdf:-000004c0:  -- -- -- -- -- -- -- be  f7 e4 d5 a4 0d f9 67 79  |-------.....M.gy|-000004d0:  15 ef bd b6 5c 3d ca 0b  ff 93 b9 cd 21 46 3b 92  |U...\=.K....!F;.|-000004e0:  cd 41 ce 3c 9b 51 b4 71  c6 1b c0 21 b8 a9 45 73  |.A.<.Q.q.[.!..Es|-000004f0:  f6 b7 59 4c b2 e9 b6 62  b4 60 c9 42 94 9d ab b8  |..YL...b.`.B....|-00000500:  ff cb 09 f3 c3 3c b7 b1  52 73 2e ee f0 bc b7 3f  |..I..<..Rs.....?|-00000510:  63 36 cd f7 8a 0f 8b 74  be 4f bb ac ad 6b 9f 68  |c6...O.t.O...k.h|-00000520:  3f 6a 7f 68 2b da c7 40  bf 4b 1f 4a 5f 4a df 4a  |?j~h+..@.K_J_J.J|-00000530:  57 a4 ab d2 0d 52 a5 6b  d2 b2 f4 9d f4 bd f4 b9  |W...MR.k........|-00000540:  f4 35 7a 5f 40 ba 2c 5d  e9 d8 49 71 ec 1b bb 07  |.5z_@.,]..Iq.[.G|-00000550:  7e c6 7b d6 68 ed 30 66  86 b3 14 10 f3 c2 da cc  |~.{.h.0f..TP....|-Hello.pdf:-00000560:  -- 4b 1f f1 77 06 63 9b  f9 33 a1 d5 5e 03 9d bb  |-K_.wFc..3..^C..|-00000570:  7f 63 2d e5 88 b2 53 79  46 19 56 76 2b cf 29 13  |~c-...SyFYVv+.)S|-00000580:  4a af 72 40 39 ac 6c 57  06 d0 fa 95 51 65 2f 46  |J.r@9.lWF...Qe/F|-00000590:  76 6e b0 64 63 3d ce 80  85 7f 92 67 8b a6 23 ae  |vn.dc=...~.g..#.|-000005a0:  e2 3c b1 57 75 b0 e7 c3  4b 1d ef a6 5f 5c c3 d6  |.<.Wu...K].._\..|-000005b0:  86 35 d8 49 3d 0e 9e d9  da a6 0e af 11 57 bf 15  |.5.I=N....N.QW.U|-000005c0:  55 63 bc 3b 5d 9c 06 3a  4d 21 62 8b ce 22 72 1f  |Uc.;].F:M!b.."r_|-000005d0:  3a 9c 1f 27 aa fe ce d9  5c 93 38 35 52 6f e2 94  |:._'....\.85Ro..|-000005e0:  b0 c4 2e d1 2f c6 5a 35  98 13 07 50 85 e3 6d f5  |..../.Z5.SGP..m.|-000005f0:  38 c8 55 9a 19 c9 0c 67  72 a4 66 7a 33 43 99 fe  |8.U.Y.Lgr.fz3C..|-00000600:  cc 31 c6 51 ac d1 f9 92  d9 8b d1 21 7c 47 12 de  |.1.Q.......!|GR.|-00000610:  33 cb 31 ff 9b 35 c4 67  18 ef 1d e6 a8 09 6c a3  |3.1..5.gX.]..Il.|-00000620:  87 5b 2b 34 e7 71 df 11  e5 5d 6f c1 b7 66 ea a1  |.[+4.q.Q.]o..f..|-00000630:  3a a0 69 2f a9 39 5c af  a6 3a e6 18 d9 3e 55 b7  |:.i/.9\..:.X.>U.|-00000640:  6d 35 1a -- -- -- -- --  -- -- -- -- -- -- -- --  |m5Z-------------|-Hello.pdf:-00000640:  -- -- -- -- 54 df 0c 4c  bf 69 56 b3 c4 77 37 cf  |----T.LL.iV..w7.|-00000650:  23 fa eb f5 e8 4e 4e 6d  bb 61 34 fc 66 2c a3 54  |#....NNm.a4.f,.T|-00000660:  ea 26 d1 7f b7 8f 93 34  -- -- -- -- -- -- -- --  |.&.~...4--------|-Hello.pdf:endstream-Hello.pdf:endobj-Hello.pdf:10 0 obj-Hello.pdf:1116-Hello.pdf:endobj-Hello.pdf:7 0 obj-Hello.pdf:[ /ICCBased 9 0 R ]-Hello.pdf:endobj-Hello.pdf:3 0 obj-Hello.pdf:<< /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >>-Hello.pdf:endobj-Hello.pdf:11 0 obj-Hello.pdf:<< /Type /Catalog /Pages 3 0 R >>-Hello.pdf:endobj-Hello.pdf:8 0 obj-Hello.pdf:<< /Type /Font /Subtype /TrueType /BaseFont /GQTMZF+Menlo-Regular /FontDescriptor-Hello.pdf:12 0 R /Encoding /MacRomanEncoding /FirstChar 72 /LastChar 111 /Widths [ 602-Hello.pdf:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 602-Hello.pdf:0 0 602 ] >>-Hello.pdf:endobj-Hello.pdf:12 0 obj-Hello.pdf:<< /Type /FontDescriptor /FontName /GQTMZF+Menlo-Regular /Flags 33 /FontBBox-Hello.pdf:[-558 -375 718 1041] /ItalicAngle 0 /Ascent 928 /Descent -236 /CapHeight 729-Hello.pdf:/StemV 99 /XHeight 547 /StemH 83 /AvgWidth 602 /MaxWidth 602 /FontFile2 13 0 R-Hello.pdf:>>-Hello.pdf:endobj-Hello.pdf:13 0 obj-Hello.pdf:<< /Length 14 0 R /Length1 4064 /Filter /FlateDecode >>-Hello.pdf:stream-Hello.pdf:-00000980:  -- -- 78 01 dd 57 7b 78  54 c5 15 3f 73 7f 77 36  |--xA.W{xT.U?s~w6|-00000990:  af cd 3e 92 4d 48 48 80  5d d6 e5 95 2c 81 84 b7  |..>.MHH.]...,...|-000009a0:  52 16 48 78 88 20 2f eb  2e 88 f2 48 20 28 21 08  |RVHx. /....H (!H|-000009b0:  41 b4 31 90 4a 51 09 c1  40 85 08 48 7d 15 51 a9  |A.1.JQI.@.HH}UQ.|-000009c0:  b5 2b 45 5d 09 c4 54 a4  62 23 45 84 a0 02 -- --  |.+E]I.T.b#E..B--|-Hello.pdf:-000009c0:  -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- f8  |---------------.|-000009d0:  a2 68 8a 14 21 d8 00 43  cf bd 1b fd 3e ed d7 ef  |.h.T!.@C..[.>...|-000009e0:  eb bf ed dc 9d 33 e7 fc  e6 cc 79 dd bb f7 ce 94  |.....3....y.....|-000009f0:  2d 5c 5c 44 56 aa 24 50  60 56 c9 8c 05 64 36 eb  |-\\DV.$P`V..Ed6.|-00000a00:  49 1e 8a 67 dd 53 e6 36  45 8a bd 97 48 cb 9d bd  |I^.g.S.6E...H...|-00000a10:  60 4e 49 54 8e 7f 91 e5  4e 73 e6 dd 37 3b 2a 27  |`NIT.~..Ns..7;*'|-00000a20:  4e 66 79 40 71 d1 8c c2  a8 4c 57 78 ec 57 cc 40  |Nfy@q....LWx.W.@|-00000a30:  54 16 7d 78 bc ae b8 a4  8c ed 18 cd fa 2e 13 d7  |TV}x......X...S.|-00000a40:  bc d2 59 6d f3 89 a3 0c  b0 64 c6 bd 6d fe e9 38  |..Ym...L.d..m..8|-00000a50:  cb ee f9 33 4a 8a 78 e4  66 8f 30 e9 b6 a0 74 51  |...3J.x.f.0...tQ|-00000a60:  99 29 92 bd 9a c7 ec 05  0b 8b da f4 45 90 28 a6  |.).....EK...E.(.|-00000a70:  53 74 ae 8d 1a 96 05 77  a9 59 29 8b ee 22 0b 69  |St..Z.Ew.Y).."Ki|-00000a80:  e4 a0 8d 94 c4 d0 ad ac  2b 79 d6 98 d7 62 b2 96  |........+y...b..|-00000a90:  3e 7d f6 8d 3b ec 37 5c  a4 4e b1 e6 e2 bd 65 e9  |>}..;.7\.N....e.|-00000aa0:  79 06 73 28 b8 a4 df e5  95 57 85 ac 8f bd 85 c5  |yFs(.....W......|-00000ab0:  e8 a4 31 c1 eb 62 4a 54  07 22 fd e0 e5 95 d7 92  |..1..bJTG"......|-00000ac0:  65 bd 69 c9 98 f9 be c9  08 c5 66 bd ae 55 8a 94  |e.i.....H.f..U..|-00000ad0:  ed eb a6 c9 a1 99 22 85  6a 09 4c 2b 49 17 2e 52  |......".jIL+IW.R|-00000ae0:  cc 27 9b 34 89 03 82 70  9a bc c3 a4 76 da c4 88  |.'.4.C.p....v...|-00000af0:  cd e4 13 b7 7f 3d 52 0e  f5 89 44 aa 60 cc 4a 3e  |..S.~=RN..D.`.J>|-00000b00:  a6 09 94 cb 34 de b4 17  67 6a c5 92 8d 91 18 93  |.I..4..Wgj....X.|-00000b10:  b7 98 3a d2 e4 75 13 87  89 68 26 22 02 21 05 a5  |..:..uS..h&"B!E.|-00000b20:  70 b5 02 57 14 2e 2b b4  e6 e2 9f 75 f8 ae 02 97  |p.BWT.+....u..B.|-00000b30:  5a aa e5 25 85 4b 0d 7a  cb c5 90 6c a9 46 4b a5  |Z..%.KMz...l.FK.|-00000b40:  7e f1 42 17 79 31 84 8b  01 fd 42 17 7c 7b 3e 47  |~.BWy1..A.BW|{>G|-00000b50:  7e db 8a f3 39 f8 87 c2  39 85 6f 72 71 d6 85 bf  |~...9...9.orq...|-00000b60:  d7 a2 99 43 6c 56 68 8e  5c 3b 18 b8 a6 7f 3d 12  |...ClVh.\;X..~=R|-00000b70:  5f 9d 29 94 5f d5 e2 4c  21 fe a6 70 fa cb 0c 79  |_.)._..L!..p..Ly|-00000b80:  5a e1 cb 0c 7c a1 f0 f9  5d f8 4c e1 d3 3a 9c 3a  |Z..L|...].L..:.:|-00000b90:  99 2e 4f b5 e2 64 3a 4e  d4 e2 13 85 8f 15 8e 1f  |..O..d:N..S..U._|-00000ba0:  4b 91 c7 15 8e a5 e0 68  2d 3e fa 30 45 7e a4 f0  |K..U...h->.0E~..|-00000bb0:  e1 ea 04 f9 61 -- -- --  -- -- -- -- -- -- -- --  |..D.a-----------|-Hello.pdf:-00000bb0:  -- -- -- -- -- -- 3e a8  c0 91 41 68 62 a1 69 10  |------>...Ahb.iP|-00000bc0:  0e 2b 1c 7a 3f 5e 1e 52  78 3f 1e 07 15 de 53 38  |N+\z?^^Rx?^GU.S8|-00000bd0:  50 e5 94 07 32 f1 d7 54  ec 57 78 b7 16 8d ab 7c  |P..G2..T.Wx.V..||-00000be0:  b2 51 e1 2f -- -- -- --  -- -- -- -- -- -- -- --  |.Q./------------|-Hello.pdf:-00000be0:  -- -- -- -- -- ef 54 60  9f c2 db -- -- -- -- --  |-----.T`...-----|-Hello.pdf:-00000be0:  -- -- -- -- -- -- -- --  -- -- -- -- 7f 56 d8 bb  |------------~V..|-00000bf0:  29 51 be a5 b0 47 e1 4d  85 3f 29 34 b0 bd 06 17  |)Q...G.M.?)4..FW|-00000c00:  de b0 a2 7e 77 9d ac 57  d8 bd 6b 9a dc 5d 87 dd  |...~w..W..k..]..|-00000c10:  95 fa ae 3a 9f dc 35 0d  bb 02 7a 9d 0f 3b 15 5e  |...:..5M.Bz.O;U^|-00000c20:  af 45 a4 66 a8 7c 4d e1  55 1e 5e 6d c5 2b 6c 6b  |.E.f.|M.U^^m.+lk|-00000c30:  87 c2 1f 0b b1 bd 10 2f  db 10 4e c2 1f 14 5e 52  |.._K..P/.PN._T^R|-00000c40:  81 ab f8 bd c2 8b -- --  -- -- -- -- -- -- -- --  |......----------|-Hello.pdf:-00000c40:  -- -- -- -- -- -- -- bf  4b c2 36 85 17 9e b7 c9  |-------.K.6.W...|-00000c50:  17 72 f1 bc 0d cf 6d 75  ca e7 ba 61 ab 13 cf 6e  |Wr..M.mu...a.S.n|-00000c60:  f1 cb 67 2b b0 c5 8f df  2a 3c a3 f0 b4 c2 53 4f  |..g+....*<....SO|-00000c70:  a6 cb a7 -- -- -- -- --  -- -- -- -- -- -- -- --  |...-------------|-Hello.pdf:-00000c70:  -- -- -- -- f1 e4 13 0e  f9 64 3a 9e 70 e0 37 f1  |----..SN.d:.p.7.|-00000c80:  d8 ac f0 38 3b 79 5c 61  53 22 36 6e e8 29 37 2a  |...8;y\aS"6n.)7*|-00000c90:  6c e8 89 c7 d8 ff 63 b5  a8 5d 5f 27 6b 15 d6 f3  |l.....c..]_'kU..|-00000ca0:  b3 b5 be 0e eb 2b f5 75  6b 7c 72 dd 34 ac 0b e8  |...N.+.uk|r.4.K.|-00000cb0:  8f 2a fc 5a 61 2d cb 6b  eb b0 c6 87 1a 2e 46 cd  |.*.Za-.k....Z.F.|-00000cc0:  50 3c c2 d9 3e e2 c2 ea  04 54 33 50 5d 88 55 5c  |P<..>...DT3P].U\|-00000cd0:  b4 55 3e 54 39 b1 52 e1  61 85 87 14 1e 5c e1 94  |.U>T9.R.a..T^\..|-00000ce0:  0f 2a ac 70 e2 57 -- --  -- -- -- -- -- -- -- --  |O*.p.W----------|-Hello.pdf:-00000ce0:  -- -- -- -- -- -- -- cb  15 1e 70 0e 93 0f 4c c2  |-------.U^pN.OL.|-00000cf0:  2f 15 2a ef c5 b2 a5 15  72 99 c2 d2 -- -- -- --  |/U*....Ur...----|-Hello.pdf:-00000cf0:  -- -- -- -- -- -- -- --  -- -- -- -- -- 54 74 c4  |-------------Tt.|-00000d00:  fd -- -- -- -- -- -- --  -- -- -- -- -- -- -- --  |.---------------|-Hello.pdf:-00000d00:  -- -- e5 36 fc 42 61 89  c2 3d -- -- -- -- -- --  |--.6.Ba..=------|-Hello.pdf:

The diff stops at 1024 KiB. git show 5c3231a shows the rest.