[7070] in Perl-Users-Digest
Perl-Users Digest, Issue: 695 Volume: 8
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Jul 2 15:17:26 1997
Date: Wed, 2 Jul 97 12:00:40 -0700
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Wed, 2 Jul 1997 Volume: 8 Number: 695
Today's topics:
@{} and wierd execution order <dwc3q@mamba.cs.Virginia.EDU>
[Q] Any MS-Windows *.ini file handling modules/function <larry@mitra.com>
Re: Arrays of filehandles (Non-OOP) (Andrew M. Langmead)
Re: Benchmark Perl5 Processing 1 Gig <rootbeer@teleport.com>
Re: Bug in sort ?? <rootbeer@teleport.com>
Re: Bug in sort ?? (Charles DeRykus)
Error: Document Contains No Data <herget@iag.net>
Re: Event Log Reporting - Doesn't Work <Frank.Huddleston@guardian.brooks.af.mil>
Re: GIFgraph.pm or finance scripts <kluff@enterprise.net>
Re: Hash ref and keys -- how? <rootbeer@teleport.com>
Help Please <josh@palouse.org>
Re: Help with du called from Email or CGI; doubled? xewj@odin.sunquest.com
Re: How can I get 'expect' functionality with perl? (I R A Aggie)
mkdir w/ perl & chmod blah blah follow-up <jason@ccmail.dsccc.com>
Oraperl installation problems <pchere@ctp.com>
Perl and Sockets <gssherma@schmelze.corp.hp.com>
Re: Perl, Oracle, CGI, WWW <Tim.Bunce@ig.co.uk>
POSSIBLE BUG with cgi-lib.pl and HTTP_COOKIE (Nick Tonkin)
Reading infromation from a text file <rodgeral@jmu.edu>
Re: Reading infromation from a text file (Matthew Cravit)
Require Problem (Mark DePristo)
Re: Require Problem (Matthew Cravit)
take linebreaks out of forms? <jason@ccmail.dsccc.com>
Win32::Registry question on NT (Biblesoft Development Group)
Digest Administrivia (Last modified: 8 Mar 97) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Wed, 2 Jul 1997 15:38:30 GMT
From: "David W. Coppit" <dwc3q@mamba.cs.Virginia.EDU>
Subject: @{} and wierd execution order
Message-Id: <Pine.SOL.3.96.970702112053.19999A-100000@mamba.cs.Virginia.EDU>
Hi all,
The example program below is overly complicated, but it shows the
effect that I need. When I run the following, I get an error "Use of
uninitialized value at ./testing line 18".
------------ Start code ------------
sub returnarr {
return ("a","b","c");
}
sub getsecond (\@) {
my $aref = shift;
return $aref->[1];
}
print "getsecond (\@temp) results in: ";
@temp = returnarr();
print getsecond (@temp);
print "\n";
print "getsecond (\@{returnarr()}) results in: ";
print getsecond (@{returnarr()}); # LINE 18
print "\n";
------------ End code ------------
It seems like @{returnarr()} isn't being evaluated before getsecond is
called. In my "real" program there are other arguments to "getsecond" that
allow it to execute without error, and stepping through with the debugger
shows that "returnarr" is being executed *after* the print!
Can anyone shed some light on the semantic weirdness of @{}?
Thanks a lot,
David
_________________________________________________________________________
David Coppit - Graduate Student coppit@cs.virginia.edu
The University of Virginia http://www.cs.virginia.edu/~dwc3q
"Never imagine yourself not to be otherwise than what it might appear to
others that what you were or might have been was not otherwise than what
you had been would have appeared to them to be otherwise." -Lewis Carroll
------------------------------
Date: 02 Jul 1997 14:12:26 -0400
From: Larry Williamson <larry@mitra.com>
Subject: [Q] Any MS-Windows *.ini file handling modules/functions?
Message-Id: <x7radhs4qd.fsf@mitra.com>
We have some windows apps that manage files using the windows .ini
file api. This api allows windows apps to update .ini files in place
and to deal with multiple simultaneous accesses/updates.
We are trying to write a number of perl scripts that will be running
on a Solaris system that needs to access and update these same files.
Are there any modules or other packages that provide this type of api
for perl? (version 5.003).
Kind regards,
Larry
------------------------------
Date: Wed, 2 Jul 1997 15:11:27 GMT
From: aml@world.std.com (Andrew M. Langmead)
Subject: Re: Arrays of filehandles (Non-OOP)
Message-Id: <ECp673.Ar6@world.std.com>
matthew.freake@smlawpub.co.uk writes:
>I've consulted the Perl faq regarding creating an array of files handles
>and the suggested method is Object Oriented. Given that TMTOWTDI, is there
>any non Object Oriented means to achieve the same result.
>Failing that it looks like it might be time for me to finally learn OOP.
Don't get hung up about "learning OOP". Just using (not writing, not
extending) a perl object oriented library is fairly simple. Take a
look at <URL:http://www.perl.org/CPAN/doc/FMTEYEWTK/easy_objects.html>
for an simple introduction.
For the FileHandle module, All you need to do is get FileHandles like
this:
$array[$index] = FileHandle->new('filename');
and you can use the filehandle with the regular perl I/O calls:
$line = <$array[$index]>;
or
print {$array[$index]} @stuff;
For print(), there is an extra block of braces that aren't usually
there. The syntax for print requires the indirect object slot to
contain either a bare filehandle, a simple scalar that contains a
filehandle, or a block returning a filehandle. Since the array element
isn't a bare filehandle, and isn't a simple scalar, it needs to be a
block.
If you still want to avoid the FileHandle module, keep in mind that
you can also have a scalar contain the name of a filehandle:
$FILE_MAX = 'FILE0000';
for $file (@files) {
open $FILE_MAX, $file or die;
push @array, $FILE_MAX++;
}
--
Andrew Langmead
------------------------------
Date: Wed, 2 Jul 1997 08:01:32 -0700
From: Tom Phoenix <rootbeer@teleport.com>
To: Michael Heim <mike@mheim.com>
Subject: Re: Benchmark Perl5 Processing 1 Gig
Message-Id: <Pine.GSO.3.96.970702075651.18446D-100000@kelly.teleport.com>
On 2 Jul 1997, Michael Heim wrote:
> Anyone used Perl5 on large amounts of data (about
> a gigabyte)?
Sure, lots of us. (Of course, we try to keep only a few K in memory at any
given time! :-)
> Any idea how long it might take with these specifics:
>
> SUN Sparc 20
> Solaris 2.6
> Perl5
> Parsing 1 gig of ASCII text
> Putting the data into Oracle database
> Using embedded SQL to read, insert, update, delete....
Between one minute and one decade. :-) This is like asking, "How long
would it take to read a book about the size of War and Peace if you've
got a day job and three kids? Oh, you have to read it in Russian." :-)
Sorry I can't help more. Good luck!
--
Tom Phoenix http://www.teleport.com/~rootbeer/
rootbeer@teleport.com PGP Skribu al mi per Esperanto!
Randal Schwartz Case: http://www.rahul.net/jeffrey/ovs/
------------------------------
Date: Wed, 2 Jul 1997 08:09:29 -0700
From: Tom Phoenix <rootbeer@teleport.com>
To: Rolf Hatt <rolf@hallo.ch>
Subject: Re: Bug in sort ??
Message-Id: <Pine.GSO.3.96.970702080540.18446E-100000@kelly.teleport.com>
On Wed, 2 Jul 1997, Rolf Hatt wrote:
> sub numSort { $a <=> $b; }
> in the file "freeIP" are 1493 entries with IP-Addresses. After sorting
> them the first and the last entry (of the sorted order) are exactly in
> the middle of the new file !!
> Is it my fault or has sort a bug ?
It's your fault. :-) If one of these IP addresses looks like
"123.45.67.8", its numeric value will be 123.45, in this case. If you want
to retain all of those significant digits, you'll need to use a different
method.
One way would be to pack the address into four bytes, then use the default
ASCII-order sort. I think that would do what you want. Of course, you
could unpack the addresses after sorting.
Hope this helps!
--
Tom Phoenix http://www.teleport.com/~rootbeer/
rootbeer@teleport.com PGP Skribu al mi per Esperanto!
Randal Schwartz Case: http://www.rahul.net/jeffrey/ovs/
------------------------------
Date: Wed, 2 Jul 1997 17:04:45 GMT
From: ced@bcstec.ca.boeing.com (Charles DeRykus)
Subject: Re: Bug in sort ??
Message-Id: <ECpBFy.HLE@bcstec.ca.boeing.com>
In article <33BA2207.1F82C9AC@hallo.ch>, Rolf Hatt <rolf@hallo.ch> wrote:
>Hi,
>here a little sort program:
>
>#!/usr/local/bin/perl
>sub numSort { $a <=> $b; }
>open( FH, "/etc/freeIP" );
>@in = <FH>;
>close FH;
>@out = sort numSort @in;
>print @out;
>
>in the file "freeIP" are 1493 entries with IP-Addresses. After sorting
>them the first and the last entry (of the sorted order) are exactly in
>the middle of the new file !!
>Is it my fault or has sort a bug ?
Try this:
use Socket;
....
....
@out = sort {inet_aton($a) cmp inet_aton($b)} @in;
....
Maybe this is documented in CPAN somewhere or in
Tom Christiansen's FMTYEWTK treatise on sorting.
HTH,
--
Charles DeRykus
ced@carios2.ca.boeing.com
------------------------------
Date: Thu, 03 Jul 1997 05:26:27 -0400
From: Clinton Herget <herget@iag.net>
Subject: Error: Document Contains No Data
Message-Id: <33BB7043.5013@iag.net>
This is a multi-part message in MIME format.
--------------414325C22258
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hello. I am a beginner Perl programmer and am experimenting with a
script to rotate and manage banner advertisements on web pages. The
script is located at http://awsd.com/scripts/webadverts . They were
written for UNIX but I have an NT running IIS that usually does a good
job running 'NIX-based scripts. They worked pretty well until I accessed
a routine which writes an encrypted password to file. I am getting an
error 'Document Contains No Data' from my browser. Does anyone know what
causes this besides there being an extra 'Content-type' line? The script
I am working with is attached to this message. Any help would be
appreciated.
--
Clinton Herget
herget@iag.net
Somerset Technologies:
Web Design, Hosting and Promotion:
http://www.w3-sales.com/csh
--------------414325C22258
Content-Type: application/x-perl; name="ads_admin.pl"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="ads_admin.pl"
IyEvdXNyL2Jpbi9wZXJsCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwojIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwoj
IyAgICAgICAgICAgV2ViQWR2ZXJ0cyAoQWRtaW4pICAgICAgICAgICAjIwojIyAgICAgICAg
ICAgYnkgRGFycnlsIEJ1cmdkb3JmICAgICAgICAgICAjIwojIyAgICAgICAoZS1tYWlsIGJ1
cmdkb3JmQGF3c2QuY29tKSAgICAgICAjIwojIyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIwojIyAgICAgICAgIGxhc3QgbW9kaWZpZWQ6IDUvMjcvOTcgICAg
ICAgICAjIwojIyAgICAgICAgICAgY29weXJpZ2h0IChjKSAxOTk3ICAgICAgICAgICAjIwoj
IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyAgICBsYXRl
c3QgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSAgICAjIwojIyAgICAgICAgaHR0cDovL2F3
c2QuY29tL3NjcmlwdHMvICAgICAgICAjIwojIyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwoKIyBDT1BZUklHSFQgTk9USUNFOgojCiMgQ29weXJpZ2h0IDE5OTcgRGFycnls
IEMuIEJ1cmdkb3JmLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIwojIFRoaXMgcHJvZ3JhbSBt
YXkgYmUgdXNlZCBhbmQgbW9kaWZpZWQgZnJlZSBvZiBjaGFyZ2UgYnkgYW55b25lLCBzbwoj
IGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgaGVhZGVyIGFib3ZlIHJl
bWFpbiBpbnRhY3QuICBCeQojIHVzaW5nIHRoaXMgcHJvZ3JhbSB5b3UgYWdyZWUgdG8gaW5k
ZW1uaWZ5IERhcnJ5bCBDLiBCdXJnZG9yZiBmcm9tIGFueQojIGxpYWJpbGl0eS4KIwojIFNl
bGxpbmcgdGhlIGNvZGUgZm9yIHRoaXMgcHJvZ3JhbSB3aXRob3V0IHByaW9yIHdyaXR0ZW4g
Y29uc2VudCBpcwojIGV4cHJlc3NseSBmb3JiaWRkZW4uICBPYnRhaW4gcGVybWlzc2lvbiBi
ZWZvcmUgcmVkaXN0cmlidXRpbmcgdGhpcwojIHByb2dyYW0gb3ZlciB0aGUgSW50ZXJuZXQg
b3IgaW4gYW55IG90aGVyIG1lZGl1bS4gIEluIGFsbCBjYXNlcwojIGNvcHlyaWdodCBhbmQg
aGVhZGVyIG11c3QgcmVtYWluIGludGFjdC4KCiMgVkVSU0lPTiBISVNUT1JZOgojCiMgMS4w
NCAgMDUvMjcvOTcgIEFkZGVkIG5ldyBzY3JpcHQgdG8gZGlzcGxheSBhbGwgYWN0aXZlIGJh
bm5lcnMKIyAgICAgICAgICAgICAgICAgUHV0IHZhcmlhYmxlIGFzc2lnbm1lbnRzIGluIGNv
bmZpZ3VyYXRpb24gc2NyaXB0CiMgICAgICAgICAgICAgICAgIEFkZGVkIG9wdGlvbiB0byBk
ZWZpbmUgbWF4IGNsaWNrLXRocnVzCiMgICAgICAgICAgICAgICAgIEFkZGVkIGFiaWxpdHkg
dG8gIndlaWdodCIgYmFubmVycwojICAgICAgICAgICAgICAgICBBZGRlZCBzdGFydCBkYXRl
IHRvIGxvZyBpbmZvIGZvciBlYWNoIGFkdmVydAojICAgICAgICAgICAgICAgICBBZGRlZCAi
ZXhwb3N1cmVzIHBlciBkYXkiIHRvIGFkdmVydCBpbmZvIGRpc3BsYXkKIyAgICAgICAgICAg
ICAgICAgSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcKIyAgICAgICAgICAgICAgICAgQWRkZWQg
YmFzaWMgVVJMIGZvcm1hdCB2YWxpZGF0aW9uCiMgICAgICAgICAgICAgICAgIE51bWVyb3Vz
ICJ0d2Vha3MiIGFuZCBmb3JtYXQgYWRqdXN0bWVudHMKIyAxLjAzICAwNS8yMi85NyAgQWRk
ZWQgY29uZmlndXJhYmxlIGxpbmsgdGV4dAojICAgICAgICAgICAgICAgICBBZGRlZCBuZXcg
c2NyaXB0IHRvIHB1dCBiYW5uZXJzIGluIENHSSBwYWdlcwojICAgICAgICAgICAgICAgICBG
aXhlZCBidWdzIGludHJvZHVjZWQgYnkgcHJldmlvdXMgZmlsZSBsb2NraW5nICJmaXgiCiMg
ICAgICAgICAgICAgICAgIENvcnJlY3RlZCBzdHlsZSBvZiBtYWluIHBhc3N3b3JkIGlucHV0
IGJveAojICAgICAgICAgICAgICAgICBNaW5vciBidWcgZml4ZXMgaW4gZGlzcGxheSBjb2Rl
CiMgMS4wMiAgMDQvMjAvOTcgIEZpeGVkIGZpbGUgbG9ja2luZyEKIyAgICAgICAgICAgICAg
ICAgQWRkZWQgYWN0dWFsIGNsaWNrLXRocnUgcmF0aW9zIHRvIGRpc3BsYXkKIyAgICAgICAg
ICAgICAgICAgUmV2aXNlZCBkaXNwbGF5IG9mIHBlcmNlbnRhZ2VzCiMgMS4wMSAgMDQvMDMv
OTcgIEFsbG93ZWQgZm9yIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiBuZWNlc3NhcnkgdGV4dCBm
aWxlcwojICAgICAgICAgICAgICAgICBDbG9zZWQgaG9sZSB0aGF0IGFsbG93ZWQgc3BhY2Vz
IGluIGZpbGUgbmFtZXMKIyAxLjAwICAwNC8wMS85NyAgSW5pdGlhbCAicHVibGljIiByZWxl
YXNlCgpyZXF1aXJlICJmOi9odHRwL2xhcGF6L2h0ZG9jcy9jc2gvY2dpLXNobC9hZHMvYWRz
X2NvbmZpZ3VyZS5wbCI7CiZDb25maWd1cmVBZHZlcnRzOwoKJFVzZUxvY2tpbmcgPSAxOwpA
bW9udGhzID0gKEphbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3Ys
RGVjKTsKJHZlcnNpb24gPSAiMS4wNCI7CgpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0
bWxcblxuIjsKCnJlYWQoU1RESU4sICRidWZmZXIsICRFTlZ7J0NPTlRFTlRfTEVOR1RIJ30p
OwpAcGFpcnMgPSBzcGxpdCgvJi8sICRidWZmZXIpOwpmb3JlYWNoICRwYWlyIChAcGFpcnMp
IHsKCSgkbmFtZSwgJHZhbHVlKSA9IHNwbGl0KC89LywgJHBhaXIpOwoJJHZhbHVlID1+IHRy
LysvIC87CgkkdmFsdWUgPX4gcy8lKFthLWZBLUYwLTldW2EtZkEtRjAtOV0pL3BhY2soIkMi
LCBoZXgoJDEpKS9lZzsKCSRJTlBVVHskbmFtZX0gPSAkdmFsdWU7Cn0KCmlmICgkSU5QVVR7
J2VkaXQnfSkgeyAmZWRpdDsgfQplbHNpZiAoJElOUFVUeydkZWwnfSkgeyAmZGVsOyB9CmVs
c2lmICgkSU5QVVR7J25ld3Bhc3MnfSkgeyAmbmV3cGFzczsgfQplbHNpZiAoJElOUFVUeydy
ZXNldGNvdW50J30pIHsgJnJlc2V0Y291bnQ7IH0KZWxzaWYgKCRJTlBVVHsnZWRpdGZpbmFs
J30pIHsgJmVkaXRmaW5hbDsgfQplbHNpZiAoJElOUFVUeydkZWxmaW5hbCd9KSB7ICZkZWxm
aW5hbDsgfQplbHNpZiAoJElOUFVUeydyZXZpZXdhbGwnfSkgeyAmcmV2aWV3YWxsOyB9CmVs
c2lmICgkSU5QVVR7J3Jldmlld29uZSd9KSB7JnJldmlld29uZTsgfQplbHNlIHsgJnByaW50
b3B0aW9uczsgfQoKc3ViIHByaW50b3B0aW9ucyB7CglwcmludCAiPEhUTUw+PEhFQUQ+PFRJ
VExFPldlYkFkdmVydHMgQWNjZXNzIFBhZ2UiOwoJcHJpbnQgIjwvVElUTEU+PC9IRUFEPjxC
T0RZPlxuIjsKCXByaW50ICI8SDEgQUxJR049Q0VOVEVSPkFkbWluaXN0cmF0aXZlIEFjY2Vz
czwvSDE+XG4iOwoJcHJpbnQgIjxQPlRvIHZpZXcgdGhlIHN0YXR1cyBvZiBhbGwgYWR2ZXJ0
cyBhbmQgYWNjZXNzICI7CglwcmludCAiV2ViQWR2ZXJ0J3MgbWFpbiBhZG1pbmlzdHJhdGl2
ZSBmdW5jdGlvbnMsICI7CglwcmludCAiaW5wdXQgdGhlIGFkbWluaXN0cmF0aXZlIHBhc3N3
b3JkIGFuZCBjbGljayBvbiB0aGUgIjsKCXByaW50ICImcXVvdDtSZXZpZXcgQWxsIEFkdmVy
dHMmcXVvdDsgYnV0dG9uLiAiOwoJcHJpbnQgIlRvIHZpZXcgdGhlIHN0YXR1cyBvZiBhbnkg
c2luZ2xlIGFkdmVydCwgaW5wdXQgIjsKCXByaW50ICJ0aGUgcGFzc3dvcmQgYW5kIG5hbWUg
b2YgdGhlIGFkdmVydCB5b3Ugd2lzaCB0byB2aWV3LCAiOwoJcHJpbnQgImFuZCBjbGljayBv
biB0aGUgJnF1b3Q7UmV2aWV3IGEgU2luZ2xlIEFkdmVydCZxdW90OyAiOwoJcHJpbnQgImJ1
dHRvbi48L1A+XG4iOwoJcHJpbnQgIjxDRU5URVI+PEZPUk0gTUVUSE9EPVBPU1QgQUNUSU9O
PSRhZHZlcnRjZ2k+XG4iOwoJcHJpbnQgIjxQPjxTVFJPTkc+UGFzc3dvcmQ6PC9TVFJPTkc+
ICI7CglwcmludCAiPElOUFVUIFRZUEU9UEFTU1dPUkQgTkFNRT1wYXNzd29yZCBTSVpFPTEw
PiAiOwoJcHJpbnQgIjxTVFJPTkc+QWR2ZXJ0IE5hbWU6PC9TVFJPTkc+ICI7CglwcmludCAi
PElOUFVUIFRZUEU9VEVYVCBOQU1FPXJldmlldyBTSVpFPTEwPlxuIjsKCXByaW50ICI8UD48
SU5QVVQgVFlQRT1TVUJNSVQgTkFNRT1yZXZpZXdvbmUgIjsKCXByaW50ICJWQUxVRT1cIlJl
dmlldyBhIFNpbmdsZSBBZHZlcnRcIj4gIjsKCXByaW50ICI8SU5QVVQgVFlQRT1TVUJNSVQg
TkFNRT1yZXZpZXdhbGwgIjsKCXByaW50ICJWQUxVRT1cIlJldmlldyBBbGwgQWR2ZXJ0c1wi
PlxuIjsKCXByaW50ICI8L1A+PC9GT1JNPjwvQ0VOVEVSPlxuIjsKCSZGb290ZXI7CglleGl0
Owp9CgpzdWIgcmV2aWV3YWxsIHsKCXVubGVzcyAoJGFjdGlvbnJlc3VsdCA9PSAxKSB7CgkJ
dW5sZXNzICgkSU5QVVR7J3Bhc3N3b3JkJ30pIHsKCQkJcHJpbnQgIjxIVE1MPjxIRUFEPjxU
SVRMRT5ObyBQYXNzd29yZCEiOwoJCQlwcmludCAiPC9USVRMRT48L0hFQUQ+PEJPRFk+XG4i
OwoJCQlwcmludCAiPFAgQUxJR049Q0VOVEVSPllvdSBtdXN0IGVudGVyIGEgcGFzc3dvcmQh
PC9QPlxuIjsKCQkJJkZvb3RlcjsKCQkJZXhpdDsKCQl9CgkJb3BlbiAoUEFTU1dPUkQsICIk
YWR2ZXJ0c3Bhc3N3b3JkZmlsZSIpIHx8CgkJICAmRXJyb3JfRmlsZSgiJGFkdmVydHNwYXNz
d29yZGZpbGUiKTsKCQkkcGFzc3dvcmQgPSA8UEFTU1dPUkQ+OwoJCWNsb3NlIChQQVNTV09S
RCk7CgkJY2hvcCAoJHBhc3N3b3JkKSBpZiAoJHBhc3N3b3JkID1+IC9cbiQvKTsKCQlpZiAo
ISRwYXNzd29yZCkgewoJCQkkSU5QVVR7J3Bhc3NhZCd9ID0gJElOUFVUeydwYXNzd29yZCd9
OwoJCQkmbmV3cGFzczsKCQl9CgkJJG5ld3Bhc3N3b3JkID0gY3J5cHQoJElOUFVUeydwYXNz
d29yZCd9LCBhYSk7CgkJdW5sZXNzICgkbmV3cGFzc3dvcmQgZXEgJHBhc3N3b3JkKSB7CgkJ
CXByaW50ICI8SFRNTD48SEVBRD48VElUTEU+SW52YWxpZCBQYXNzd29yZCEiOwoJCQlwcmlu
dCAiPC9USVRMRT48L0hFQUQ+PEJPRFk+XG4iOwoJCQlwcmludCAiPFAgQUxJR049Q0VOVEVS
PiI7CgkJCXByaW50ICJUaGUgcGFzc3dvcmQgeW91IGVudGVyZWQgaXMgaW5jb3JyZWN0ITwv
UD5cbiI7CgkJCSZGb290ZXI7CgkJCWV4aXQ7CgkJfQoJfQoJcHJpbnQgIjxIVE1MPjxIRUFE
PjxUSVRMRT5XZWJBZHZlcnRzIE1haW4gQWRtaW4gUGFnZSI7CglwcmludCAiPC9USVRMRT48
L0hFQUQ+PEJPRFk+XG4iOwoJcHJpbnQgIjxGT1JNIE1FVEhPRD1QT1NUIEFDVElPTj0kYWR2
ZXJ0Y2dpPlxuIjsKCXByaW50ICI8UD48U1RST05HPlRoZSBmb2xsb3dpbmcgYWR2ZXJ0cyBh
cmUgcnVubmluZzo8L1NUUk9ORz5cbiI7CglwcmludCAiPFA+PFRBQkxFIENFTExQQURESU5H
PTY+XG4iOwoJcHJpbnQgIjxUUiBBTElHTj1DRU5URVI+PFREPjxFTT5BZHZlcnQ8L0VNPjwv
VEQ+IjsKCXByaW50ICI8VEQ+PEVNPlN0YXJ0IERhdGU8L0VNPjwvVEQ+IjsKCWlmICgkQWR2
ZXJ0VHJhY2tpbmcgPT0gMikgewoJCXByaW50ICI8VEQ+PEVNPkNsaWNrLVRocnVzIFB1cmNo
YXNlZDwvRU0+PC9URD4iOwoJfQoJZWxzZSB7CgkJcHJpbnQgIjxURD48RU0+RXhwb3N1cmVz
IFB1cmNoYXNlZDwvRU0+PC9URD4iOwoJfQoJcHJpbnQgIjxURD48RU0+JnF1b3Q7V2VpZ2h0
JnF1b3Q7PC9FTT48L1REPiI7CglwcmludCAiPFREPjxFTT5FeHBvc3VyZXMgVG8gRGF0ZTwv
RU0+PC9URD4iOwoJcHJpbnQgIjxURD48RU0+RXhwb3N1cmVzIFBlciBEYXk8L0VNPjwvVEQ+
IjsKCXByaW50ICI8VEQ+PEVNPkNsaWNrLVRocnVzPC9FTT48L1REPiI7CglwcmludCAiPFRE
PjxFTT5QZXJjZW50YWdlPC9FTT48L1REPiI7CglwcmludCAiPFREPjxFTT5SYXRpbzwvRU0+
PC9URD48L1RSPlxuIjsKCW9wZW4gKENPVU5ULCAiKzwkYWR2ZXJ0Y291bnQiKSB8fCAmRXJy
b3JfTGluZSgiJGFkdmVydGNvdW50Iik7CgkkbG9ja2Vycm9yID0gJkxvY2tGaWxlKENPVU5U
KTsKCWlmICgkbG9ja2Vycm9yKSB7CgkJcHJpbnQgIlsgRmlsZSBMb2NrIEVycm9yOiAkYWR2
ZXJ0Y291bnQgXSI7CgkJZXhpdDsKCX0KCUBsaW5lcyA9IDxDT1VOVD47CglpZiAoQGxpbmVz
IDwgMikgewoJCSRsaW5lc1swXSA9IDE7CgkJJGxpbmVzWzFdID0gMDsKCQkkbGluZXNbMl0g
PSB0aW1lOwoJCXRydW5jYXRlIChDT1VOVCwwKTsKCQlzZWVrKENPVU5ULCAwLCAwKTsKCQlm
b3JlYWNoICRsaW5lIChAbGluZXMpIHsgcHJpbnQgQ09VTlQgIiRsaW5lXG4iOyB9Cgl9Cgkm
VW5sb2NrRmlsZShDT1VOVCk7CgljbG9zZSAoQ09VTlQpOwoJZm9yZWFjaCAkbGluZSAoQGxp
bmVzKSB7IGNob3AgKCRsaW5lKSBpZiAoJGxpbmUgPX4gL1xuJC8pOyB9CgkkbWF4ID0gQGxp
bmVzIC0gMTsKCSRleHBvc3VyZXMgPSAkbGluZXNbMV07Cgkkc3RhcnR0aW1lID0gJGxpbmVz
WzJdOwoJQGFkdmVydGlzZW1lbnRzID0gQGxpbmVzWzMuLiRtYXhdOwoJZm9yZWFjaCAkYWR2
ZXJ0aXNlciAoQGFkdmVydGlzZW1lbnRzKSB7CgkJb3BlbiAoRElTUExBWSwgIiRhZHZlcnRz
X2Rpci8kYWR2ZXJ0aXNlci50eHQiKSB8fAoJCSAgJkVycm9yX0xpbmUoIiRhZHZlcnRzX2Rp
ci8kYWR2ZXJ0aXNlci50eHQiKTsKCQlAbGluZXMgPSA8RElTUExBWT47CgkJY2xvc2UgKERJ
U1BMQVkpOwoJCWZvcmVhY2ggJGxpbmUgKEBsaW5lcykgeyBjaG9wICgkbGluZSkgaWYgKCRs
aW5lID1+IC9cbiQvKTsgfQoJCSgkbWF4LCRzaG93biwkdmlzaXRzLCR1cmwsJGltYWdlLCRo
ZWlnaHQsJHdpZHRoLCRhbHQsJHBhc3MsJHRleHQsJHN0YXJ0LCR3ZWlnaHQpID0gQGxpbmVz
OwoJCWlmICgkc2hvd24gPT0gMCkgewoJCQkkcGVyYyA9ICJOL0EiOwoJCQkkcmF0aW8gPSAi
Ti9BIjsKCQl9CgkJZWxzaWYgKCR2aXNpdHMgPT0gMCkgewoJCQkkcGVyYyA9ICJOL0EiOwoJ
CQkkcmF0aW8gPSAiTi9BIjsKCQl9CgkJZWxzZSB7CgkJCSRwZXJjID0gKCgxMDAqKCR2aXNp
dHMvJHNob3duKSkrLjA1MDAxKTsKCQkJJHJhdGlvID0gKCgkc2hvd24vJHZpc2l0cykrLjUw
MDEpOwoJCX0KCQl1bmxlc3MgKCRwZXJjIGVxICJOL0EiKSB7CgkJCSRwZXJjID1+IHMvKFxk
K1wuXGQpLiovJDEvOwoJCQkkcGVyYyA9ICRwZXJjLiIlIjsKCQl9CgkJdW5sZXNzICgkcmF0
aW8gZXEgIk4vQSIpIHsKCQkJJHJhdGlvID1+IHMvKFxkKylcLlxkLiovJDEvOwoJCQkkcmF0
aW8gPSAkcmF0aW8uIjoxIjsKCQl9CgkJcHJpbnQgIjxUUiBBTElHTj1DRU5URVI+PFREPiRh
ZHZlcnRpc2VyPC9URD4iOwoJCSR0aW1lID0gMDsKCQlpZiAoJHN0YXJ0KSB7CgkJCSgkc2Vj
LCRtaW4sJGhvdXIsJG1kYXksJG1vbiwkeWVhciwkd2RheSwkeWRheSwkaXNkc3QpID0gbG9j
YWx0aW1lKCRzdGFydCk7CgkJCXByaW50ICI8VEQ+JG1kYXkgQG1vbnRoc1skbW9uXTwvVEQ+
IjsKCQkJJHRpbWUgPSB0aW1lOwoJCQkkdGltZSA9ICR0aW1lIC0gJHN0YXJ0ICsgMTsKCQl9
CgkJZWxzZSB7IHByaW50ICI8VEQ+PC9URD4iOyB9CgkJcHJpbnQgIjxURD4iLCZjb21tYXMo
JG1heCksIjwvVEQ+IjsKCQlwcmludCAiPFREPiR3ZWlnaHQ8L1REPiI7CgkJcHJpbnQgIjxU
RD4iLCZjb21tYXMoJHNob3duKSwiPC9URD4iOwoJCWlmICgkdGltZSA+IDg2NDAwKSB7CgkJ
CSRhdmVyYWdlID0gaW50KCgkc2hvd24vKCR0aW1lLzg2NDAwKSkrLjUpOwoJCQlwcmludCAi
PFREPiIsJmNvbW1hcygkYXZlcmFnZSksIjwvVEQ+IjsKCQl9CgkJZWxzZSB7CgkJCXByaW50
ICI8VEQ+Ti9BPC9URD4iOwoJCX0KCQlwcmludCAiPFREPiIsJmNvbW1hcygkdmlzaXRzKSwi
PC9URD4iOwoJCXByaW50ICI8VEQ+JHBlcmM8L1REPjxURD4kcmF0aW88L1REPjwvVFI+XG4i
OwoJfQoJcHJpbnQgIjwvVEFCTEU+PC9QPlxuIjsKCSgkc2VjLCRtaW4sJGhvdXIsJG1kYXks
JG1vbiwkeWVhciwkd2RheSwkeWRheSwkaXNkc3QpID0gbG9jYWx0aW1lKCRzdGFydHRpbWUp
OwoJaWYgKCRob3VyIDwgMTApIHsgJGhvdXIgPSAiMCIuJGhvdXI7IH0KCWlmICgkbWluIDwg
MTApIHsgJG1pbiA9ICIwIi4kbWluOyB9CglwcmludCAiPFA+KFNpbmNlICRob3VyOiRtaW4g
b24gJG1kYXkgQG1vbnRoc1skbW9uXSAxOSR5ZWFyLCAiOwoJcHJpbnQgInRoZXJlIGhhdmUg
YmVlbiBhIHRvdGFsIG9mIDxTVFJPTkc+IiwmY29tbWFzKCRleHBvc3VyZXMpOwoJcHJpbnQg
IjwvU1RST05HPiBhZHZlcnQgZXhwb3N1cmVzIjsKCSR0aW1lID0gdGltZTsKCSR0aW1lID0g
JHRpbWUgLSAkc3RhcnR0aW1lICsgMTsKCWlmICgkdGltZSA+IDg2NDAwKSB7CgkJJGF2ZXJh
Z2UgPSBpbnQoKCRleHBvc3VyZXMvKCR0aW1lLzg2NDAwKSkrLjUpOwoJCXByaW50ICIsIGZv
ciBhbiBhdmVyYWdlIG9mIDxTVFJPTkc+IiwmY29tbWFzKCRhdmVyYWdlKTsKCQlwcmludCAi
PC9TVFJPTkc+IGV4cG9zdXJlcyBwZXIgZGF5IjsKCX0KCXByaW50ICIuKVxuIjsKCXByaW50
ICI8UD48U1RST05HPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyAiOwoJcHJpbnQgImFyZSBhdmFp
bGFibGU6PC9TVFJPTkc+XG4iOwoJcHJpbnQgIjxQPjxJTlBVVCBUWVBFPVNVQk1JVCBOQU1F
PWVkaXQgIjsKCXByaW50ICJWQUxVRT1cIkFkZC9FZGl0IEFkdmVydDpcIj4gIjsKCXByaW50
ICI8SU5QVVQgVFlQRT1URVhUIE5BTUU9ZWRpdGFkIFNJWkU9MjUgIjsKCXByaW50ICJWQUxV
RT1cIihhZHZlcnQgbmFtZSlcIj5cbiI7CglwcmludCAiPFA+PElOUFVUIFRZUEU9U1VCTUlU
IE5BTUU9ZGVsIFZBTFVFPVwiRGVsZXRlIEFkdmVydDpcIj4gIjsKCXByaW50ICI8SU5QVVQg
VFlQRT1URVhUIE5BTUU9ZGVsYWQgU0laRT0yNSAiOwoJcHJpbnQgIlZBTFVFPVwiKGFkdmVy
dCBuYW1lKVwiPlxuIjsKCXByaW50ICI8UD48SU5QVVQgVFlQRT1TVUJNSVQgTkFNRT1uZXdw
YXNzICI7CglwcmludCAiVkFMVUU9XCJDaGFuZ2UgQWRtaW4gUGFzc3dvcmQ6XCI+ICI7Cglw
cmludCAiPElOUFVUIFRZUEU9VEVYVCBOQU1FPXBhc3NhZCBTSVpFPTI1ICI7CglwcmludCAi
VkFMVUU9XCIobmV3IHBhc3N3b3JkKVwiPlxuIjsKCXByaW50ICI8UD48SU5QVVQgVFlQRT1T
VUJNSVQgTkFNRT1yZXNldGNvdW50ICI7CglwcmludCAiVkFMVUU9XCJSZXNldCBPdmVyYWxs
IFRvdGFsIEV4cG9zdXJlcyBDb3VudFwiPlxuIjsKCXByaW50ICI8L1A+PC9GT1JNPlxuIjsK
CSZGb290ZXI7CglleGl0Owp9CgpzdWIgcmV2aWV3b25lIHsKCXVubGVzcyAoJElOUFVUeydw
YXNzd29yZCd9KSB7CgkJcHJpbnQgIjxIVE1MPjxIRUFEPjxUSVRMRT5ObyBQYXNzd29yZCEi
OwoJCXByaW50ICI8L1RJVExFPjwvSEVBRD48Qk9EWT5cbiI7CgkJcHJpbnQgIjxQIEFMSUdO
PUNFTlRFUj5Zb3UgbXVzdCBlbnRlciBhIHBhc3N3b3JkITwvUD5cbiI7CgkJJkZvb3RlcjsK
CQlleGl0OwoJfQoJdW5sZXNzICgtZSAiJGFkdmVydHNfZGlyLyRJTlBVVHsncmV2aWV3J30u
dHh0IikgewoJCXByaW50ICI8SFRNTD48SEVBRD48VElUTEU+SW52YWxpZCBBZHZlcnQgTmFt
ZSI7CgkJcHJpbnQgIjwvVElUTEU+PC9IRUFEPjxCT0RZPlxuIjsKCQlwcmludCAiPFAgQUxJ
R049Q0VOVEVSPlRoZXJlIGlzIG5vIGFkdmVydCB3aXRoIHRoZSBuYW1lICI7CgkJcHJpbnQg
IjxTVFJPTkc+JnF1b3Q7JElOUFVUeydyZXZpZXcnfSZxdW90OzwvU1RST05HPiBvbiB0aGUg
bGlzdCFcbiI7CgkJcHJpbnQgIjxQIEFMSUdOPUNFTlRFUj4oTm90ZSB0aGF0IGFkdmVydCBu
YW1lcyA8RU0+YXJlPC9FTT4gIjsKCQlwcmludCAiY2FzZSBzZW5zaXRpdmUhKTwvUD5cbiI7
CgkJJkZvb3RlcjsKCQlleGl0OwoJfQoJb3BlbiAoRElTUExBWSwgIiRhZHZlcnRzX2Rpci8k
SU5QVVR7J3Jldmlldyd9LnR4dCIpIHx8CgkgICZFcnJvcl9GaWxlKCIkYWR2ZXJ0c19kaXIv
JElOUFVUeydyZXZpZXcnfS50eHQiKTsKCUBsaW5lcyA9IDxESVNQTEFZPjsKCWNsb3NlIChE
SVNQTEFZKTsKCWZvcmVhY2ggJGxpbmUgKEBsaW5lcykgeyBjaG9wICgkbGluZSkgaWYgKCRs
aW5lID1+IC9cbiQvKTsgfQoJKCRtYXgsJHNob3duLCR2aXNpdHMsJHVybCwkaW1hZ2UsJGhl
aWdodCwkd2lkdGgsJGFsdCwkcGFzcywkdGV4dCwkc3RhcnQsJHdlaWdodCkgPSBAbGluZXM7
Cgl1bmxlc3MgKCR0ZXh0KSB7ICR0ZXh0ID0gIlBsZWFzZSBWaXNpdCBPdXIgU3BvbnNvciEi
OyB9CgkkbmV3cGFzc3dvcmQgPSBjcnlwdCgkSU5QVVR7J3Bhc3N3b3JkJ30sIGFhKTsKCXVu
bGVzcyAoJG5ld3Bhc3N3b3JkIGVxICRwYXNzKSB7CgkJb3BlbiAoUEFTU1dPUkQsICIkYWR2
ZXJ0c3Bhc3N3b3JkZmlsZSIpIHx8CgkJICAmRXJyb3JfRmlsZSgiJGFkdmVydHNwYXNzd29y
ZGZpbGUiKTsKCQkkcGFzc3dvcmQgPSA8UEFTU1dPUkQ+OwoJCWNsb3NlIChQQVNTV09SRCk7
CgkJY2hvcCAoJHBhc3N3b3JkKSBpZiAoJHBhc3N3b3JkID1+IC9cbiQvKTsKCQl1bmxlc3Mg
KCRwYXNzd29yZCAmJiAoJG5ld3Bhc3N3b3JkIGVxICRwYXNzd29yZCkpIHsKCQkJcHJpbnQg
IjxIVE1MPjxIRUFEPjxUSVRMRT5JbnZhbGlkIFBhc3N3b3JkISI7CgkJCXByaW50ICI8L1RJ
VExFPjwvSEVBRD48Qk9EWT5cbiI7CgkJCXByaW50ICI8UCBBTElHTj1DRU5URVI+IjsKCQkJ
cHJpbnQgIlRoZSBwYXNzd29yZCB5b3UgZW50ZXJlZCBpcyBpbmNvcnJlY3QhPC9QPlxuIjsK
CQkJJkZvb3RlcjsKCQkJZXhpdDsKCQl9Cgl9CglwcmludCAiPEhUTUw+PEhFQUQ+PFRJVExF
PldlYkFkdmVydHMgUmV2aWV3IFBhZ2UiOwoJcHJpbnQgIjwvVElUTEU+PC9IRUFEPjxCT0RZ
PlxuIjsKCXByaW50ICI8UD48U1RST05HPkN1cnJlbnQgc3RhdHVzIG9mIHRoZSAiOwoJcHJp
bnQgIiRJTlBVVHsncmV2aWV3J30gYWR2ZXJ0OjwvU1RST05HPjwvUD5cbiI7CglwcmludCAi
PFA+PFRBQkxFIENFTExQQURESU5HPTY+XG4iOwoJcHJpbnQgIjxUUiBBTElHTj1DRU5URVI+
PFREPjxFTT5BZHZlcnQ8L0VNPjwvVEQ+IjsKCXByaW50ICI8VEQ+PEVNPlN0YXJ0IERhdGU8
L0VNPjwvVEQ+IjsKCWlmICgkQWR2ZXJ0VHJhY2tpbmcgPT0gMikgewoJCXByaW50ICI8VEQ+
PEVNPkNsaWNrLVRocnVzIFB1cmNoYXNlZDwvRU0+PC9URD4iOwoJfQoJZWxzZSB7CgkJcHJp
bnQgIjxURD48RU0+RXhwb3N1cmVzIFB1cmNoYXNlZDwvRU0+PC9URD4iOwoJfQoJcHJpbnQg
IjxURD48RU0+RXhwb3N1cmVzIFRvIERhdGU8L0VNPjwvVEQ+IjsKCXByaW50ICI8VEQ+PEVN
PkV4cG9zdXJlcyBQZXIgRGF5PC9FTT48L1REPiI7CglwcmludCAiPFREPjxFTT5DbGljay1U
aHJ1czwvRU0+PC9URD4iOwoJcHJpbnQgIjxURD48RU0+UGVyY2VudGFnZTwvRU0+PC9URD4i
OwoJcHJpbnQgIjxURD48RU0+UmF0aW88L0VNPjwvVEQ+PC9UUj5cbiI7CglpZiAoJHNob3du
ID09IDApIHsKCQkkcGVyYyA9ICJOL0EiOwoJCSRyYXRpbyA9ICJOL0EiOwoJfQoJZWxzaWYg
KCR2aXNpdHMgPT0gMCkgewoJCSRwZXJjID0gIk4vQSI7CgkJJHJhdGlvID0gIk4vQSI7Cgl9
CgllbHNlIHsKCQkkcGVyYyA9ICgoMTAwKigkdmlzaXRzLyRzaG93bikpKy4wNTAwMSk7CgkJ
JHJhdGlvID0gKCgkc2hvd24vJHZpc2l0cykrLjUwMDEpOwoJfQoJdW5sZXNzICgkcGVyYyBl
cSAiTi9BIikgewoJCSRwZXJjID1+IHMvKFxkK1wuXGQpLiovJDEvOwoJCSRwZXJjID0gJHBl
cmMuIiUiOwoJfQoJdW5sZXNzICgkcmF0aW8gZXEgIk4vQSIpIHsKCQkkcmF0aW8gPX4gcy8o
XGQrKVwuXGQuKi8kMS87CgkJJHJhdGlvID0gJHJhdGlvLiI6MSI7Cgl9CglwcmludCAiPFRS
IEFMSUdOPUNFTlRFUj48VEQ+JElOUFVUeydyZXZpZXcnfTwvVEQ+IjsKCSR0aW1lID0gMDsK
CWlmICgkc3RhcnQpIHsKCQkoJHNlYywkbWluLCRob3VyLCRtZGF5LCRtb24sJHllYXIsJHdk
YXksJHlkYXksJGlzZHN0KSA9IGxvY2FsdGltZSgkc3RhcnQpOwoJCXByaW50ICI8VEQ+JG1k
YXkgQG1vbnRoc1skbW9uXTwvVEQ+IjsKCQkkdGltZSA9IHRpbWU7CgkJJHRpbWUgPSAkdGlt
ZSAtICRzdGFydCArIDE7Cgl9CgllbHNlIHsgcHJpbnQgIjxURD48L1REPiI7IH0KCXByaW50
ICI8VEQ+IiwmY29tbWFzKCRtYXgpLCI8L1REPiI7CglwcmludCAiPFREPiIsJmNvbW1hcygk
c2hvd24pLCI8L1REPiI7CglpZiAoJHRpbWUgPiA4NjQwMCkgewoJCSRhdmVyYWdlID0gaW50
KCgkc2hvd24vKCR0aW1lLzg2NDAwKSkrLjUpOwoJCXByaW50ICI8VEQ+IiwmY29tbWFzKCRh
dmVyYWdlKSwiPC9URD4iOwoJfQoJZWxzZSB7CgkJcHJpbnQgIjxURD5OL0E8L1REPiI7Cgl9
CglwcmludCAiPFREPiIsJmNvbW1hcygkdmlzaXRzKSwiPC9URD4iOwoJcHJpbnQgIjxURD4k
cGVyYzwvVEQ+PFREPiRyYXRpbzwvVEQ+PC9UUj5cbiI7CglwcmludCAiPC9UQUJMRT48L1A+
XG4iOwoJcHJpbnQgIjxQPjxFTT5TaXRlIFVSTDo8L0VNPiAkdXJsXG4iOwoJcHJpbnQgIjxC
Uj48RU0+QmFubmVyIFVSTDo8L0VNPiAkaW1hZ2VcbiI7CglwcmludCAiPEJSPjxFTT5BTFQg
VGV4dDo8L0VNPiAkYWx0XG4iOwoJcHJpbnQgIjxCUj48RU0+TGluayBUZXh0OjwvRU0+ICR0
ZXh0XG4iOwoJcHJpbnQgIjxQPlRoZSBhZHZlcnQgYXBwZWFycyBhcyBzaG93biBiZWxvdzpc
biI7CglwcmludCAiPFAgQUxJR049Q0VOVEVSPjxBIEhSRUY9XCIkZ290b2FkdmVydD8kSU5Q
VVR7J3Jldmlldyd9XCI+IjsKCXByaW50ICI8SU1HIFNSQz1cIiRpbWFnZVwiIEhFSUdIVD0k
aGVpZ2h0IFdJRFRIPSR3aWR0aCAiOwoJcHJpbnQgIkFMVD1cIiRhbHRcIj4iOwoJcHJpbnQg
IjwvQT48QlI+PFNNQUxMPjxBIEhSRUY9XCIkZ290b2FkdmVydD8kSU5QVVR7J3Jldmlldyd9
XCI+IjsKCXByaW50ICIkdGV4dDwvU01BTEw+PC9BPjwvUD5cbiI7CgkmRm9vdGVyOwoJZXhp
dDsKfQoKc3ViIGVkaXQgewoJJElOUFVUeydlZGl0YWQnfSA9fiBzL1sgXC9cXF0vL2c7Cglp
ZiAoLWUgIiRhZHZlcnRzX2Rpci8kSU5QVVR7J2VkaXRhZCd9LnR4dCIpIHsKCQlvcGVuIChE
SVNQTEFZLCAiJGFkdmVydHNfZGlyLyRJTlBVVHsnZWRpdGFkJ30udHh0IikgfHwKCQkgICZF
cnJvcl9GaWxlKCIkYWR2ZXJ0c19kaXIvJElOUFVUeydlZGl0YWQnfS50eHQiKTsKCQlAbGlu
ZXMgPSA8RElTUExBWT47CgkJY2xvc2UgKERJU1BMQVkpOwoJCWZvcmVhY2ggJGxpbmUgKEBs
aW5lcykgeyBjaG9wICgkbGluZSkgaWYgKCRsaW5lID1+IC9cbiQvKTsgfQoJCSgkbWF4LCRz
aG93biwkdmlzaXRzLCR1cmwsJGltYWdlLCRoZWlnaHQsJHdpZHRoLCRhbHQsJHBhc3MsJHRl
eHQsJHN0YXJ0LCR3ZWlnaHQpID0gQGxpbmVzOwoJfQoJdW5sZXNzICgkdGV4dCkgeyAkdGV4
dCA9ICJQbGVhc2UgVmlzaXQgT3VyIFNwb25zb3IhIjsgfQoJdW5sZXNzICgkdXJsKSB7ICR1
cmwgPSAiaHR0cDovLyI7IH0KCXVubGVzcyAoJGltYWdlKSB7ICRpbWFnZSA9ICJodHRwOi8v
IjsgfQoJdW5sZXNzICgkd2VpZ2h0KSB7ICR3ZWlnaHQgPSAxOyB9CglwcmludCAiPEhUTUw+
PEhFQUQ+PFRJVExFPldlYkFkdmVydHMgQWRkL0VkaXQgUGFnZSI7CglwcmludCAiPC9USVRM
RT48L0hFQUQ+PEJPRFk+XG4iOwoJcHJpbnQgIjxGT1JNIE1FVEhPRD1QT1NUIEFDVElPTj0k
YWR2ZXJ0Y2dpPlxuIjsKCXByaW50ICI8UD48U1RST05HPkluZm8gZm9yICI7CglwcmludCAi
JElOUFVUeydlZGl0YWQnfSBhZHZlcnQ6PC9TVFJPTkc+PC9QPlxuIjsKCXByaW50ICI8UD48
VEFCTEUgQ0VMTFBBRERJTkc9Nj5cbiI7CglpZiAoJEFkdmVydFRyYWNraW5nID09IDIpIHsK
CQlwcmludCAiPFRSPjxURD5DbGljay1UaHJ1cyBQdXJjaGFzZWQ6IjsKCX0KCWVsc2UgewoJ
CXByaW50ICI8VFI+PFREPkV4cG9zdXJlcyBQdXJjaGFzZWQ6IjsKCX0KCXByaW50ICI8L1RE
PjxURD48SU5QVVQgVFlQRT1URVhUICI7CglwcmludCAiTkFNRT1wdXJjaCBWQUxVRT1cIiRt
YXhcIiBTSVpFPTEwPjwvVEQ+PC9UUj5cbiI7CglwcmludCAiPFRSPjxURD4mcXVvdDtXZWln
aHQmcXVvdDs6PC9URD48VEQ+PElOUFVUIFRZUEU9VEVYVCAiOwoJcHJpbnQgIk5BTUU9d2Vp
Z2h0IFZBTFVFPVwiJHdlaWdodFwiIFNJWkU9NT48L1REPjwvVFI+XG4iOwoJcHJpbnQgIjxU
Uj48VEQ+U2l0ZSBVUkw6PC9URD48VEQ+PElOUFVUIFRZUEU9VEVYVCAiOwoJcHJpbnQgIk5B
TUU9dXJsIFZBTFVFPVwiJHVybFwiIFNJWkU9NDA+PC9URD48L1RSPlxuIjsKCXByaW50ICI8
VFI+PFREPkJhbm5lciBVUkw6PC9URD48VEQ+PElOUFVUIFRZUEU9VEVYVCAiOwoJcHJpbnQg
Ik5BTUU9aW1hZ2UgVkFMVUU9XCIkaW1hZ2VcIiBTSVpFPTQwPjwvVEQ+PC9UUj5cbiI7Cglw
cmludCAiPFRSPjxURD5CYW5uZXIgSGVpZ2h0OjwvVEQ+PFREPjxJTlBVVCBUWVBFPVRFWFQg
IjsKCXByaW50ICJOQU1FPWhlaWdodCBWQUxVRT1cIiRoZWlnaHRcIiBTSVpFPTU+IHBpeGVs
czwvVEQ+PC9UUj5cbiI7CglwcmludCAiPFRSPjxURD5CYW5uZXIgV2lkdGg6PC9URD48VEQ+
PElOUFVUIFRZUEU9VEVYVCAiOwoJcHJpbnQgIk5BTUU9d2lkdGggVkFMVUU9XCIkd2lkdGhc
IiBTSVpFPTU+IHBpeGVsczwvVEQ+PC9UUj5cbiI7CglwcmludCAiPFRSPjxURD5BTFQgVGV4
dDo8L1REPjxURD48SU5QVVQgVFlQRT1URVhUICI7CglwcmludCAiTkFNRT1hbHQgVkFMVUU9
XCIkYWx0XCIgU0laRT00MD48L1REPjwvVFI+XG4iOwoJcHJpbnQgIjxUUj48VEQ+TGluayBU
ZXh0OjwvVEQ+PFREPjxJTlBVVCBUWVBFPVRFWFQgIjsKCXByaW50ICJOQU1FPXRleHQgVkFM
VUU9XCIkdGV4dFwiIFNJWkU9NDA+PC9URD48L1RSPlxuIjsKCXByaW50ICI8VFI+PFREPlBh
c3N3b3JkOjwvVEQ+PFREPjxJTlBVVCBUWVBFPVRFWFQgIjsKCXByaW50ICJOQU1FPXBhc3Mg
U0laRT00MD48L1REPjwvVFI+XG4iOwoJcHJpbnQgIjwvVEFCTEU+PC9QPlxuIjsKCXByaW50
ICI8UD48SU5QVVQgVFlQRT1ISURERU4gTkFNRT1lZGl0YWQgIjsKCXByaW50ICJWQUxVRT1c
IiRJTlBVVHsnZWRpdGFkJ31cIj5cbiI7CglwcmludCAiPElOUFVUIFRZUEU9SElEREVOIE5B
TUU9c3RhcnQgVkFMVUU9XCIkc3RhcnRcIj5cbiI7CglwcmludCAiQ2hlY2sgaGVyZSB0byBy
ZXNldCBhZHZlcnQgc3RhcnQgZGF0ZSwgIjsKCXByaW50ICJleHBvc3VyZXMgJmFtcDsgY2xp
Y2stdGhydXM6ICI7CglwcmludCAiPElOUFVUIFRZUEU9Q0hFQ0tCT1ggTkFNRT1cInJlc2V0
YWR2ZXJ0XCI+IjsKCXByaW50ICI8UD48SU5QVVQgVFlQRT1TVUJNSVQgTkFNRT1lZGl0Zmlu
YWwgIjsKCXByaW50ICJWQUxVRT1cIkFkZC9FZGl0XCI+XG4iOwoJcHJpbnQgIjwvUD48L0ZP
Uk0+XG4iOwoJJkZvb3RlcjsKCWV4aXQ7Cn0KCnN1YiBkZWwgewoJdW5sZXNzICgtZSAiJGFk
dmVydHNfZGlyLyRJTlBVVHsnZGVsYWQnfS50eHQiKSB7CgkJcHJpbnQgIjxIVE1MPjxIRUFE
PjxUSVRMRT5JbnZhbGlkIEFkdmVydCBOYW1lIjsKCQlwcmludCAiPC9USVRMRT48L0hFQUQ+
PEJPRFk+XG4iOwoJCXByaW50ICI8UCBBTElHTj1DRU5URVI+VGhlcmUgaXMgbm8gYWR2ZXJ0
IHdpdGggdGhlIG5hbWUgIjsKCQlwcmludCAiPFNUUk9ORz4mcXVvdDskSU5QVVR7J2RlbGFk
J30mcXVvdDs8L1NUUk9ORz4gb24gdGhlIGxpc3QhXG4iOwoJCXByaW50ICI8UCBBTElHTj1D
RU5URVI+KE5vdGUgdGhhdCBhZHZlcnQgbmFtZXMgPEVNPmFyZTwvRU0+ICI7CgkJcHJpbnQg
ImNhc2Ugc2Vuc2l0aXZlISk8L1A+XG4iOwoJCSZGb290ZXI7CgkJZXhpdDsKCX0KCXByaW50
ICI8SFRNTD48SEVBRD48VElUTEU+V2ViQWR2ZXJ0cyBEZWxldGUgUGFnZSI7CglwcmludCAi
PC9USVRMRT48L0hFQUQ+PEJPRFk+XG4iOwoJcHJpbnQgIjxGT1JNIE1FVEhPRD1QT1NUIEFD
VElPTj0kYWR2ZXJ0Y2dpPlxuIjsKCXByaW50ICI8UD5BcmUgeW91IHN1cmUgeW91IHdhbnQg
dG8gZGVsZXRlIHRoZSAiOwoJcHJpbnQgIjxTVFJPTkc+JElOUFVUeydkZWxhZCd9PC9TVFJP
Tkc+IGFkdmVydD9cbiI7CglwcmludCAiPElOUFVUIFRZUEU9SElEREVOIE5BTUU9ZGVsYWQg
VkFMVUU9JElOUFVUeydkZWxhZCd9PlxuIjsKCXByaW50ICI8SU5QVVQgVFlQRT1TVUJNSVQg
TkFNRT1kZWxmaW5hbCBWQUxVRT1cIlllc1wiPlxuIjsKCXByaW50ICI8L1A+PC9GT1JNPlxu
IjsKCSZGb290ZXI7CglleGl0Owp9CgpzdWIgbmV3cGFzcyB7CgkkbmV3cGFzc3dvcmQgPSBj
cnlwdCgkSU5QVVR7J3Bhc3NhZCd9LCBhYSk7CglvcGVuIChQQVNTV09SRCwgIj4kYWR2ZXJ0
c3Bhc3N3b3JkZmlsZSIpIHx8CgkgICZFcnJvcl9GaWxlKCIkYWR2ZXJ0c3Bhc3N3b3JkZmls
ZSIpOwoJJGxvY2tlcnJvciA9ICZMb2NrRmlsZShQQVNTV09SRCk7CglpZiAoJGxvY2tlcnJv
cikgewoJCXByaW50ICJbIEZpbGUgTG9jayBFcnJvcjogJGFkdmVydHNwYXNzd29yZGZpbGUg
XSI7CgkJZXhpdDsKCX0KCXByaW50IFBBU1NXT1JEICIkbmV3cGFzc3dvcmQiOwoJJlVubG9j
a0ZpbGUoUEFTU1dPUkQpOwoJY2xvc2UgKFBBU1NXT1JEKTsKCXByaW50ICI8SFRNTD48SEVB
RD48VElUTEU+UGFzc3dvcmQgQ2hhbmdlZCI7CglwcmludCAiPC9USVRMRT48L0hFQUQ+PEJP
RFk+XG4iOwoJcHJpbnQgIjxQIEFMSUdOPUNFTlRFUj5UaGUgbmV3IGFkbWluaXN0cmF0aXZl
IHBhc3N3b3JkIGlzICI7CglwcmludCAiPFNUUk9ORz4kSU5QVVR7J3Bhc3NhZCd9PC9TVFJP
Tkc+LjwvUD5cbiI7CgkmRm9vdGVyOwoJZXhpdDsKfQoKc3ViIHJlc2V0Y291bnQgewoJb3Bl
biAoQ09VTlQsICIrPCRhZHZlcnRjb3VudCIpIHx8ICZFcnJvcl9GaWxlKCIkYWR2ZXJ0Y291
bnQiKTsKCSRsb2NrZXJyb3IgPSAmTG9ja0ZpbGUoQ09VTlQpOwoJaWYgKCRsb2NrZXJyb3Ip
IHsKCQlwcmludCAiWyBGaWxlIExvY2sgRXJyb3I6ICRhZHZlcnRjb3VudCBdIjsKCQlleGl0
OwoJfQoJQGxpbmVzID0gPENPVU5UPjsKCWZvcmVhY2ggJGxpbmUgKEBsaW5lcykgeyBjaG9w
ICgkbGluZSkgaWYgKCRsaW5lID1+IC9cbiQvKTsgfQoJJG1heCA9IEBsaW5lcyAtIDE7Cgkk
Y291bnQgPSAkbGluZXNbMF07CgkkdGltZSA9IHRpbWU7Cgl0cnVuY2F0ZSAoQ09VTlQsMCk7
CglzZWVrKENPVU5ULCAwLCAwKTsKCXByaW50IENPVU5UICIkY291bnRcbiI7CglwcmludCBD
T1VOVCAiMFxuIjsKCXByaW50IENPVU5UICIkdGltZVxuIjsKCUBhZHZlcnRpc2VtZW50cyA9
IEBsaW5lc1szLi4kbWF4XTsKCWZvcmVhY2ggJGFkdmVydGlzZXIgKEBhZHZlcnRpc2VtZW50
cykgewoJCXByaW50IENPVU5UICIkYWR2ZXJ0aXNlclxuIjsKCX0KCSZVbmxvY2tGaWxlKENP
VU5UKTsKCWNsb3NlIChDT1VOVCk7CgkkYWN0aW9ucmVzdWx0ID0gMTsKCSZyZXZpZXdhbGw7
Cn0KCnN1YiBlZGl0ZmluYWwgewoJJGVkaXRhZCA9ICRJTlBVVHsnZWRpdGFkJ307CglpZiAo
LWUgIiRhZHZlcnRzX2Rpci8kZWRpdGFkLnR4dCIpIHsKCQlvcGVuIChESVNQTEFZLCAiJGFk
dmVydHNfZGlyLyRlZGl0YWQudHh0IikgfHwKCQkgICZFcnJvcl9GaWxlKCIkYWR2ZXJ0c19k
aXIvJGVkaXRhZC50eHQiKTsKCQlAbGluZXMgPSA8RElTUExBWT47CgkJY2xvc2UgKERJU1BM
QVkpOwoJCWZvcmVhY2ggJGxpbmUgKEBsaW5lcykgeyBjaG9wICgkbGluZSkgaWYgKCRsaW5l
ID1+IC9cbiQvKTsgfQoJCSgkbWF4LCRzaG93biwkdmlzaXRzLCR1cmwsJGltYWdlLCRoZWln
aHQsJHdpZHRoLCRhbHQsJHBhc3MsJHRleHQsJHN0YXJ0LCR3ZWlnaHQpID0gQGxpbmVzOwoJ
fQoJZWxzZSB7CgkJb3BlbiAoQ09VTlQsICI+PiRhZHZlcnRjb3VudCIpIHx8CgkJICAmRXJy
b3JfRmlsZSgiJGFkdmVydGNvdW50Iik7CgkJJGxvY2tlcnJvciA9ICZMb2NrRmlsZShDT1VO
VCk7CgkJaWYgKCRsb2NrZXJyb3IpIHsKCQkJcHJpbnQgIlsgRmlsZSBMb2NrIEVycm9yOiAk
YWR2ZXJ0Y291bnQgXSI7CgkJCWV4aXQ7CgkJfQoJCXByaW50IENPVU5UICIkZWRpdGFkXG4i
OwoJCSZVbmxvY2tGaWxlKENPVU5UKTsKCQljbG9zZSAoQ09VTlQpOwoJCSRzaG93biA9IDA7
CgkJJHZpc2l0cyA9IDA7CgkJJHN0YXJ0ID0gdGltZTsKCX0KCSRJTlBVVHsndXJsJ30gPX4g
cy8gfDt8LHxcKi8vZzsKCWlmICgkSU5QVVR7J3VybCd9ID1+IC8uKlw6XC9cLy4qXC4uKi8p
IHsKCQkkdXJsID0gJElOUFVUeyd1cmwnfTsKCX0KCSRJTlBVVHsnaW1hZ2UnfSA9fiBzLyB8
O3wsfFwqLy9nOwoJaWYgKCRJTlBVVHsnaW1hZ2UnfSA9fiAvLipcOlwvXC8uKlwuLiovKSB7
CgkJJGltYWdlID0gJElOUFVUeydpbWFnZSd9OwoJfQoJJG1heCA9ICRJTlBVVHsncHVyY2gn
fTsKCSRoZWlnaHQgPSAkSU5QVVR7J2hlaWdodCd9OwoJJHdpZHRoID0gJElOUFVUeyd3aWR0
aCd9OwoJJGFsdCA9ICRJTlBVVHsnYWx0J307CgkkdGV4dCA9ICRJTlBVVHsndGV4dCd9OwoJ
JHdlaWdodCA9ICRJTlBVVHsnd2VpZ2h0J307CglpZiAoJHdlaWdodCA8IC4wMSkgeyAkd2Vp
Z2h0ID0gMDsgfQoJaWYgKCR3ZWlnaHQgPiAxKSB7ICR3ZWlnaHQgPSAxOyB9CglpZiAoJElO
UFVUeydyZXNldGFkdmVydCd9KSB7CgkJJHNob3duID0gMDsKCQkkdmlzaXRzID0gMDsKCQkk
c3RhcnQgPSB0aW1lOwoJfQoJaWYgKCRJTlBVVHsncGFzcyd9KSB7ICRwYXNzID0gY3J5cHQo
JElOUFVUeydwYXNzJ30sIGFhKTsgfQoJdW5sZXNzICgkbWF4ICYmICR1cmwgJiYgJGltYWdl
ICYmICRoZWlnaHQgJiYgJHdpZHRoICYmICRhbHQgJiYgJHRleHQgJiYgJHBhc3MpIHsKCQlw
cmludCAiPEhUTUw+PEhFQUQ+PFRJVExFPkluY29tcGxldGUgQWR2ZXJ0IjsKCQlwcmludCAi
PC9USVRMRT48L0hFQUQ+PEJPRFk+XG4iOwoJCXByaW50ICI8UD5Zb3UgZGlkbid0IHByb3Zp
ZGUgYWxsIG9mIHRoZSBuZWNlc3NhcnkgIjsKCQlwcmludCAiaW5mb3JtYXRpb24gdG8gYWxs
b3cgIjsKCQlwcmludCAiYWRkaXRpb24gb2YgdGhlIDxTVFJPTkc+JGVkaXRhZDwvU1RST05H
PiAiOwoJCXByaW50ICJhZHZlcnQhPC9QPlxuIjsKCQkmRm9vdGVyOwoJCWV4aXQ7Cgl9Cglv
cGVuIChESVNQTEFZLCAiPiRhZHZlcnRzX2Rpci8kZWRpdGFkLnR4dCIpIHx8CgkgICZFcnJv
cl9GaWxlKCIkYWR2ZXJ0c19kaXIvJGVkaXRhZC50eHQiKTsKCSRsb2NrZXJyb3IgPSAmTG9j
a0ZpbGUoRElTUExBWSk7CglpZiAoJGxvY2tlcnJvcikgewoJCXByaW50ICJbIEZpbGUgTG9j
ayBFcnJvcjogJGVkaXRhZC50eHQgXSI7CgkJZXhpdDsKCX0KCXByaW50IERJU1BMQVkgIiRt
YXhcbiI7CglwcmludCBESVNQTEFZICIkc2hvd25cbiI7CglwcmludCBESVNQTEFZICIkdmlz
aXRzXG4iOwoJcHJpbnQgRElTUExBWSAiJHVybFxuIjsKCXByaW50IERJU1BMQVkgIiRpbWFn
ZVxuIjsKCXByaW50IERJU1BMQVkgIiRoZWlnaHRcbiI7CglwcmludCBESVNQTEFZICIkd2lk
dGhcbiI7CglwcmludCBESVNQTEFZICIkYWx0XG4iOwoJcHJpbnQgRElTUExBWSAiJHBhc3Nc
biI7CglwcmludCBESVNQTEFZICIkdGV4dFxuIjsKCXByaW50IERJU1BMQVkgIiRzdGFydFxu
IjsKCXByaW50IERJU1BMQVkgIiR3ZWlnaHRcbiI7CgkmVW5sb2NrRmlsZShESVNQTEFZKTsK
CWNsb3NlIChESVNQTEFZKTsKCXByaW50ICI8SFRNTD48SEVBRD48VElUTEU+QWR2ZXJ0IFVw
ZGF0ZWQiOwoJcHJpbnQgIjwvVElUTEU+PC9IRUFEPjxCT0RZPlxuIjsKCXByaW50ICI8UD5U
aGUgPFNUUk9ORz4kZWRpdGFkPC9TVFJPTkc+IGFkdmVydCB3aWxsIGFwcGVhciAiOwoJcHJp
bnQgImFzIHNob3duIGJlbG93OlxuIjsKCXByaW50ICI8UCBBTElHTj1DRU5URVI+PEEgSFJF
Rj1cIiRnb3RvYWR2ZXJ0PyRlZGl0YWRcIj4iOwoJcHJpbnQgIjxJTUcgU1JDPVwiJGltYWdl
XCIgSEVJR0hUPSRoZWlnaHQgV0lEVEg9JHdpZHRoICI7CglwcmludCAiQUxUPVwiJGFsdFwi
PiI7CglwcmludCAiPC9BPjxCUj48U01BTEw+PEEgSFJFRj1cIiRnb3RvYWR2ZXJ0PyRlZGl0
YWRcIj4iOwoJcHJpbnQgIiR0ZXh0PC9TTUFMTD48L0E+PC9QPlxuIjsKCSZGb290ZXI7Cgll
eGl0Owp9CgpzdWIgZGVsZmluYWwgewoJJGRlbGFkID0gJElOUFVUeydkZWxhZCd9OwoJdW5s
aW5rICgiJGFkdmVydHNfZGlyLyRkZWxhZC50eHQiKTsKCW9wZW4gKENPVU5ULCAiKzwkYWR2
ZXJ0Y291bnQiKSB8fCAmRXJyb3JfRmlsZSgiJGFkdmVydGNvdW50Iik7CgkkbG9ja2Vycm9y
ID0gJkxvY2tGaWxlKENPVU5UKTsKCWlmICgkbG9ja2Vycm9yKSB7CgkJcHJpbnQgIlsgRmls
ZSBMb2NrIEVycm9yOiAkYWR2ZXJ0Y291bnQgXSI7CgkJZXhpdDsKCX0KCUBsaW5lcyA9IDxD
T1VOVD47Cglmb3JlYWNoICRsaW5lIChAbGluZXMpIHsgY2hvcCAoJGxpbmUpIGlmICgkbGlu
ZSA9fiAvXG4kLyk7IH0KCXRydW5jYXRlIChDT1VOVCwwKTsKCXNlZWsoQ09VTlQsIDAsIDAp
OwoJZm9yZWFjaCAkbGluZSAoQGxpbmVzKSB7CgkJdW5sZXNzICgkbGluZSBlcSAkZGVsYWQp
IHsKCQkJcHJpbnQgQ09VTlQgIiRsaW5lXG4iOwoJCX0KCX0KCSZVbmxvY2tGaWxlKENPVU5U
KTsKCWNsb3NlIChDT1VOVCk7CgkkYWN0aW9ucmVzdWx0ID0gMTsKCSZyZXZpZXdhbGw7Cn0K
CnN1YiBGb290ZXIgewoJcHJpbnQgIjxIUiBXSURUSD0yNSU+PFAgQUxJR049Q0VOVEVSPjxT
TUFMTD4iOwoJcHJpbnQgIjxTVFJPTkc+PEEgSFJFRj1cImh0dHA6Ly9hd3NkLmNvbS9zY3Jp
cHRzL3dlYmFkdmVydHMvXCI+IjsKCXByaW50ICJXZWJBZHZlcnRzICR2ZXJzaW9uPC9BPjwv
U1RST05HPjwvU01BTEw+PC9QPlxuIjsKCXByaW50ICI8L0JPRFk+PC9IVE1MPlxuIjsKfQoK
c3ViIExvY2tGaWxlIHsKCWxvY2FsKCpGSUxFKSA9IEBfOwoJbG9jYWwoJFRyeXNMZWZ0KSA9
IDEwOwoJaWYgKCRVc2VMb2NraW5nKSB7CgkJd2hpbGUgKCRUcnlzTGVmdC0tKSB7CgkJCSRs
b2NrcmVzdWx0ID0gZXZhbCgiZmxvY2soRklMRSw2KSIpOwoJCQlpZiAoJEApIHsKCQkJCSRV
c2VMb2NraW5nID0gMDsKCQkJCWxhc3Q7CgkJCX0KCQkJaWYgKCEkbG9ja3Jlc3VsdCkgewoJ
CQkJc2VsZWN0KHVuZGVmLHVuZGVmLHVuZGVmLDAuMSk7CgkJCX0KCQkJZWxzZSB7CgkJCQls
YXN0OwoJCQl9CgkJfQoJfQoJaWYgKCRUcnlzTGVmdCA+PSAwKSB7CgkJcmV0dXJuIDA7Cgl9
CgllbHNlIHsKCQlyZXR1cm4gLTE7Cgl9Cn0KCnN1YiBVbmxvY2tGaWxlIHsKCWxvY2FsKCpG
SUxFKSA9IEBfOwoJaWYgKCRVc2VMb2NraW5nKSB7CgkJZmxvY2soRklMRSw4KTsKCX0KfQoK
c3ViIGNvbW1hcyB7Cglsb2NhbCgkXyk9QF87CgkxIHdoaWxlIHMvKC4qXGQpKFxkXGRcZCkv
JDEsJDIvOwoJJF87Cn0KCnN1YiBFcnJvcl9GaWxlIHsKCXByaW50ICI8SFRNTD48SEVBRD48
VElUTEU+T29wcyE8L1RJVExFPjwvSEVBRD48Qk9EWT5cbiI7CglwcmludCAiPEgxIEFMSUdO
PUNFTlRFUj5GaWxlIFBlcm1pc3Npb24gRXJyb3IhPC9IMT5cbiI7CglwcmludCAiPFA+VGhl
IHNlcnZlciBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgIjsKCXByaW50ICJ0
byBhY2Nlc3MgPFNUUk9ORz4kX1swXTwvU1RST05HPiEgRWl0aGVyIHRoZSBkaXJlY3Rvcnkg
IjsKCXByaW50ICJvciBmaWxlIGRvZXNuJ3QgZXhpc3QsIG9yIGl0cyBwZXJtaXNzaW9ucyBh
cmUgc2V0ICI7CglwcmludCAiaW5jb3JyZWN0bHkuPC9QPlxuIjsKCSZGb290ZXI7CglleGl0
Owp9CgpzdWIgRXJyb3JfTGluZSB7CglwcmludCAiWyBGaWxlIFBlcm1pc3Npb24gRXJyb3I6
ICRfWzBdIF0iOwp9Cgo=
--------------414325C22258--
------------------------------
Date: 2 Jul 1997 15:59:49 GMT
From: "Frank Huddleston" <Frank.Huddleston@guardian.brooks.af.mil>
Subject: Re: Event Log Reporting - Doesn't Work
Message-Id: <01bc8701$072df260$70058c8c@oepc05112>
David Richards <dave@turfpit.demon.co.uk> wrote in article
<01bc8330$a74dbd90$0101010a@turfpit>...
> Frank
>
> Try this - straight from the docs for Win32 Perl build 306. Works for me
> on NT4 SP3 with build 306.
>
> $EventLog->GetNumber($number) || die $!;
> print "There are $number records in the System Event Log\n";
Yes, this works, but it returns only the number of records in the Event
Log. Has anyone tried actually reading those records? I get a message:
Argument "EVENTLOG_SEQUENTIAL_READ" isn't numeric in entersub at
R:\perl5\lib/Win32/Eventlog.pm line 123.
Substitution with the actual numeric value ( 1 ) doesn't work either, but
doesn't return that error.
Frank Huddleston
------------------------------
Date: 2 Jul 1997 19:27:26 GMT
From: "Kevin Luff" <kluff@enterprise.net>
Subject: Re: GIFgraph.pm or finance scripts
Message-Id: <01bc8716$2715c660$78c348c2@kluff.enterprise.net>
agree on all points.
i was a bit pissed off to get the soft-tek answer
as for the GIFgraph module....that code is why i asked the question !!
I think of my self as an average++ programmer (when sober) and held the
faint hope that some poor soul had been there and done it, got the t-shirt,
etc.
still....lets wait and see. I might even leave the
gin/wife/child/car/garden/housework etc alone for a few days and knuckle
down to it myself
Kevin
Zenin <zenin@best.com> wrote in article <5ouo46$5p9$4@nntp2.ba.best.com>...
> Mike Christensen <mike@soft-tek.com> wrote:
> > When you find that your current charting solution is coming up short, I
> > would like to invite you to check out GRAFSMAN/WWW from Soft-tek
> > International, Inc.
>
> > You will find a live demonstration of GRAFSMAN/WWW on our website:
> > http://www.soft-tek.com
>
> Looks great. Too bad you don't seem to have a perl interface
> to it, and this is a perl news group.
>
> Read man perlxs and perlxstut to learn how to build a perl module
> out of your C API. Once it's done, please email me as I'd love to
> use it. -Your demo graphs look great.
>
> As for the original question, the GIFGraph module has some *really*
> ugly code and lots of umm, features. Most of the time when I've
> wanted to do anything other then copy the demos I've had to hack the
> module code to let me do it. I wouldn't recommend this for the
> adverage perl programmer however as the code is *vary* hard to read,
> uses heavy perl5 features, and names all it's variables and
> methods, 'f', 'g', 'xg', etc with basicly no comments as to what
> they are or what they do... My guess is that the author is really
> a math guy at heart, not a programmer. :-(
>
> --
> -Zenin
> zenin@best.com
>
------------------------------
Date: Wed, 2 Jul 1997 07:56:02 -0700
From: Tom Phoenix <rootbeer@teleport.com>
To: Steve Peterson <stevep@ry.com>
Subject: Re: Hash ref and keys -- how?
Message-Id: <Pine.GSO.3.96.970702075504.18446C-100000@kelly.teleport.com>
On Wed, 2 Jul 1997, Steve Peterson wrote:
> I'm having a problem getting the keys of a hash where I have a
> reference to the hash.
@the_keys = keys %{ $reference };
Put any expression which returns a hash reference into the curly braces.
Hope this helps!
--
Tom Phoenix http://www.teleport.com/~rootbeer/
rootbeer@teleport.com PGP Skribu al mi per Esperanto!
Randal Schwartz Case: http://www.rahul.net/jeffrey/ovs/
------------------------------
Date: Wed, 02 Jul 1997 11:17:39 -0700
From: Josh Kostecka <josh@palouse.org>
Subject: Help Please
Message-Id: <33BA9B43.38B0@palouse.org>
I am trying to create a local search in Perl but have run into a
problem. Becuase of Perl's greedy nature, I am having problems creating
a ranking system.
For example, I want to rank links with the search terms, so I set up a
code that looked like this:
if ($string =~ /<a href.*\b$term\b.*<\/a>/i) {
The problem is that if it doesn't match with the first </a>, it will
continue to the second </a> trying to match $term between the linked
text. So I tried this code:
if ($string =~ /<a href.*\b$term\b.*<\/a>/i && !/<a
href.*<\/a>.*\b$term\b.*/i) {
But this did not fare any better. Is there something wrong with the
second code? Or, better yet, is there a better way to get it to stop
after the first </a> regardless of whether it matches or not?
Josh Kostecka
------------------------------
Date: 2 Jul 1997 16:30:58 GMT
From: xewj@odin.sunquest.com
Subject: Re: Help with du called from Email or CGI; doubled?
Message-Id: <5pdvo2$p6l$1@iggy.sunquest.com>
In article <33B79971.4C395C41@absyss.fr>, Doug Seay <seay@absyss.fr> wrote:
>[posted and mailed]
>charlie@lofcom.com wrote:
>> I have a test script that uses "du -s" two different ways:
>> @SPACEUSED = `/usr/bin/du -s /full/path/to/dir` ;
>> open (PIPEFROM, "/usr/bin/du -s /full/path/to/dir |") ;
>> I collect the data from both in a var.
>> If I run it from the command line, works fine. So I stuck in a mail
>> routine to email me the results. Again, if I run it from the command line,
>> works fine.
>> Now I set up procmail to run the script when mail arrives to a specific
>> address on my virtual server. Suddenly, the values are _doubled_.
>"du" is not consistant with what it reports. IIRC, on most Unix systems
>it is in 512 byte blocks, but sometimes it gives 1024 byte blocks. Some
>"du"s (AIX3.2.5, GNU) can give either (-k to force to 1024 byte
>blocks).
Which sorta leads to the conclusion that the original poster has an alias set
up in the login shell which isn't being called (obviously) from the perl
script.
Oh well. At least he used full path.
end of story.
------------------------------
Date: Wed, 02 Jul 1997 12:19:38 -0500
From: fl_aggie@hotmail.com (I R A Aggie)
Subject: Re: How can I get 'expect' functionality with perl?
Message-Id: <fl_aggie-ya02408000R0207971219380001@news.fsu.edu>
In article <5pdnnu$bfd@terrapin.netedge.com>, ftrogers@terrapin.netedge.com
(Tarek_Rogers) wrote:
[posted && cc'd]
+ I've got a lot of expect scripts lying around for
+ controlling programs like telnet and ftp. Is there a way in perl
+ to give me similar control?
See the modules Net::Telnet (stand-alone module) and Net::FTP (part of
the netlib distribution).
James
--
Consulting Minister for Consultants, DNRC
Support the anti-Spam amendment <url:http://www.cauce.org/>
To cure your perl CGI problems, please look at:
<url:http://www.perl.com/perl/faq/idiots-guide.html>
------------------------------
Date: Wed, 02 Jul 1997 09:55:47 -0500
From: jlinscom <jason@ccmail.dsccc.com>
Subject: mkdir w/ perl & chmod blah blah follow-up
Message-Id: <33BA6BF3.2F5FE0EB@ccmail.dsccc.com>
never mind.... figured it out!
system 'mkdir name';
------------------------------
Date: 2 Jul 1997 16:11:39 GMT
From: "Paul Cherenkov" <pchere@ctp.com>
Subject: Oraperl installation problems
Message-Id: <01bc8702$f7b2b620$fb2d2c95@amlatina.ctp.com>
Hi,
I'm trying to install Oraperl (downloaded from Internet) on Oracle 7.3.3.0
running on HP-UX 10.2. The Oraperl makefile references some libraries
(libocic.a, libora.a) that are not present on the Oracle side. The Perl (v.
5.003) side is missing "/usub" directory & some application named "mus".
Any help/advice would be appreciated.
------------------------------
Date: Wed, 02 Jul 1997 08:59:54 -0700
From: Geoff Sherman <gssherma@schmelze.corp.hp.com>
Subject: Perl and Sockets
Message-Id: <33BA7AFA.54DA@schmelze.corp.hp.com>
Helloall,
I have inherited some old Perl networking scripts that involve using
sockets to pass data from a client to a server. I am relatvely new at
this socket concept and have been reading as much as I can. The problem
is that most examples are written in C and not Perl. Can anyone
recommend any sites/books that deal with Perl sockets/networking and
might provide some examples? Thank you very much.
Geoff Sherman
gssherma@uiuc.edu
------------------------------
Date: Wed, 2 Jul 1997 17:40:22 GMT
From: Tim Bunce <Tim.Bunce@ig.co.uk>
Subject: Re: Perl, Oracle, CGI, WWW
Message-Id: <ECpD3B.4AJ@ig.co.uk>
In article <867852177.29225@dejanews.com>, <markus@netrail.net> wrote:
> I know this subject is becoming trite, but I too am having trouble
> connecting to an Oracle database. The database is setup on a VMS box,
> which we want to access from an NT machine. This NT machine will also be
> running Netscape Enterprise, so we will be using CGI to access the
> database. I would prefer to use Perl and bypass the proprietary Pro*C
> libraries if possible. Oraperl has not helped
Why not?
> so I am looking at a
> Win32::ODBC solution. My question is concerning network access of the
> database. Will I be able to connect to the Vax over TCP/IP and access the
> database? If so, how would I go about connecting to it through Perl? Any
> help, info, programs, etc. would be beneficial.
If Oracle tools on your platform can connect to the VMS Oracle then
Perl can as well.
Tim.
------------------------------
Date: Wed, 02 Jul 1997 16:31:54 GMT
From: tonkin@silcom.com (Nick Tonkin)
Subject: POSSIBLE BUG with cgi-lib.pl and HTTP_COOKIE
Message-Id: <33ba8252.40958204@news.silcom.com>
Hello,
I believe I have found a bug in the HTTP_COOKIE header process as it
relates to other environment variables and the cgi-lib.pl Perl module.
I will try to explain this as accurately as possible, but I am not an
expert in the lingo.
The bug goes like this: When the browser (Netscape 3.01 under Windows
NT 4.0) sends along a cookie with a null value (specifically,
"AAAIP=") as part of its environment in a call to a Perl script
(running with Perl 5.003 under Apache 1.2 on FreeBSD 2.2) that
requires cgi-lib.pl, the latter generates an error as follows:
"cgi-lib.pl: Unknown Content-type: "
This appears to come from the ReadParse sub. When the cookie in
question is not present, or when it has a non-null value, the script
executes perfectly, as the Content-type is, of course, legitimate. My
hypothesis is that the null value in the HTTP_COOKIE environment
variable somehow cause a rollover effect into the CONTENT_TYPE
variable, which then also somehow erroneously takes on a null value.
I realize that it would be fairly easy to change the script that sets
the cookie so that it only sets it if the value it will not be null,
but I suppose that it would not be such a simple issue in all cases.
Would there not be need from time to time for a Cookie that at least
temporarily has a null value?
Thanks for any feedback.
Nick
============================
Nick Tonkin
webmaster@web-ignite.com
http://www.web-ignite.com
------------------------------
Date: Wed, 02 Jul 1997 12:35:21 -0500
From: Angel Rodgers <rodgeral@jmu.edu>
Subject: Reading infromation from a text file
Message-Id: <33BA9149.4055@jmu.edu>
I am trying to print a file location based on the content of a line in a
text file. The code I am using looks as follows:
open (FILE1, "/home/nasahl/error.html");
while (<FILE1>){
if ($5eq""){
print "Location: http://misbss20/~angel/upload2.html\n";
}else {
print "Location: http://misbss20/nasahl/error.html\n";
}} close (FILE1);
ie. if line 5 of the file is blank, I would like it to print the
location http://misbss20/~angel/upload2.html.
However, no matter upload2.html always comes up, even if there is
something on line 5. Do I have something wrong in my code?
Thanks,
Angel Rodgers
rodgeral@jmu.edu
------------------------------
Date: 2 Jul 1997 11:01:32 -0700
From: mcravit@best.com (Matthew Cravit)
Subject: Re: Reading infromation from a text file
Message-Id: <5pe51s$iip$1@shell3.ba.best.com>
[Courtesy Cc sent to cited poster via email]
In article <33BA9149.4055@jmu.edu>, Angel Rodgers <rodgeral@jmu.edu> wrote:
>I am trying to print a file location based on the content of a line in a
>text file. The code I am using looks as follows:
>
>open (FILE1, "/home/nasahl/error.html");
>while (<FILE1>){
> if ($5eq""){
Where did you get the idea that $5 refers to the 5th line of a text file?
It doesn't; it refers to the 5th submatch in a regular expression. To get
the 5th line of the file, try something like this:
open (FILE1, "/home/nasahl/error.html") or die("Could not open file: $!\n");
foreach (1..5) {
$line = <FILE>; chomp $line;
}
close FILE1;
At the end of this block of code, $line will contain the fifth line of the
file, assuming the file has that many lines. If the file does not have at
least 5 lines, $line will be an empty string at the end of the above loop.
Hope this helps.
/MC
--
--
Matthew Cravit, N9VWG | Experience is what allows you to
E-mail: mcravit@best.com (home) | recognize a mistake the second
mcravit@taos.com (work) | time you make it.
------------------------------
Date: 2 Jul 1997 14:06:35 GMT
From: mdepristo@Godzilla.cs.nwu.edu (Mark DePristo)
Subject: Require Problem
Message-Id: <5pdn9b$121@news.acns.nwu.edu>
I'm trying to use the require function:
require 'taggerlibrary';
to load another perl script to use a function declared in its body. I was
under the impression that this is the required syntax, but I get the following
error whenever I run the calling script:
Can't locate taggerlibrary in @INC at converter line 9.
So I changed the require to :
require 'taggerlibrary.pm'
and I get this message:
taggerlibrary.pm did not return a true value at converter line 9.
Right now, taggerlibrary is as follows. I'm not sur
e if the require is wrong, the library is malformed, or both.
Any suggestions?
#!/usr/local/bin/perl
sub tokenize {
local($IN) = $_[0];
$IN =~ s/\n//g; #remove all NEW-LINES from input
$IN =~ s/ +/\n/g; #replace " "s with NEW-LINES
$IN; #return $IN
}
------------------------------
Date: 2 Jul 1997 10:52:34 -0700
From: mcravit@best.com (Matthew Cravit)
Subject: Re: Require Problem
Message-Id: <5pe4h2$fsf$1@shell3.ba.best.com>
[Courtesy cc to cited poster via email]
In article <5pdn9b$121@news.acns.nwu.edu>,
Mark DePristo <mdepristo@Godzilla.cs.nwu.edu> wrote:
The perldiag man page (perldoc perldiag) is your friend here. It has
very nice explanations of just about every error or warning that Perl
generates. Here's what it has to say about the errors you got:
> Can't locate taggerlibrary in @INC at converter line 9.
Can't locate %s in @INC
(F) You said to do (or require, or use) a file that
couldn't be found in any of the libraries mentioned in
@INC. Perhaps you need to set the PERL5LIB or PERL5OPT
environment variable to say where the extra library is,
or maybe the script needs to add the library name to
@INC. Or maybe you just misspelled the name of the
file. See the require entry in the perlfunc manpage.
> taggerlibrary.pm did not return a true value at converter line 9.
%s did not return a true value
(F) A required (or used) file must return a true value
to indicate that it compiled correctly and ran its
initialization code correctly. It's traditional to end
such a file with a "1;", though any true value would do.
See the require entry in the perlfunc manpage.
In future, it's probably to your advantage to look at the man pages
before posting here.
/MC
--
--
Matthew Cravit, N9VWG | Experience is what allows you to
E-mail: mcravit@best.com (home) | recognize a mistake the second
mcravit@taos.com (work) | time you make it.
------------------------------
Date: Wed, 02 Jul 1997 09:45:22 -0500
From: jlinscom <jason@ccmail.dsccc.com>
Subject: take linebreaks out of forms?
Message-Id: <33BA6982.AED5668C@ccmail.dsccc.com>
hello all,
i need to take line breaks out of my 'text area' forms. the form is
sent to a perlscript and saved to a file. when i pull up the file, it
goes wacko, by putting everything after the line break in a new
section. (each section is supposed to be a different user) is there
something i could substitute the line break with? maybe a space? if
anyone knows, could you send me a couple lines of substitution code.
please.
thanks,
jason
------------------------------
Date: Wed, 02 Jul 1997 17:53:15 GMT
From: developm@biblesoft.com (Biblesoft Development Group)
Subject: Win32::Registry question on NT
Message-Id: <33ba9413.98181667@news.accessone.com>
I am trying to extract the values from all the keys in the NT registry
with PERL.
I found this example in the documentation:
use Win32::Registry;
$HKEY_LOCAL_MACHINE->Open($NewObj, "MyKey") || die $!;
$NewObj->SetValue("MySubKey", REG_SZ, 5);
I tried:
# Extract all NT registry keys to a file
Uses Win32::Registry
$HKEY_LOCAL_MACHINE->Save("LM.REG");
$HKEY_USERS->Save("USERS.REG");
$HKEY_CURRENT_USER->Save("CURUSER.REG");
$HKEY_CLASSES_ROOT->Save("ROOT.REG");
But it gives me the error:
"Can't call method 'save' without a package or object reference "
Can someone give me a hand?
Thanks.
------------------------------
Date: 8 Mar 97 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 8 Mar 97)
Message-Id: <null>
Administrivia:
The Perl-Users Digest is a retransmission of the USENET newsgroup
comp.lang.perl.misc. For subscription or unsubscription requests, send
the single line:
subscribe perl-users
or:
unsubscribe perl-users
to almanac@ruby.oce.orst.edu.
To submit articles to comp.lang.perl.misc (and this Digest), send your
article to perl-users@ruby.oce.orst.edu.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
To request back copies (available for a week or so), send your request
to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
where x is the volume number and y is the issue number.
The Meta-FAQ, an article containing information about the FAQ, is
available by requesting "send perl-users meta-faq". The real FAQ, as it
appeared last in the newsgroup, can be retrieved with the request "send
perl-users FAQ". Due to their sizes, neither the Meta-FAQ nor the FAQ
are included in the digest.
The "mini-FAQ", which is an updated version of the Meta-FAQ, is
available by requesting "send perl-users mini-faq". It appears twice
weekly in the group, but is not distributed in the digest.
For other requests pertaining to the digest, send mail to
perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
sending perl questions to the -request address, I don't have time to
answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V8 Issue 695
*************************************