Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gnu_parallel for openSUSE:Factory checked in at 2021-06-09 21:52:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gnu_parallel (Old) and /work/SRC/openSUSE:Factory/.gnu_parallel.new.32437 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnu_parallel" Wed Jun 9 21:52:45 2021 rev:67 rq:898490 version:20210522 Changes: -------- --- /work/SRC/openSUSE:Factory/gnu_parallel/gnu_parallel.changes 2021-05-11 23:04:47.540789474 +0200 +++ /work/SRC/openSUSE:Factory/.gnu_parallel.new.32437/gnu_parallel.changes 2021-06-09 21:53:10.630568327 +0200 @@ -1,0 +2,6 @@ +Tue Jun 8 15:44:27 UTC 2021 - Jan Engelhardt <[email protected]> + +- Update to release 20210522 + * --plus includes {%%regexp} and {##regexp}. + +------------------------------------------------------------------- Old: ---- parallel-20210422.tar.bz2 parallel-20210422.tar.bz2.sig New: ---- parallel-20210522.tar.bz2 parallel-20210522.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnu_parallel.spec ++++++ --- /var/tmp/diff_new_pack.UzdlZh/_old 2021-06-09 21:53:11.890570573 +0200 +++ /var/tmp/diff_new_pack.UzdlZh/_new 2021-06-09 21:53:11.890570573 +0200 @@ -17,7 +17,7 @@ Name: gnu_parallel -Version: 20210422 +Version: 20210522 Release: 0 Summary: Shell tool for executing jobs in parallel License: GPL-3.0-or-later ++++++ parallel-20210422.tar.bz2 -> parallel-20210522.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/NEWS new/parallel-20210522/NEWS --- old/parallel-20210422/NEWS 2021-04-22 17:33:36.000000000 +0200 +++ new/parallel-20210522/NEWS 2021-05-22 21:41:42.000000000 +0200 @@ -1,3 +1,32 @@ +20210522 + +New in this release: + +* --plus includes {%%regexp} and {##regexp}. + +* Bug fixes and man page updates. + +News about GNU Parallel: + +* Batch Calculate and Verify MD5 Checksum With GNU Parallel + https://omicx.cc/posts/2021-04-28-calculate-and-verify-md5-checksum-with-gnu-parallel/ + +* HerrComp Gnu parallel, c++11 threads 2021 04 28 + https://www.youtube.com/watch?v=wDd9F9nn0qA + +* Distributing embarrassingly parallel tasks GNU Parallel + https://ulhpc-tutorials.readthedocs.io/en/latest/sequential/gnu-parallel/ + +* Job Parallelization on Niagara + https://www.maryamdaryalal.com/post/job-parallelization-on-niagara + +* Use Parallel to split by line + https://madflex.de/use-parallel-to-split-by-line/ + +* m1 multi-core batch convert with gpu parallel + ffmpeg + https://www.youtube.com/watch?v=hAuc0YsXv6A + + 20210422 New in this release: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/README new/parallel-20210522/README --- old/parallel-20210422/README 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/README 2021-05-22 22:05:54.000000000 +0200 @@ -57,11 +57,11 @@ Full installation of GNU Parallel is as simple as: - wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2 - wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2.sig - gpg parallel-20210422.tar.bz2.sig - bzip2 -dc parallel-20210422.tar.bz2 | tar xvf - - cd parallel-20210422 + wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2 + wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2.sig + gpg parallel-20210522.tar.bz2.sig + bzip2 -dc parallel-20210522.tar.bz2 | tar xvf - + cd parallel-20210522 ./configure && make && sudo make install @@ -70,11 +70,11 @@ If you are not root you can add ~/bin to your path and install in ~/bin and ~/share: - wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2 - wget https://ftpmirror.gnu.org/parallel/parallel-20210422.tar.bz2.sig - gpg parallel-20210422.tar.bz2.sig - bzip2 -dc parallel-20210422.tar.bz2 | tar xvf - - cd parallel-20210422 + wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2 + wget https://ftpmirror.gnu.org/parallel/parallel-20210522.tar.bz2.sig + gpg parallel-20210522.tar.bz2.sig + bzip2 -dc parallel-20210522.tar.bz2 | tar xvf - + cd parallel-20210522 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel @@ -122,8 +122,8 @@ When using programs that use GNU Parallel to process data for publication please cite: - Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given'). - Zenodo. https://doi.org/10.5281/zenodo.4710607 + Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza'). + Zenodo. https://doi.org/10.5281/zenodo.4781603 Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ole Tange, http://ole.tange.dk and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/configure new/parallel-20210522/configure --- old/parallel-20210422/configure 2021-04-22 17:44:03.000000000 +0200 +++ new/parallel-20210522/configure 2021-05-22 22:06:43.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for parallel 20210422. +# Generated by GNU Autoconf 2.69 for parallel 20210522. # # Report bugs to <[email protected]>. # @@ -579,8 +579,8 @@ # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20210422' -PACKAGE_STRING='parallel 20210422' +PACKAGE_VERSION='20210522' +PACKAGE_STRING='parallel 20210522' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1214,7 +1214,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures parallel 20210422 to adapt to many kinds of systems. +\`configure' configures parallel 20210522 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1281,7 +1281,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of parallel 20210422:";; + short | recursive ) echo "Configuration of parallel 20210522:";; esac cat <<\_ACEOF @@ -1357,7 +1357,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -parallel configure 20210422 +parallel configure 20210522 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1374,7 +1374,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by parallel $as_me 20210422, which was +It was created by parallel $as_me 20210522, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2237,7 +2237,7 @@ # Define the identity of the package. PACKAGE='parallel' - VERSION='20210422' + VERSION='20210522' cat >>confdefs.h <<_ACEOF @@ -2880,7 +2880,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by parallel $as_me 20210422, which was +This file was extended by parallel $as_me 20210522, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2942,7 +2942,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -parallel config.status 20210422 +parallel config.status 20210522 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/configure.ac new/parallel-20210522/configure.ac --- old/parallel-20210422/configure.ac 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/configure.ac 2021-05-22 22:05:54.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20210422], [[email protected]]) +AC_INIT([parallel], [20210522], [[email protected]]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.1 new/parallel-20210522/src/env_parallel.1 --- old/parallel-20210422/src/env_parallel.1 2021-04-22 17:43:50.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.1 2021-05-22 22:06:46.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "ENV_PARALLEL 1" -.TH ENV_PARALLEL 1 "2021-04-22" "20210422" "parallel" +.TH ENV_PARALLEL 1 "2021-05-22" "20210522" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.ash new/parallel-20210522/src/env_parallel.ash --- old/parallel-20210422/src/env_parallel.ash 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.ash 2021-05-22 22:05:54.000000000 +0200 @@ -385,7 +385,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.bash new/parallel-20210522/src/env_parallel.bash --- old/parallel-20210422/src/env_parallel.bash 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.bash 2021-05-22 22:05:54.000000000 +0200 @@ -391,7 +391,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.dash new/parallel-20210522/src/env_parallel.dash --- old/parallel-20210422/src/env_parallel.dash 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.dash 2021-05-22 22:05:54.000000000 +0200 @@ -385,7 +385,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.ksh new/parallel-20210522/src/env_parallel.ksh --- old/parallel-20210422/src/env_parallel.ksh 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.ksh 2021-05-22 22:05:54.000000000 +0200 @@ -368,7 +368,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.mksh new/parallel-20210522/src/env_parallel.mksh --- old/parallel-20210422/src/env_parallel.mksh 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.mksh 2021-05-22 22:05:54.000000000 +0200 @@ -371,7 +371,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.sh new/parallel-20210522/src/env_parallel.sh --- old/parallel-20210422/src/env_parallel.sh 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.sh 2021-05-22 22:05:54.000000000 +0200 @@ -390,7 +390,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/env_parallel.zsh new/parallel-20210522/src/env_parallel.zsh --- old/parallel-20210422/src/env_parallel.zsh 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/env_parallel.zsh 2021-05-22 22:05:54.000000000 +0200 @@ -362,7 +362,7 @@ return 255 fi if [ "$_parset_NAME" = "--version" ] ; then - echo "parset 20210422 (GNU parallel `parallel --minversion 1`)" + echo "parset 20210522 (GNU parallel `parallel --minversion 1`)" echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software" echo "Foundation, Inc." echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/niceload new/parallel-20210522/src/niceload --- old/parallel-20210422/src/niceload 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/niceload 2021-05-22 22:05:54.000000000 +0200 @@ -26,7 +26,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20210422; +$Global::version = 20210522; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel new/parallel-20210522/src/parallel --- old/parallel-20210422/src/parallel 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/parallel 2021-05-22 22:05:54.000000000 +0200 @@ -2187,7 +2187,7 @@ sub init_globals() { # Defaults: - $Global::version = 20210422; + $Global::version = 20210522; $Global::progname = 'parallel'; $::name = "GNU Parallel"; $Global::infinity = 2**31; @@ -2242,12 +2242,18 @@ '{:(\d+?)}' => 'substr($_,0,$$1) = ""', # Bash ${a:2:3} '{:(\d+?):(\d+?)}' => '$_ = substr($_,$$1,$$2);', + # echo {#z.*z.} ::: z.z.z.foo => z.foo + # echo {##z.*z.} ::: z.z.z.foo => foo # Bash ${a#bc} - '{#([^#}][^}]*?)}' => 's/^$$1//;', + '{#([^#}][^}]*?)}' => + '$nongreedy=::make_regexp_ungreedy($$1);s/^$nongreedy(.*)/$1/;', # Bash ${a##bc} '{##([^#}][^}]*?)}' => 's/^$$1//;', + # echo {%.z.*z} ::: foo.z.z.z => foo.z + # echo {%%.z.*z} ::: foo.z.z.z => foo # Bash ${a%def} - '{%([^}]+?)}' => 's/$$1$//;', + '{%([^}]+?)}' => + '$nongreedy=::make_regexp_ungreedy($$1);s/(.*)$nongreedy$/$1/;', # Bash ${a%%def} '{%%([^}]+?)}' => 's/$$1$//;', # Bash ${a/def/ghi} ${a/def/} @@ -4986,8 +4992,8 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').", - " Zenodo. https://doi.org/10.5281/zenodo.4710607", + " Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').", + " Zenodo. https://doi.org/10.5281/zenodo.4781603", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice @@ -5017,8 +5023,8 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').", - " Zenodo. https://doi.org/10.5281/zenodo.4710607", + " Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').", + " Zenodo. https://doi.org/10.5281/zenodo.4781603", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and @@ -5094,8 +5100,8 @@ sub die_bug($) { my $bugid = shift; print STDERR - ("$Global::progname: This should not happen. You have found a bug.\n", - "Please contact <parallel\@gnu.org> and follow\n", + ("$Global::progname: This should not happen. You have found a bug. ", + "Please follow\n", "https://www.gnu.org/software/parallel/man.html#REPORTING-BUGS\n", "\n", "Include this in the report:\n", @@ -5141,20 +5147,20 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - "\@software{tange_2021_4710607,", + "\@software{tange_2021_4781603,", " author = {Tange, Ole},", - " title = {GNU Parallel 20210422 ('Ever Given')},", - " month = Apr,", + " title = {GNU Parallel 20210522 ('Gaza')},", + " month = May,", " year = 2021,", " note = {{GNU Parallel is a general parallelizer to run", " multiple serial command line programs in parallel", " without changing them.}},", " publisher = {Zenodo},", - " doi = {10.5281/zenodo.4710607},", - " url = {https://doi.org/10.5281/zenodo.4710607}", + " doi = {10.5281/zenodo.4781603},", + " url = {https://doi.org/10.5281/zenodo.4781603}", "}", "", - "(Feel free to use \\nocite{tange_2021_4710607})", + "(Feel free to use \\nocite{tange_2021_4781603})", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and @@ -5931,6 +5937,37 @@ select(undef, undef, undef, $ms/1000); } +sub make_regexp_ungreedy { + my $regexp = shift; + + my $class_state = 0; + my $escape_state = 0; + my $found = 0; + my $ungreedy = ""; + my $c; + + for $c (split (//, $regexp)) { + if ($found) { + if($c ne "?") { $ungreedy .= "?"; } + $found = 0; + } + $ungreedy .= $c; + + if ($escape_state) { $escape_state = 0; next; } + if ($c eq "\\") { $escape_state = 1; next; } + if ($c eq '[') { $class_state = 1; next; } + if ($class_state) { + if($c eq ']') { $class_state = 0; } + next; + } + # Quantifiers: + * {...} + if ($c =~ /[*}+]/) { $found = 1; } + } + if($found) { $ungreedy .= '?'; } + return $ungreedy; +} + + sub __KILLER_REAPER__() {} sub reap_usleep() { @@ -6481,16 +6518,15 @@ limit=$1; io_file=$2; # Do the measurement in the background - (tmp=$(tempfile); + ((tmp=$(tempfile); LANG=C iostat -x 1 2 > $tmp; - mv $tmp $io_file) & + mv $tmp $io_file) </dev/null >/dev/null & ); perl -e '-e $ARGV[0] or exit(1); for(reverse <>) { /Device/ and last; /(\S+)$/ and $max = $max > $1 ? $max : $1; } - exit ($max < '$limit')' $io_file; + exit ('$limit' < $max)' $io_file; }; - export -f io; io %s %s !, "mem" => q! @@ -6533,6 +6569,7 @@ local %ENV = %env; $ENV{'SSHLOGIN'} = $self->string(); system($Global::shell,"-c",$self->{'limitscript'}); + #::qqx($self->{'limitscript'}); ::debug("limit","limit `".$self->{'limitscript'}."` result ".($?>>8)."\n"); return $?>>8; } @@ -9520,6 +9557,7 @@ replace_placeholders(\@opt::filter,0,0)) { $run &&= eval $eval; } + $self->{'commandline'}{'skip'} ||= not $run; } return $run; } @@ -13767,3 +13805,4 @@ } main(); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel.1 new/parallel-20210522/src/parallel.1 --- old/parallel-20210422/src/parallel.1 2021-04-19 09:52:59.000000000 +0200 +++ new/parallel-20210522/src/parallel.1 2021-05-14 16:50:19.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "PARALLEL 1" -.TH PARALLEL 1 "2021-04-10" "20210322" "parallel" +.TH PARALLEL 1 "2021-05-14" "20210422" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -1685,13 +1685,15 @@ The following dynamic replacement strings are also activated. They are inspired by bash's parameter expansion: .Sp -.Vb 10 +.Vb 12 \& {:\-str} str if the value is empty \& {:num} remove the first num characters \& {:num1:num2} characters from num1 to num2 -\& {#str} remove prefix str -\& {%str} remove postfix str -\& {/str1/str2} replace str1 with str2 +\& {#regexp} remove prefix regexp (non\-greedy) +\& {##regexp} remove prefix regexp (greedy) +\& {%regexp} remove postfix regexp (non\-greedy) +\& {%%regexp} remove postfix regexp (greedy) +\& {/regexp/str} replace regexp with str \& {^str} uppercase str if found at the start \& {^^str} uppercase str \& {,str} lowercase str if found at the start @@ -4488,6 +4490,38 @@ .Ve .PP See more \fBssh\fR tricks on https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts +.SS "\s-1EXAMPLE:\s0 Use outrun instead of ssh" +.IX Subsection "EXAMPLE: Use outrun instead of ssh" +\&\fBoutrun\fR lets you run a command on a remote server. \fBoutrun\fR sets up +a connection to access files at the source server, and automatically +transfers files. \fBoutrun\fR must be installed on the remote system. +.PP +You can use \fBoutrun\fR in an sshlogin this way: +.PP +.Vb 1 +\& parallel \-S \*(Aqoutrun user@server eval\*(Aq command +.Ve +.SS "\s-1EXAMPLE:\s0 Slurm cluster" +.IX Subsection "EXAMPLE: Slurm cluster" +The Slurm Workload Manager is used in many clusters. +.PP +Here is a simple example of using \s-1GNU\s0 \fBparallel\fR to call \fBsrun\fR: +.PP +.Vb 1 +\& #!/bin/bash +\& +\& #SBATCH \-\-time 00:02:00 +\& #SBATCH \-\-ntasks=4 +\& #SBATCH \-\-job\-name GnuParallelDemo +\& #SBATCH \-\-output gnuparallel.out +\& +\& module purge +\& module load gnu_parallel +\& +\& my_parallel="parallel \-\-delay .2 \-j $SLURM_NTASKS" +\& my_srun="srun \-\-export=all \-\-exclusive \-n1 \-\-cpus\-per\-task=1 \-\-cpu\-bind=cores" +\& $my_parallel "$my_srun" echo This is job {} ::: {1..20} +.Ve .SS "\s-1EXAMPLE:\s0 Parallelizing rsync" .IX Subsection "EXAMPLE: Parallelizing rsync" \&\fBrsync\fR is a great tool, but sometimes it will not fill up the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel.html new/parallel-20210522/src/parallel.html --- old/parallel-20210422/src/parallel.html 2021-04-10 21:49:15.000000000 +0200 +++ new/parallel-20210522/src/parallel.html 2021-05-14 16:50:20.000000000 +0200 @@ -88,6 +88,8 @@ <li><a href="#No-jumphost-no-port-forwards">No jumphost, no port forwards</a></li> </ul> </li> + <li><a href="#EXAMPLE:-Use-outrun-instead-of-ssh">EXAMPLE: Use outrun instead of ssh</a></li> + <li><a href="#EXAMPLE:-Slurm-cluster">EXAMPLE: Slurm cluster</a></li> <li><a href="#EXAMPLE:-Parallelizing-rsync">EXAMPLE: Parallelizing rsync</a></li> <li><a href="#EXAMPLE:-Use-multiple-inputs-in-one-command">EXAMPLE: Use multiple inputs in one command</a></li> <li><a href="#EXAMPLE:-Use-a-table-as-input">EXAMPLE: Use a table as input</a></li> @@ -1660,9 +1662,11 @@ <pre><code> {:-str} str if the value is empty {:num} remove the first num characters {:num1:num2} characters from num1 to num2 - {#str} remove prefix str - {%str} remove postfix str - {/str1/str2} replace str1 with str2 + {#regexp} remove prefix regexp (non-greedy) + {##regexp} remove prefix regexp (greedy) + {%regexp} remove postfix regexp (non-greedy) + {%%regexp} remove postfix regexp (greedy) + {/regexp/str} replace regexp with str {^str} uppercase str if found at the start {^^str} uppercase str {,str} lowercase str if found at the start @@ -3942,6 +3946,34 @@ <p>See more <b>ssh</b> tricks on https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts</p> +<h2 id="EXAMPLE:-Use-outrun-instead-of-ssh">EXAMPLE: Use outrun instead of ssh</h2> + +<p><b>outrun</b> lets you run a command on a remote server. <b>outrun</b> sets up a connection to access files at the source server, and automatically transfers files. <b>outrun</b> must be installed on the remote system.</p> + +<p>You can use <b>outrun</b> in an sshlogin this way:</p> + +<pre><code> parallel -S 'outrun user@server eval' command</code></pre> + +<h2 id="EXAMPLE:-Slurm-cluster">EXAMPLE: Slurm cluster</h2> + +<p>The Slurm Workload Manager is used in many clusters.</p> + +<p>Here is a simple example of using GNU <b>parallel</b> to call <b>srun</b>:</p> + +<pre><code> #!/bin/bash + + #SBATCH --time 00:02:00 + #SBATCH --ntasks=4 + #SBATCH --job-name GnuParallelDemo + #SBATCH --output gnuparallel.out + + module purge + module load gnu_parallel + + my_parallel="parallel --delay .2 -j $SLURM_NTASKS" + my_srun="srun --export=all --exclusive -n1 --cpus-per-task=1 --cpu-bind=cores" + $my_parallel "$my_srun" echo This is job {} ::: {1..20}</code></pre> + <h2 id="EXAMPLE:-Parallelizing-rsync">EXAMPLE: Parallelizing rsync</h2> <p><b>rsync</b> is a great tool, but sometimes it will not fill up the available bandwidth. Running multiple <b>rsync</b> in parallel can fix this.</p> Binary files old/parallel-20210422/src/parallel.pdf and new/parallel-20210522/src/parallel.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel.pod new/parallel-20210522/src/parallel.pod --- old/parallel-20210422/src/parallel.pod 2021-04-10 21:49:02.000000000 +0200 +++ new/parallel-20210522/src/parallel.pod 2021-05-14 16:36:07.000000000 +0200 @@ -1662,9 +1662,11 @@ {:-str} str if the value is empty {:num} remove the first num characters {:num1:num2} characters from num1 to num2 - {#str} remove prefix str - {%str} remove postfix str - {/str1/str2} replace str1 with str2 + {#regexp} remove prefix regexp (non-greedy) + {##regexp} remove prefix regexp (greedy) + {%regexp} remove postfix regexp (non-greedy) + {%%regexp} remove postfix regexp (greedy) + {/regexp/str} replace regexp with str {^str} uppercase str if found at the start {^^str} uppercase str {,str} lowercase str if found at the start @@ -4284,6 +4286,38 @@ See more B<ssh> tricks on https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts +=head2 EXAMPLE: Use outrun instead of ssh + +B<outrun> lets you run a command on a remote server. B<outrun> sets up +a connection to access files at the source server, and automatically +transfers files. B<outrun> must be installed on the remote system. + +You can use B<outrun> in an sshlogin this way: + + parallel -S 'outrun user@server eval' command + + +=head2 EXAMPLE: Slurm cluster + +The Slurm Workload Manager is used in many clusters. + +Here is a simple example of using GNU B<parallel> to call B<srun>: + + #!/bin/bash + + #SBATCH --time 00:02:00 + #SBATCH --ntasks=4 + #SBATCH --job-name GnuParallelDemo + #SBATCH --output gnuparallel.out + + module purge + module load gnu_parallel + + my_parallel="parallel --delay .2 -j $SLURM_NTASKS" + my_srun="srun --export=all --exclusive -n1 --cpus-per-task=1 --cpu-bind=cores" + $my_parallel "$my_srun" echo This is job {} ::: {1..20} + + =head2 EXAMPLE: Parallelizing rsync B<rsync> is a great tool, but sometimes it will not fill up the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel.rst new/parallel-20210522/src/parallel.rst --- old/parallel-20210422/src/parallel.rst 2021-04-10 21:49:15.000000000 +0200 +++ new/parallel-20210522/src/parallel.rst 2021-05-14 16:50:24.000000000 +0200 @@ -2025,9 +2025,11 @@ {:-str} str if the value is empty {:num} remove the first num characters {:num1:num2} characters from num1 to num2 - {#str} remove prefix str - {%str} remove postfix str - {/str1/str2} replace str1 with str2 + {#regexp} remove prefix regexp (non-greedy) + {##regexp} remove prefix regexp (greedy) + {%regexp} remove postfix regexp (non-greedy) + {%%regexp} remove postfix regexp (greedy) + {/regexp/str} replace regexp with str {^str} uppercase str if found at the start {^^str} uppercase str {,str} lowercase str if found at the start @@ -5662,6 +5664,50 @@ +EXAMPLE: Use outrun instead of ssh +================================== + + +\ **outrun**\ lets you run a command on a remote server. \ **outrun**\ sets up +a connection to access files at the source server, and automatically +transfers files. \ **outrun**\ must be installed on the remote system. + +You can use \ **outrun**\ in an sshlogin this way: + + +.. code-block:: perl + + parallel -S 'outrun user@server eval' command + + + +EXAMPLE: Slurm cluster +====================== + + +The Slurm Workload Manager is used in many clusters. + +Here is a simple example of using GNU \ **parallel**\ to call \ **srun**\ : + + +.. code-block:: perl + + #!/bin/bash + + #SBATCH --time 00:02:00 + #SBATCH --ntasks=4 + #SBATCH --job-name GnuParallelDemo + #SBATCH --output gnuparallel.out + + module purge + module load gnu_parallel + + my_parallel="parallel --delay .2 -j $SLURM_NTASKS" + my_srun="srun --export=all --exclusive -n1 --cpus-per-task=1 --cpu-bind=cores" + $my_parallel "$my_srun" echo This is job {} ::: {1..20} + + + EXAMPLE: Parallelizing rsync ============================ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parallel.texi new/parallel-20210522/src/parallel.texi --- old/parallel-20210422/src/parallel.texi 2021-04-10 21:49:20.000000000 +0200 +++ new/parallel-20210522/src/parallel.texi 2021-05-14 16:50:24.000000000 +0200 @@ -1827,9 +1827,11 @@ {:-str} str if the value is empty {:num} remove the first num characters {:num1:num2} characters from num1 to num2 - {#str} remove prefix str - {%str} remove postfix str - {/str1/str2} replace str1 with str2 + {#regexp} remove prefix regexp (non-greedy) + {##regexp} remove prefix regexp (greedy) + {%regexp} remove postfix regexp (non-greedy) + {%%regexp} remove postfix regexp (greedy) + {/regexp/str} replace regexp with str {^str} uppercase str if found at the start {^^str} uppercase str {,str} lowercase str if found at the start @@ -3391,6 +3393,8 @@ * EXAMPLE@asis{:} Running the same command on remote computers:: * EXAMPLE@asis{:} Running 'sudo' on remote computers:: * EXAMPLE@asis{:} Using remote computers behind NAT wall:: +* EXAMPLE@asis{:} Use outrun instead of ssh:: +* EXAMPLE@asis{:} Slurm cluster:: * EXAMPLE@asis{:} Parallelizing rsync:: * EXAMPLE@asis{:} Use multiple inputs in one command:: * EXAMPLE@asis{:} Use a table as input:: @@ -4948,6 +4952,42 @@ See more @strong{ssh} tricks on https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts +@node EXAMPLE: Use outrun instead of ssh +@section EXAMPLE: Use outrun instead of ssh + +@strong{outrun} lets you run a command on a remote server. @strong{outrun} sets up +a connection to access files at the source server, and automatically +transfers files. @strong{outrun} must be installed on the remote system. + +You can use @strong{outrun} in an sshlogin this way: + +@verbatim + parallel -S 'outrun user@server eval' command +@end verbatim + +@node EXAMPLE: Slurm cluster +@section EXAMPLE: Slurm cluster + +The Slurm Workload Manager is used in many clusters. + +Here is a simple example of using GNU @strong{parallel} to call @strong{srun}: + +@verbatim + #!/bin/bash + + #SBATCH --time 00:02:00 + #SBATCH --ntasks=4 + #SBATCH --job-name GnuParallelDemo + #SBATCH --output gnuparallel.out + + module purge + module load gnu_parallel + + my_parallel="parallel --delay .2 -j $SLURM_NTASKS" + my_srun="srun --export=all --exclusive -n1 --cpus-per-task=1 --cpu-bind=cores" + $my_parallel "$my_srun" echo This is job {} ::: {1..20} +@end verbatim + @node EXAMPLE: Parallelizing rsync @section EXAMPLE: Parallelizing rsync diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parsort new/parallel-20210522/src/parsort --- old/parallel-20210422/src/parsort 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/parsort 2021-05-22 22:05:54.000000000 +0200 @@ -121,7 +121,7 @@ "help" => \$opt::dummy, ) || exit(255); $Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1]; -$Global::version = 20210422; +$Global::version = 20210522; if($opt::version) { version(); exit 0; } @Global::sortoptions = shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/parsort.1 new/parallel-20210522/src/parsort.1 --- old/parallel-20210422/src/parsort.1 2021-04-22 17:43:50.000000000 +0200 +++ new/parallel-20210522/src/parsort.1 2021-05-22 22:06:46.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "PARSORT 1" -.TH PARSORT 1 "2021-04-22" "20210422" "parallel" +.TH PARSORT 1 "2021-05-22" "20210522" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/sem new/parallel-20210522/src/sem --- old/parallel-20210422/src/sem 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/sem 2021-05-22 22:05:54.000000000 +0200 @@ -2187,7 +2187,7 @@ sub init_globals() { # Defaults: - $Global::version = 20210422; + $Global::version = 20210522; $Global::progname = 'parallel'; $::name = "GNU Parallel"; $Global::infinity = 2**31; @@ -2242,12 +2242,18 @@ '{:(\d+?)}' => 'substr($_,0,$$1) = ""', # Bash ${a:2:3} '{:(\d+?):(\d+?)}' => '$_ = substr($_,$$1,$$2);', + # echo {#z.*z.} ::: z.z.z.foo => z.foo + # echo {##z.*z.} ::: z.z.z.foo => foo # Bash ${a#bc} - '{#([^#}][^}]*?)}' => 's/^$$1//;', + '{#([^#}][^}]*?)}' => + '$nongreedy=::make_regexp_ungreedy($$1);s/^$nongreedy(.*)/$1/;', # Bash ${a##bc} '{##([^#}][^}]*?)}' => 's/^$$1//;', + # echo {%.z.*z} ::: foo.z.z.z => foo.z + # echo {%%.z.*z} ::: foo.z.z.z => foo # Bash ${a%def} - '{%([^}]+?)}' => 's/$$1$//;', + '{%([^}]+?)}' => + '$nongreedy=::make_regexp_ungreedy($$1);s/(.*)$nongreedy$/$1/;', # Bash ${a%%def} '{%%([^}]+?)}' => 's/$$1$//;', # Bash ${a/def/ghi} ${a/def/} @@ -4986,8 +4992,8 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').", - " Zenodo. https://doi.org/10.5281/zenodo.4710607", + " Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').", + " Zenodo. https://doi.org/10.5281/zenodo.4781603", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice @@ -5017,8 +5023,8 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - " Tange, O. (2021, April 22). GNU Parallel 20210422 ('Ever Given').", - " Zenodo. https://doi.org/10.5281/zenodo.4710607", + " Tange, O. (2021, May 22). GNU Parallel 20210522 ('Gaza').", + " Zenodo. https://doi.org/10.5281/zenodo.4781603", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and @@ -5094,8 +5100,8 @@ sub die_bug($) { my $bugid = shift; print STDERR - ("$Global::progname: This should not happen. You have found a bug.\n", - "Please contact <parallel\@gnu.org> and follow\n", + ("$Global::progname: This should not happen. You have found a bug. ", + "Please follow\n", "https://www.gnu.org/software/parallel/man.html#REPORTING-BUGS\n", "\n", "Include this in the report:\n", @@ -5141,20 +5147,20 @@ "If you use programs that use GNU Parallel to process data for an article in a", "scientific publication, please cite:", "", - "\@software{tange_2021_4710607,", + "\@software{tange_2021_4781603,", " author = {Tange, Ole},", - " title = {GNU Parallel 20210422 ('Ever Given')},", - " month = Apr,", + " title = {GNU Parallel 20210522 ('Gaza')},", + " month = May,", " year = 2021,", " note = {{GNU Parallel is a general parallelizer to run", " multiple serial command line programs in parallel", " without changing them.}},", " publisher = {Zenodo},", - " doi = {10.5281/zenodo.4710607},", - " url = {https://doi.org/10.5281/zenodo.4710607}", + " doi = {10.5281/zenodo.4781603},", + " url = {https://doi.org/10.5281/zenodo.4781603}", "}", "", - "(Feel free to use \\nocite{tange_2021_4710607})", + "(Feel free to use \\nocite{tange_2021_4781603})", "", # Before changing this line, please read # https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and @@ -5931,6 +5937,37 @@ select(undef, undef, undef, $ms/1000); } +sub make_regexp_ungreedy { + my $regexp = shift; + + my $class_state = 0; + my $escape_state = 0; + my $found = 0; + my $ungreedy = ""; + my $c; + + for $c (split (//, $regexp)) { + if ($found) { + if($c ne "?") { $ungreedy .= "?"; } + $found = 0; + } + $ungreedy .= $c; + + if ($escape_state) { $escape_state = 0; next; } + if ($c eq "\\") { $escape_state = 1; next; } + if ($c eq '[') { $class_state = 1; next; } + if ($class_state) { + if($c eq ']') { $class_state = 0; } + next; + } + # Quantifiers: + * {...} + if ($c =~ /[*}+]/) { $found = 1; } + } + if($found) { $ungreedy .= '?'; } + return $ungreedy; +} + + sub __KILLER_REAPER__() {} sub reap_usleep() { @@ -6481,16 +6518,15 @@ limit=$1; io_file=$2; # Do the measurement in the background - (tmp=$(tempfile); + ((tmp=$(tempfile); LANG=C iostat -x 1 2 > $tmp; - mv $tmp $io_file) & + mv $tmp $io_file) </dev/null >/dev/null & ); perl -e '-e $ARGV[0] or exit(1); for(reverse <>) { /Device/ and last; /(\S+)$/ and $max = $max > $1 ? $max : $1; } - exit ($max < '$limit')' $io_file; + exit ('$limit' < $max)' $io_file; }; - export -f io; io %s %s !, "mem" => q! @@ -6533,6 +6569,7 @@ local %ENV = %env; $ENV{'SSHLOGIN'} = $self->string(); system($Global::shell,"-c",$self->{'limitscript'}); + #::qqx($self->{'limitscript'}); ::debug("limit","limit `".$self->{'limitscript'}."` result ".($?>>8)."\n"); return $?>>8; } @@ -9520,6 +9557,7 @@ replace_placeholders(\@opt::filter,0,0)) { $run &&= eval $eval; } + $self->{'commandline'}{'skip'} ||= not $run; } return $run; } @@ -13767,3 +13805,4 @@ } main(); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/sql new/parallel-20210522/src/sql --- old/parallel-20210422/src/sql 2021-04-22 17:43:08.000000000 +0200 +++ new/parallel-20210522/src/sql 2021-05-22 22:05:54.000000000 +0200 @@ -600,7 +600,7 @@ exit ($err); sub parse_options { - $Global::version = 20210422; + $Global::version = 20210522; $Global::progname = 'sql'; # This must be done first as this may exec myself diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parallel-20210422/src/sql.1 new/parallel-20210522/src/sql.1 --- old/parallel-20210422/src/sql.1 2021-04-22 17:43:50.000000000 +0200 +++ new/parallel-20210522/src/sql.1 2021-05-22 22:06:46.000000000 +0200 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "SQL 1" -.TH SQL 1 "2021-04-22" "20210422" "parallel" +.TH SQL 1 "2021-05-22" "20210522" "parallel" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l ++++++ parallel-20210422.tar.bz2.sig -> parallel-20210522.tar.bz2.sig ++++++ --- /work/SRC/openSUSE:Factory/gnu_parallel/parallel-20210422.tar.bz2.sig 2021-05-11 23:04:47.616789160 +0200 +++ /work/SRC/openSUSE:Factory/.gnu_parallel.new.32437/parallel-20210522.tar.bz2.sig 2021-06-09 21:53:10.890568791 +0200 @@ -2,7 +2,7 @@ # To check the signature run: # echo | gpg -# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20210422.tar.bz2.sig +# gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-20210522.tar.bz2.sig echo | gpg 2>/dev/null gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve $0 @@ -10,32 +10,32 @@ -----BEGIN PGP SIGNATURE----- -iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAmCBme4ACgkQ0atFFoiI -iIjRgCafW48A3BQdv9sX3cPFk0EKsGQT5ZHG8Bto0BFslYlOm3OnoxTIQja7fa/w -rFTlygtuQeHomlqpQE5qQye6IpWKyryhdHLM32Z4zhv2zEIrT8rrp8YNxGvXGa4r -U0+JEJTkqKBpNKxRNX8myvLcVImPKxf3r9VqEhpIifTuAcfYuD+uaIzWxeZf8D/6 -ocu3181RlsDezxMuFfTr0UEtH/g3lhO/+eTOGFKW3JOsLKoVCt6TiqhuBwWfImBF -bY0VHoK5Ke5Zz+oxbYOXw9NsGcb5tzlJ6vlSnSKZggQnUeI3k21eUHyfNTZcvdNA -QN8Qs8HzHuL8UHCQ3lNOMx2vl7eeFqfUqYq2+k/AHf4JqaT0S+hA6gGuvEefYOuM -oEltcMt9NpH3BSVdV1BOnNZUpKbjawTXLf21fkYVTGsMzkpEg670frt5Rj/IOYIt -xJwmayAdl0hnmEyjxG5YoIrvFlyaMH3n1zJ6/5aEyUnUQZnDyasdlOZlmEnbIBaT -YOxX6VhzKWvxvfbdt/imRu4v/ea6OHdno2hYvSeZxQvYrmLVfn/5tY3RD1TFtlL9 -NOUnowl0mPUoGitvaiNRhWS6YwIugt7oJV4mvuU4ja36DbX8osON4ZhXZybNsY2C -51QHIsxy0ULbN2umc2A5D8ZYBO+knADkvQMdeDhIqPf18Bly/+ZLEPR1PooYcmOI -hmh49gF6FVkrBwDY0+EzXUnAu6v/7+DMqb/JWhFn5FeHUzN6Y9RmSOd6IqBrJDN2 -vmeY/BLrVsMeJGqnZn75H4xDQX1wD0jXdFssRFfuDazon5Gvvr8JOQ/da/dSi44B -kqxkjDO2aety6iPns88U1/sak9Jaqs+S/+QTWpvKOypL3JQLWDK+AxIzMic43Lb0 -8AuCl8d3FrKVDVhZbxMRJKW2HIQcHr6tnAqcmgrvWhuAQEcIrXEsEzi34vfsmcZN -Pb0Yjr0CwjkyYVRU8e7QfUBE2jyTckVbtOAUfEQE1UjgpdeYFlgtNs+Wpc+xCB0s -gRXfiRDLyXLhls71gEVe6bDScE60wFnNnsL4bV6CWcfgFubXsqRzn9e9uCFMKtjP -S4OjBYfUjfQky1e9rDO/2+Fj5w0BLoiS5uDmz9peConoefldaUXwPJiCCI0HM4BG -ssdEeX1LZnkOsJzG9E4i5g1tjoyF4Gj8GZZEh1QtFIqYpLZE6d0kzjpM8jtsA/OV -5p+CEYYXmtRQYoarhoQQJyhcJ++kN20GrXhbo0EfcgN6np58/uEJtXDciVGLQLQX -VVN9jW0ktsrl00+dY+78mIvyqUhNoEqZs7Fg6SJSQA92XISAnUYWhk1gFdCbjF1D -2h/rGTm0NVTS9uRLT64upHdTVl65vCqPI3tj8tnQNUIlidtLR4uJa4H/KFyZY3Ru -npdQIMUEFgiw0T6CLiaWnVfjo/WowRZs84PDXQvEysh6QC+YxM0jw9PDEnRW1df5 -2UhPGj1arMwaEWJn1cwYoFyzn71R2XOmXFNR0S7K0FTMHIAX2YsGj3V6+DATlC9s -yOZGt9MngurrWKVwxqd33VozX1tk6XW/xH5f2VsXfevUC8vFiZ6uv2i03cEGLxEq -0u6ySYEX05zbi1MniCd1B0RyHLVDk5zk7RV2qo1iUxYPFFlt1MQEp/LH -=7WKa +iQUHBAABCgAdFiEEzaAaQgjE90UGEH570atFFoiIiIgFAmCpZLQACgkQ0atFFoiI +iIgTCyaglbV2f4v8aplcfQ+A0tSbawwldOJA/dyGgyuBeFpVjQF/3spgg/40Zy4D +gXVlQSOCjX8lBqF8NWlOd8zl86zl7t2/RLtc3vaK3Y5vGbSGxHiAqxC7q33QtkXp +nSZDK/TH1iY74xk9S+73lXE0tmUCIZ4EYb+52hlJoo/iiGg8puE4NThASbSCu5sE +QlShur335dn0Y0ZInTmNvWrNMYrM01OReZB8m4lViaVjBGdIt5G26cEmHYIWWBD0 ++HO+fzUCUpMAWE9+rSFBu8WWZ0fKfpdp3hXopMlrHmEkHlerFowlfgXXFKLB10/H +RgFQKv3XFDvYUI5CIumze60aah6hyQlbEbL0v03wc3F7iv7uG+dQrhJJJL/Q78lj +sTVJZjS/yyBsqmRLEzTXmxyGRdzOQzS7IFmqgQt0RCw4cOMd7MP8B53QTxxDNhnu +G/7Mp+uZKJlSgylzYRVHqSdCasHlMLAIejBmZQ+BXkUrZBH7XNNbNIfxGVF6HZpy +kEkw3Y6q7DmqNjZAy19q9keeVehEe9Q6WrkvQXxIpaGzph//x4Xnyeu1Nuot/pLT +kHHmysRsa1uUUeLwD1EOVwVjgwTijl7sgz6RwO3T/bRpA0uCxvkxKmrEJNd7qeNL +UY7abnPvtItWHdbkQXaWurYOziuV7+NNrC9Ie5SOVtwYEN9KQ0NmAj35ljcGhMLi +07mVXgdarDFmdrcsM1qstDqygEXtYoEQ0L2ZhF6ABUDEZexwSkNRS8+OrOrLZgMX +SG+uOdH3F1Hza1SDWfx4/KjnpGRwbVAvJl5PMX0u3wZpAqnCf875CDQruptGDrm3 +2VwMEncthnyyZBqNG00n5qDogJ9P3F0yFulO+Dj6exPAifWH17FNKT8cCh191Keu +3yCC5JMzuFY744ztdMuLveEgh3sngnJGx55+JzLjEoVn1ruP3aes/y3/C7WPCjq2 +j5XeV2QsYiy9G2IZ1zPhsJo8P7IPbhPKxAk1X5VLYmmIefYs935DsdYSW3auY/CR +c0c/KqVCeS2hpn+hOjtxhkElDhVL7Xw4f4JwERlc0QpeSWylS6/RaJgPnSJeAs0V +Kxb6Vy/+S8KnZb14rh2+kmw+pzv8lz8Klm1lt/a0amZd9z3dI6Aa2g5G70cHYV84 +Xu8o/1HSz+xwg9SD4wFIfL6Ysp4+SPPmT4b1z961ztznbbGqDg3zBrgHTuJlYPXZ +5b3fq/FBfQPp3iPOuAMFMk20JNOlsABTBvFRNZmve17aDn5YmKjQN2tT+FU5wk42 +YxHWxSR647fcfvrLKrgWhPdrG2ISGxitFpLaLp9JU57FDMul/unRvpx6pIf3NQGO +lxE6CQSvC/7rIi7EkHdaNrFWY49MR2AlRkcGRMIBzwliLjIUxNlHTpODSYoSKpR4 +gpMQQZqPKf+Nc5ApDif+QM/J81c4PcUUu0m9VaVMwlXwM3aejbgBxsBjbPQERqJW +4lmz0gUxBWt1+OhchMb8hISfWgptA6wo0tq5mu1FjXPlj5aoXTd1DIRUwupDo4ud +zNBldN0PJgggy6/BhWyiltsMpmBa4xH5gi/msZDHPZyCJH6k344D74PBjcsI2LaA +I3Y7EEyRTYSf1x0YAqmjd77T+bIBWJzcVHivZJn/snxBoR0hShnzhI6y +=yr/1 -----END PGP SIGNATURE-----
