GqrxRawAudioPlot(wxPerl, GD, UDP client, UDP server, & memory file)

--001a114784cc52616f0530107c5a
Content-Type: multipart/alternative; boundary=001a114784cc5261690530107c58

--001a114784cc5261690530107c58
Content-Type: text/plain; charset=UTF-8

For those that haven't been on PM lately, here's a repost.

----------------------------------------------------------------------------------

AKA - Another wxPerl example.

Back in June I was looking into the purchase of Digilent's Analog Discovery
USB O-scope(still looking). I was considering wrapping the SDK shared
library until [kovacslattila] pointed out that a Linux version of the
Waveforms software was under development(now available). The result was
that I dropped my plan to wrap the SDK shared library. What I had put
together at that point was a simulated O-scope display based on wxPerl and
GD. Reference: [Digilent Inc. Analog Discovery]

Fast forward to October... I had been playing with the Gqrx Software
Defined Radio package and had developed a wxPerl script that used Telnet
and threads to implement a scanner function on top of Gqrx. Reference: [SDR
Scanner(aka Threaded wxPerl Example)]

Last month, a user on the Gqrx google group asked if there was a way to
display the raw audio produced by Gqrx. As it turns out, one channel of the
demodulated audio is output to a UDP port. It sounded like a fun challenge
and a reason to dig out the simulated O-scope code. Listed below is the
GqrxRawAudioPlot.pl script and the udpserver.pl script(provides test UDP
packets so that the plot code can be run without having to have SDR
hardware and Gqrx installed). If you don't want to run these scripts, you
can see a screen snapshot at [jmlynesjr].

If nothing else, it's another wxPerl example along with GD graphics, memory
file usage, a UDP client and a UDP server.

James

--001a114784cc5261690530107c58
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">For those that haven&#39;t been on PM lately, here&#39;s a=
 repost.<br><br>-----------------------------------------------------------=
-----------------------<br><div><br>AKA - Another wxPerl example.<br><br>Ba=
ck in June I was looking into the purchase of Digilent&#39;s Analog Discove=
ry USB O-scope(still looking). I was considering wrapping the SDK shared li=
brary until [kovacslattila] pointed out that a Linux version of the Wavefor=
ms software was under development(now available). The result was that I dro=
pped my plan to wrap the SDK shared library. What I had put together at tha=
t point was a simulated O-scope display based on wxPerl and GD. Reference: =
[Digilent Inc. Analog Discovery]<br><br>Fast forward to October... I had be=
en playing with the Gqrx Software Defined Radio package and had developed a=
 wxPerl script that used Telnet and threads to implement a scanner function=
 on top of Gqrx. Reference: [SDR Scanner(aka Threaded wxPerl Example)]<br><=
br>Last month, a user on the Gqrx google group asked if there was a way to =
display the raw audio produced by Gqrx. As it turns out, one channel of the=
 demodulated audio is output to a UDP port. It sounded like a fun challenge=
 and a reason to dig out the simulated O-scope code. Listed below is the Gq=
rxRawAudioPlot.pl script and the <a href=3D"http://udpserver.pl">udpserver.=
pl</a> script(provides test UDP packets so that the plot code can be run wi=
thout having to have SDR hardware and Gqrx installed). If you don&#39;t wan=
t to run these scripts, you can see a screen snapshot at [jmlynesjr].<br><b=
r>If nothing else, it&#39;s another wxPerl example along with GD graphics, =
memory file usage, a UDP client and a UDP server.<br><br></div><div>James<b=
r><br></div><div><br></div></div>

--001a114784cc5261690530107c58--
--001a114784cc52616f0530107c5a
Content-Type: application/x-perl; name="GqrxRawAudioPlot.pl"
Content-Disposition: attachment; filename="GqrxRawAudioPlot.pl"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_imtejh1x0

IyEgL3Vzci9iaW4vcGVybAoKIyBOYW1lOgkJCUdxcnhSYXdBdWRpb1Bsb3QucGwgQ2xvbmVkIGZy
b20gV3gtV2F2ZUZvcm1zMi5wbChhIHNpbXVsYXRlZCBvLXNjb3BlIHByb29mIG9mIGNvbmNlcHQp
CiMgQXV0aG9yOgkJSmFtZXMgTS4gTHluZXMsIEpyLgojIENyZWF0ZWQ6CQlGZWJydWFyeSAyNywg
MjAxNgojIE1vZGlmaWVkIEJ5OgkJSmFtZXMgTS4gTHluZXMsIEpyLgojIExhc3QgTW9kaWZpZWQ6
CUFwcmlsIDQsIDIwMTYKIyBFbnZpcm9tZW50OgkJUGVybCA1LjE4LjIsIHd4UGVybCAuOTkyNCwg
d3hXaWRnZXRzIDMuMC4xLCBVYnVudHUgMTQuMDRMVFMgNjRiaXQsIEhQIDE1IFF1YWQgQ29yZQoj
IENoYW5nZSBMb2c6CQkyLzI3LzIwMTYgLSBQcm9ncmFtIENyZWF0ZWQKIyAgICAgICAgICAgICAg
ICAgICAgICAgMi8yOC8yMDE2IC0gUmVtb3ZlIGFsbCBidXQgcmFuZG9tIHBsb3QgY29kZSwgbWVy
Z2UgaW4gc29ja2V0IGNvZGUKIyAgICAgICAgICAgICAgICAgICAgICAgMy82LzIwMTYgIC0gQ3Jl
YXRlIGFuIGFycmF5KGZpZm8pIHRvIGhvbGQgc2FtcGxlIGRhdGEgdmFsdWVzIC0gNjAwIHZhbHVl
cwojCQkJMy8xMy8yMDE2IC0gSW1wbGVtZW50IHVwZGF0aW5nIG9mIHNhbXBsZSBhcnJheSBhbmQg
dW5wYWNraW5nIG9mIGNvbXBsZXRlIHBhY2tldAojCQkJMy8xNC8yMDE2IC0gQWRkIHNjYWxlIGZh
Y3RvciBzZWxlY3Rpb24uIENvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9uLgojCQkJMy8yMy8yMDE2
IC0gQWRkIHdyaXRpbmcgb2YgaW1hZ2UgdXBkYXRlcyB0byBtZW1vcnkgZmlsZSBpbnN0ZWFkIG9m
IGRpc2sgZmlsZQojCQkJMy8yOS8yMDE2IC0gQWRkIHNvY2tldCBwYWNrZXQgY291bnRlciB3aXRo
IGRpc3BsYXksIGZpeGVkIHVucGFja2luZyB0aGUgY29tcGxldGUgcGFja2V0CiMJCQkzLzMwLzIw
MTYgLSBBZGQgYnV0dG9uIHRvIGNoYW5nZSBzY2FsZSBmYWN0b3IoMSwgMTAsIDEwMCkKIwkJCTMv
MzEvMjAxNiAtIE1vdmUgYSBmZXcgdmFyaWFibGUgYXNzaWdubWVudHMgb3V0c2lkZSBvZiBsb29w
cywKIwkJCQkgICAgQWRkIHNjcmVlbiBzbmFwc2hvdCB0byBkaXNrZmlsZSBmdW5jdGlvbgojCQkJ
NC8yLzIwMTYgIC0gQWRkIGRpc3BsYXkgb2YgcmVjZWl2ZWQgcGFja2V0IGxlbmd0aAojCQkJNC80
LzIwMTYgIC0gQWRkIENvbm5lY3QgJiBQbG90IGJ1dHRvbiBjb2xvciBoaWdobGlnaHRpbmcKIwoj
IERlc2NyaXB0aW9uOgkJd3hQZXJsIFByb29mIG9mIENvbmNlcHQgZm9yIGRpc3BsYXkgb2YgcmF3
IGF1ZGlvIGZyb20gR3FyeAojCQkJUmVhZCAmIHVucGFjayB0aGUgZmlyc3QgNjAwIHNhbXBsZXMg
dG8gZmlsbCB0aGUgZGlzcGxheSBhcnJheQojCQkJICAgIFJlYWQgZm9sbG93aW5nIHBhY2tldHMs
IHVucGFjaywgYW5kIHVwZGF0ZSB0aGUgZGlzcGxheSBhcnJheQojICAgICAgICAgICAgICAgICAg
ICAgICBPbmUgc2FtcGxlIHBlciBVRFAgcGFja2V0KGxvY2FsaG9zdC9wb3J0IDczNTUpCiMgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMZWZ0IENoYW5uZWwgVmFsdWUKIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQ4S0h6IFNhbXBsZSBSYXRlCiMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxNmJpdCBzaWduZWQsIGxpdHRsZSBlbmRpYW4KIwojIE5vdGVzOgkJVGhlcmUgc2VlbXMgdG8g
YmUgYSA2LTggc2Vjb25kIGRlbGF5IGJldHdlZW4gaGVhcmluZyB0aGUgYXVkaW8KIwkJCSAgICBp
biBHcXJ4IGFuZCBzZWVpbmcgdGhlIGN1cnZlIG9uIHRoZSBPLXNjb3BlLgojCQkJQXBwIHdpbGwg
aGFuZyB1cChnbyB1bnJlc3BvbnN2ZSkgaWYgR3FyeCBpcyBub3Qgc2VuZGluZyBwYWNrZXRzLiAK
IwojIFRvIERvOgkJUmV3cml0ZSB0aGUgby1zY29wZSBzcGVjaWZpYyBjb2RlIGludG8gbW9kdWxl
IGZvcm0uCgoKcGFja2FnZSBtYWluOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRhcHAg
PSBBcHAtPm5ldygpOwokYXBwLT5NYWluTG9vcDsKCnBhY2thZ2UgQXBwOwp1c2Ugc3RyaWN0Owp1
c2Ugd2FybmluZ3M7CnVzZSBiYXNlICdXeDo6QXBwJzsKc3ViIE9uSW5pdCB7CiAgICBXeDo6SW5p
dEFsbEltYWdlSGFuZGxlcnMoKTsKICAgIG15ICRmcmFtZSA9IEZyYW1lLT5uZXcoKTsKICAgICRm
cmFtZS0+U2hvdygxKTsKfQoKcGFja2FnZSBGcmFtZTsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdz
Owp1c2UgV3ggcXcoOmV2ZXJ5dGhpbmcpOwp1c2UgYmFzZSBxdyhXeDo6RnJhbWUpOwp1c2UgSU86
OlNvY2tldDsKdXNlIEdEOwp1c2UgRGF0YTo6RHVtcGVyOwoKc3ViIG5ldyB7CiAgICBteSAoJGNs
YXNzLCAkcGFyZW50KSA9IEBfOwoKICAgIG15ICRzZWxmID0gJGNsYXNzLT5TVVBFUjo6bmV3KCRw
YXJlbnQsIC0xLCAiR3FyeCBSYXcgQXVkaW8gRGlzcGxheSIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3hEZWZhdWx0UG9zaXRpb24sIFs2MTAsIDY4MF0pOyAjIEZpdCB0byBv
LXNjb3BlIHNpemUKCiAgICAjICAgQXBwbGljYXRpb24gSW5pdGlhbGl6YXRpb24KICAgIG15ICRv
c2NvcGUgPSB7fTsJCQkJCQkJIyBCbGFuayBvc2NvcGUgZGF0YSBzdHJ1Y3R1cmUKCiAgICAkb3Nj
b3BlLT57bWF4d30gPSA2MDA7CQkJCQkJIyB3aWR0aC94IGF4aXMKICAgICRvc2NvcGUtPnttYXho
fSA9IDYwMDsJCQkJCQkjIGhlaWdodC95IGF4aXMKCQkJCQkJCQkJIyBNdXN0IGJlIHNxdWFyZSBm
b3IgYXBwZWFyYW5jZSBwdXJwb3NlcwoKICAgICRvc2NvcGUtPntwYWNrZXR9ID0gMDsJCQkJCQkj
IEJsYW5rIHJlY2VpdmVkIFVEUCBwYWNrZXQKICAgICRvc2NvcGUtPntmaWZvfSA9IFtdOwkJCQkJ
CSMgQmxhbmsgc2FtcGxlIGFycmF5KGRpc3BsYXkgYXJyYXkpCiAgICAkb3Njb3BlLT57YXVkaW9z
YW1wbGVzfSA9ICgpOwkJCQkJIyBCbGFuayB1bnBhY2tlZCBzYW1wbGUgbGlzdAogICAgJG9zY29w
ZS0+e2ZpZm9zdGF0dXN9ID0gMDsJCQkJCQkjIDAtPnNwYWNlIGF2YWlsYWJsZSwgMS0+ZnVsbCAK
ICAgICRvc2NvcGUtPntjb25uZWN0c3RhdHVzfSA9IDA7CQkJCQkjIDAtPmRpc2Nvbm5lY3RlZCwg
MS0+Y29ubmVjdGVkCiAgICAkb3Njb3BlLT57cGxvdHN0YXR1c30gPSAwOwkJCQkJCSMgMC0+cGxv
dCBzdG9wcGVkLCAxLT5wbG90IHN0YXJ0ZWQKICAgICRvc2NvcGUtPntzY2FsZWZhY3Rvcn0gPSAx
MDsJCQkJCSMgU2FtcGxlIHNjYWxlIGZhY3RvcigxLCAxMCwgMTAwKQogICAgJG9zY29wZS0+e21l
bW9yeWZpbGV9ID0gW107CQkJCQkJIyBNZW1vcnkgRmlsZSB0byBob2xkIFBORyBpbWFnZQogICAg
JG9zY29wZS0+e3BhY2tldGNvdW50ZXJ9ID0gMDsJCQkJCSMgUmVjZWl2ZWQgcGFja2V0IGNvdW50
ZXIKICAgICRvc2NvcGUtPntwYWNrZXRsZW5ndGh9ID0gMDsJCQkJCSMgUmVjZWl2ZWQgcGFja2V0
IGxlbmd0aAogICAgJG9zY29wZS0+e3BjdHJsYWJlbH0gPSAiUGFja2V0IENvdW50ZXI6IjsJCQkJ
IyBTY3JlZW4gbGFiZWwKICAgICRvc2NvcGUtPntwbGVubGFiZWx9ID0gIlBhY2tldCBMZW5ndGg6
IjsJCQkJIyBTY3JlZW4gbGFiZWwKICAgICRvc2NvcGUtPntzbGFiZWx9ID0gIlNjYWxlIEZhY3Rv
cjoiOwkJCQkjIFNjcmVlbiBsYWJlbAogICAgJG9zY29wZS0+e3NuYXBjb3VudGVyfSA9IDA7CQkJ
CQkJIyBTY3JlZW4gc25hcHNob3QgY291bnRlcgoKICAgICMgQ3JlYXRlIGluaXRpYWwgYmxhbmsg
by1zY29wZSBzY3JlZW4gYmFja2dyb3VuZAogICAgb3Njb3BlaW5pdCgkb3Njb3BlKTsJCQkJCQkj
IERyYXcgYSBibGFuayBPLVNjb3BlIHNjcmVlbgogICAgc2F2ZWFzcG5nZmlsZSgkb3Njb3BlKTsJ
CQkJCQkjIFNhdmUgaW1hZ2UgdG8gYSBQTkcgZGlzayBmaWxlCiAgICAkc2VsZi0+e2JtcH0gPSBX
eDo6Qml0bWFwLT5uZXcoInJhd2F1ZGlvLnBuZyIsIHd4QklUTUFQX1RZUEVfUE5HKTsJIyBSZWxv
YWQgZGlzayBmaWxlIGludG8gYSBiaXRtYXAKICAgICRzZWxmLT57c2JtfSA9IFd4OjpTdGF0aWNC
aXRtYXAtPm5ldygkc2VsZiwgd3hJRF9BTlksICRzZWxmLT57Ym1wfSwgd3hEZWZhdWx0UG9zaXRp
b24sIFs2MDAsNjAwXSk7ICMgRGlzcGxheSBiaXRtYXAKCiAgICAjIENyZWF0ZSBCdXR0b25zCiAg
ICBteSAkY29ubmVjdEJ1dHRvbiA9IFd4OjpCdXR0b24tPm5ldygkc2VsZiwgLTEsICJDb25uZWN0
IHRvIEdxcngiLCB3eERlZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSk7CiAgICBteSAkZGlz
Y29ubmVjdEJ1dHRvbiA9IFd4OjpCdXR0b24tPm5ldygkc2VsZiwgLTEsICJEaXNjb25uZWN0IGZy
b20gR3FyeCIsIHd4RGVmYXVsdFBvc2l0aW9uLCB3eERlZmF1bHRTaXplKTsKICAgIG15ICRwbG90
QnV0dG9uID0gV3g6OkJ1dHRvbi0+bmV3KCRzZWxmLCAtMSwgIlBsb3QgVURQIERhdGEiLCB3eERl
ZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSk7CiAgICBteSAkZXhpdEJ1dHRvbiA9IFd4OjpC
dXR0b24tPm5ldygkc2VsZiwgd3hJRF9FWElULCAiIiwgd3hEZWZhdWx0UG9zaXRpb24sIHd4RGVm
YXVsdFNpemUpOwogICAgbXkgJHNjYWxlQnV0dG9uID0gV3g6OkJ1dHRvbi0+bmV3KCRzZWxmLCAt
MSwgIkNoYW5nZSBTY2FsZSBGYWN0b3IiLCB3eERlZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6
ZSk7CiAgICBteSAkc25hcEJ1dHRvbiA9IFd4OjpCdXR0b24tPm5ldygkc2VsZiwgLTEsICJTbmFw
c2hvdCIsIHd4RGVmYXVsdFBvc2l0aW9uLCB3eERlZmF1bHRTaXplKTsKCiAgICAjIERlZmluZSBU
aW1lcgogICAgJHNlbGYtPnt0aW1lcn0gPSBXeDo6VGltZXItPm5ldygkc2VsZik7CgogICAgIyBD
cmVhdGUgc2l6ZXJzLgogICAgbXkgJHZlcnRpY2FsU2l6ZXJGcmFtZSA9IFd4OjpCb3hTaXplci0+
bmV3KHd4VkVSVElDQUwpOwogICAgJHNlbGYtPlNldFNpemVyKCR2ZXJ0aWNhbFNpemVyRnJhbWUp
OwogICAgbXkgJHZlcnRpY2FsU2l6ZXJDb250cm9scyA9IFd4OjpCb3hTaXplci0+bmV3KHd4VkVS
VElDQUwpOwogICAgbXkgJGhvcml6b250YWxTaXplckJ1dHRvbnMxID0gV3g6OkJveFNpemVyLT5u
ZXcod3hIT1JJWk9OVEFMKTsKICAgIG15ICRob3Jpem9udGFsU2l6ZXJCdXR0b25zMiA9IFd4OjpC
b3hTaXplci0+bmV3KHd4SE9SSVpPTlRBTCk7CgogICAgIyBMYXlvdXQgU2l6ZXJzCiAgICAkdmVy
dGljYWxTaXplckZyYW1lLT5BZGQoJHZlcnRpY2FsU2l6ZXJDb250cm9scywwLDAsMCk7CiAgICAk
dmVydGljYWxTaXplckZyYW1lLT5BZGQoJGhvcml6b250YWxTaXplckJ1dHRvbnMxLDAsMCwwKTsK
ICAgICR2ZXJ0aWNhbFNpemVyRnJhbWUtPkFkZCgkaG9yaXpvbnRhbFNpemVyQnV0dG9uczIsMCww
LDApOwoKICAgICR2ZXJ0aWNhbFNpemVyQ29udHJvbHMtPkFkZCgkc2VsZi0+e3NibX0sMCwwLDAp
OwkJCSMgTy1zY29wZSBTY3JlZW4gRGlzcGxheQogICAgJHZlcnRpY2FsU2l6ZXJDb250cm9scy0+
QWRkU3BhY2VyKDE1KTsKCiAgICAkaG9yaXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZCgkY29ubmVj
dEJ1dHRvbiwwLDAsMCk7CiAgICAkaG9yaXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZFNwYWNlcigx
MCk7CiAgICAkaG9yaXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZCgkZGlzY29ubmVjdEJ1dHRvbiww
LDAsMCk7CiAgICAkaG9yaXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZFNwYWNlcigxMCk7CiAgICAk
aG9yaXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZCgkcGxvdEJ1dHRvbiwwLDAsMCk7CiAgICAkaG9y
aXpvbnRhbFNpemVyQnV0dG9uczEtPkFkZFNwYWNlcigxMCk7CiAgICAkaG9yaXpvbnRhbFNpemVy
QnV0dG9uczEtPkFkZCgkc2NhbGVCdXR0b24sMCwwLDApOwoKICAgICRob3Jpem9udGFsU2l6ZXJC
dXR0b25zMi0+QWRkKCRzbmFwQnV0dG9uLDAsMCwwKTsKICAgICRob3Jpem9udGFsU2l6ZXJCdXR0
b25zMi0+QWRkU3BhY2VyKDQ1KTsKICAgICRob3Jpem9udGFsU2l6ZXJCdXR0b25zMi0+QWRkKCRl
eGl0QnV0dG9uLDAsMCwwKTsKCiAgICAjIEV2ZW50IGhhbmRsZXJzCiAgICBXeDo6RXZlbnQ6OkVW
VF9CVVRUT04oJHNlbGYsICRjb25uZWN0QnV0dG9uLCBzdWIgewogICAgICAgIG15ICgkc2VsZiwg
JGV2ZW50KSA9IEBfOwogICAgICAgIGlmKCRvc2NvcGUtPntjb25uZWN0c3RhdHVzfSA9PSAwKSB7
CQkJCSMgRGlzY29ubmVjdGVkID8KICAgICAgICAgICAgdWRwY29ubmVjdCgkb3Njb3BlKTsJCQkJ
CSMgQ29ubmVjdCB0byB0aGUgR3FyeCBVRFAgcG9ydAogICAgICAgICAgICAkb3Njb3BlLT57Y29u
bmVjdHN0YXR1c30gPSAxOwkJCQkjIHNldCBDb25uZWN0ZWQKICAgICAgICAgICAgJGNvbm5lY3RC
dXR0b24tPlNldExhYmVsKCJDb25uZWN0ZWQiKTsKICAgICAgICAgICAgJGNvbm5lY3RCdXR0b24t
PlNldEJhY2tncm91bmRDb2xvdXIod3hHUkVFTik7CiAgICAgICAgfSAKICAgICAgICB9KTsKCiAg
ICBXeDo6RXZlbnQ6OkVWVF9CVVRUT04oJHNlbGYsICRkaXNjb25uZWN0QnV0dG9uLCBzdWIgewog
ICAgICAgIG15ICgkc2VsZiwgJGV2ZW50KSA9IEBfOwogICAgICAgIGlmKCRvc2NvcGUtPntjb25u
ZWN0c3RhdHVzfSA9PSAxKSB7CQkJCSMgQ29ubmVjdGVkID8KICAgICAgICAgICAgJG9zY29wZS0+
e3Bsb3RzdGF0dXN9ID0gMDsJCQkJCSMgU3RvcCBwbG90dGluZwogICAgICAgICAgICAkc2VsZi0+
e3RpbWVyfS0+U3RvcDsJCQkJCSMgU3RvcCB0aGUgc2NyZWVuIHVwZGF0ZQogICAgICAgICAgICB1
ZHBkaXNjb25uZWN0KCRvc2NvcGUpOwkJCQkJIyBEaXNjb25uZWN0IGZyb20gdGhlIEdxcnggVURQ
IHBvcnQKICAgICAgICAgICAgJG9zY29wZS0+e2Nvbm5lY3RzdGF0dXN9ID0gMDsJCQkJIyBTZXQg
RGlzY29ubmVjdGVkCiAgICAgICAgICAgICRjb25uZWN0QnV0dG9uLT5TZXRMYWJlbCgiQ29ubmVj
dCB0byBHcXJ4Iik7CiAgICAgICAgICAgICRjb25uZWN0QnV0dG9uLT5TZXRCYWNrZ3JvdW5kQ29s
b3VyKHd4V0hJVEUpOwogICAgICAgICAgICAkcGxvdEJ1dHRvbi0+U2V0QmFja2dyb3VuZENvbG91
cih3eFdISVRFKTsKICAgICAgICB9CiAgICAgICAgfSk7CgogICAgV3g6OkV2ZW50OjpFVlRfQlVU
VE9OKCRzZWxmLCAkcGxvdEJ1dHRvbiwgc3ViIHsJCQkjIFJlYWQvUGxvdCBmaXJzdCA2MDAgc2Ft
cGxlcwogICAgICAgIG15ICgkc2VsZiwgJGV2ZW50KSA9IEBfOwkJCQkJIyAoZmlsbCB0aGUgZmlm
bykKCiAgICAgICAgJHBsb3RCdXR0b24tPlNldEJhY2tncm91bmRDb2xvdXIod3hHUkVFTik7CiAg
ICAgICAgb3Njb3BlaW5pdCgkb3Njb3BlKTsgIAkJCQkJCSMgUmVkcmF3IHRoZSBzY3JlZW4gYmFj
a2dyb3VuZAogICAgICAgICRvc2NvcGUtPntjb2xvcn0gPSAkb3Njb3BlLT57Ymx1ZX07CQkJCSMg
UGxvdCBkYXRhIGluIGJsdWUKICAgICAgICAkb3Njb3BlLT57Zmlmb3N0YXR1c30gPSAwOwkJCQkJ
IyBSZXNldCBmaWZvIHN0YXR1cwogICAgICAgICRvc2NvcGUtPntmaWZvfSA9IFtdOwkJCQkJCSMg
UmVzZXQgZmlmbyBhcnJheQogICAgICAgICRvc2NvcGUtPntwYWNrZXRjb3VudGVyfSA9IDA7CQkJ
CQkjIFJlc2V0IHBhY2tldCBjb3VudGVyCiAgICAgICAgZmlsbHF1ZXVlKCRvc2NvcGUpOwkJCQkJ
CSMgUmVhZCA2MDAgc2FtcGxlcyBmcm9tIHRoZSBHcXJ4IFVEUCBwb3J0IAogICAgICAgIGRyYXdj
dXJ2ZSgkb3Njb3BlKTsJCQkJCQkjIFBsb3QgdGhlIGZpZm8gYXJyYXkKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgc2F2ZWFzcG5nbWVtb3J5ZmlsZSgkb3Njb3BlKTsJCQkJCSMgU2F2ZSBH
RCBJbWFnZSBhcyBQTkcgbWVtb3J5IGZpbGUKCiAgICAgICAgb3BlbiBteSAkZmgsICc8JywgXCRv
c2NvcGUtPnttZW1vcnlmaWxlfTsJCQkjIFJlYnVpbGQgdGhlIHNjcmVlbiBiaXRtYXAKICAgICAg
ICAkc2VsZi0+e2JtcH0gPSBXeDo6Qml0bWFwLT5uZXcoV3g6OkltYWdlLT5uZXcoJGZoLCB3eEJJ
VE1BUF9UWVBFX1BORykpOwogICAgICAgIGNsb3NlICRmaDsKCiAgICAgICAgJHNlbGYtPntzYm19
LT5TZXRCaXRtYXAoJHNlbGYtPntibXB9KTsJCQkJIyBSZWZyZXNoIHNjcmVlbgogICAgICAgICRv
c2NvcGUtPntwbG90c3RhdHVzfSA9IDE7CQkJCQkjIFNldCBQbG90dGluZyBzdGFydGVkCiAgICAg
ICAgJHNlbGYtPnt0aW1lcn0tPlN0YXJ0KDQ1KTsJCQkJCSMgNDUgbXNlYyByZWZyZXNoIHRpbWVy
CiAgICAgICAgfSk7CgogICAgV3g6OkV2ZW50OjpFVlRfQlVUVE9OKCRzZWxmLCAkc2NhbGVCdXR0
b24sIHN1YiB7CQkJIyBDaGFuZ2Ugc2NhbGUgZmFjdG9yKDEsIDEwLCAxMDApCiAgICAgICAgbXkg
KCRzZWxmLCAkZXZlbnQpID0gQF87IAogICAgICAgICRvc2NvcGUtPntzY2FsZWZhY3Rvcn0gKj0g
MTA7CiAgICAgICAgaWYoJG9zY29wZS0+e3NjYWxlZmFjdG9yfSA+IDEwMCkgewogICAgICAgICAg
ICAkb3Njb3BlLT57c2NhbGVmYWN0b3J9ID0gMTsKICAgICAgICB9CiAgICAgICAgfSk7CgogICAg
V3g6OkV2ZW50OjpFVlRfQlVUVE9OKCRzZWxmLCAkc25hcEJ1dHRvbiwgc3ViIHsJCQkjIFNuYXBz
aG90IHRoZSBzY3JlZW4gdG8gZGlzawogICAgICAgIG15ICgkc2VsZiwgJGV2ZW50KSA9IEBfOyAK
ICAgICAgICBzbmFwYXNwbmdmaWxlKCRvc2NvcGUpOwogICAgICAgIH0pOwoKICAgIFd4OjpFdmVu
dDo6RVZUX0JVVFRPTigkc2VsZiwgJGV4aXRCdXR0b24sIHN1YiB7CQkJIyBFeGl0IHNjcmlwdAog
ICAgICAgIG15ICgkc2VsZiwgJGV2ZW50KSA9IEBfOyAKICAgICAgICAkc2VsZi0+Q2xvc2U7CiAg
ICAgICAgfSk7CgogICAgV3g6OkV2ZW50OjpFVlRfVElNRVIoJHNlbGYsICRzZWxmLT57dGltZXJ9
LCBzdWIgewkJCSMgRGlzcGxheSB1cGRhdGUgdGltZXIKICAgICAgICBteSAoJHNlbGYsICRldmVu
dCkgPSBAXzsJCQkJCSMgKGFsbCBmb2xsb3dpbmcgcGFja2V0cykKCiAgICAgICAgaWYoJG9zY29w
ZS0+e3Bsb3RzdGF0dXN9ID09IDEpIHsJCQkJIyBJZ25vcmUgdGltZXIgdW50aWwgZmlmbyBoYXMg
YmVlbiBmaWxsZWQKICAgICAgICAgICAgJG9zY29wZS0+e3NvY2tldH0tPnJlY3YoJG9zY29wZS0+
e3BhY2tldH0sMjAwMCk7CQkjIFdhaXQgZm9yIGEgcGFja2V0IC0gbWF4bGVuZ3RoIDIwMDAKICAg
ICAgICAgICAgQHskb3Njb3BlLT57YXVkaW9zYW1wbGVzfX0gPSB1bnBhY2soJ3M8KicsICRvc2Nv
cGUtPntwYWNrZXR9KTsJIyBDb252ZXJ0IGZyb20gMTZiaXQgIk5ldHdvcmsiIGZvcm1hdAogICAg
ICAgICAgICAkb3Njb3BlLT57cGFja2V0Y291bnRlcn0rKzsJCQkJCSMgVXBkYXRlIHJlY2VpdmVk
IHBhY2tldCBjb3VudAogICAgICAgICAgICAkb3Njb3BlLT57cGFja2V0bGVuZ3RofSA9IGxlbmd0
aCgkb3Njb3BlLT57cGFja2V0fSk7CSMgVXBkYXRlIHJlY2VpdmVkIHBhY2tldCBsZW5ndGgKCiAg
ICAgICAgICAgIGZvcmVhY2ggbXkgJHNhbXBsZShAeyRvc2NvcGUtPnthdWRpb3NhbXBsZXN9fSkg
ewkJIyBNb3ZlIHRoZSBzYW1wbGVzIHRvIHRoZSBmaWZvCiAgICAgICAgICAgICAgIHNoaWZ0cXVl
dWUoJG9zY29wZS0+e2ZpZm99LCAkc2FtcGxlKTsJCQkjIE9sZGVzdCBzYW1wbGUgb3V0LCBuZXdl
c3Qgc2FtcGxlIGluCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9zY29wZWluaXQoJG9zY29w
ZSk7CQkJCQkjIFJlZHJhdyB0aGUgc2NyZWVuIGJhY2tncm91bmQKICAgICAgICAgICAgJG9zY29w
ZS0+e2NvbG9yfSA9ICRvc2NvcGUtPntibHVlfTsJCQkJIyBQbG90IGRhdGEgaW4gYmx1ZQogICAg
ICAgICAgICBkcmF3Y3VydmUoJG9zY29wZSk7CQkJCQkJIyBQbG90IHRoZSBmaWZvIGFycmF5Cgog
ICAgICAgICAgICBzYXZlYXNwbmdtZW1vcnlmaWxlKCRvc2NvcGUpOwkJCQkjIFNhdmUgR0QgSW1h
Z2UgYXMgUE5HIG1lbW9yeSBmaWxlCgogICAgICAgICAgICBvcGVuIG15ICRmaCwgJzwnLCBcJG9z
Y29wZS0+e21lbW9yeWZpbGV9OwkJCSMgUmVidWlsZCB0aGUgc2NyZWVuIGJpdG1hcAogICAgICAg
ICAgICAkc2VsZi0+e2JtcH0gPSBXeDo6Qml0bWFwLT5uZXcoV3g6OkltYWdlLT5uZXcoJGZoLCB3
eEJJVE1BUF9UWVBFX1BORykpOwogICAgICAgICAgICBjbG9zZSAkZmg7CgogICAgICAgICAgICAk
c2VsZi0+e3NibX0tPlNldEJpdG1hcCgkc2VsZi0+e2JtcH0pOwkJCSMgUmVmcmVzaCBzY3JlZW4K
ICAgICAgICB9OwogICAgICAgIH0pOwoKICAgICR2ZXJ0aWNhbFNpemVyRnJhbWUtPkxheW91dCgp
OwoKICAgIHJldHVybiAkc2VsZjsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdWJyb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMKIyBJbml0aWFsaXplL3JlZHJh
dyB0aGUgTy1TY29wZSBJbWFnZSBiYWNrZ3JvdW5kCiMKc3ViIG9zY29wZWluaXQgewogICAgbXko
JG9zY29wZSkgPSBAXzsKICAgICRvc2NvcGUtPntpbWFnZX0gPSBHRDo6SW1hZ2UtPm5ldygkb3Nj
b3BlLT57bWF4d30sICRvc2NvcGUtPnttYXhofSkgfHwgZGllOwogICAgJG9zY29wZS0+e3doaXRl
fSA9ICRvc2NvcGUtPntpbWFnZX0tPmNvbG9yQWxsb2NhdGUoMjU1LDI1NSwyNTUpOwkjIDFzdCBh
bGxvY2F0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIC0gV2hpdGUKIyAgICAkb3Njb3Bl
LT57YmxhY2t9ID0gJG9zY29wZS0+e2ltYWdlfS0+Y29sb3JBbGxvY2F0ZSgwLDAsMCk7CQkjIFVu
dXNlZCBjb2xvcgogICAgJG9zY29wZS0+e2dyZWVufSA9ICRvc2NvcGUtPntpbWFnZX0tPmNvbG9y
QWxsb2NhdGUoMCwyNTUsMCk7CiAgICAkb3Njb3BlLT57Ymx1ZX0gPSAkb3Njb3BlLT57aW1hZ2V9
LT5jb2xvckFsbG9jYXRlKDAsMCwyNTUpOwojICAgICRvc2NvcGUtPnt5ZWxsb3d9ID0gJG9zY29w
ZS0+e2ltYWdlfS0+Y29sb3JBbGxvY2F0ZSgyNTUsMjU1LDApOwkjIFVudXNlZCBjb2xvcgojICAg
ICRvc2NvcGUtPntyZWR9ID0gJG9zY29wZS0+e2ltYWdlfS0+Y29sb3JBbGxvY2F0ZSgyNTUsMCww
KTsJCSMgVW51c2VkIGNvbG9yCiAgICAkb3Njb3BlLT57Y29sb3J9ID0gJG9zY29wZS0+e2dyZWVu
fTsJCQkJIyBTZXQgc2NyZWVuIGdyZWVuIG9uIHdoaXRlCiAgICBkcmF3Z3JpZCgkb3Njb3BlKTsK
fQoKIwojIFNhdmUgdGhlIEltYWdlIGFzIGEgUE5HIERpc2sgRmlsZShpbml0aWFsIHNjcmVlbiBi
YWNrZ3JvdW5kKQojCnN1YiBzYXZlYXNwbmdmaWxlIHsKICAgIG15KCRvc2NvcGUpID0gQF87CiAg
ICBteSAkcG5nX2RhdGEgPSAkb3Njb3BlLT57aW1hZ2V9LT5wbmc7CQkJCSMgV3JpdGUgaW1hZ2Ug
dG8gYSBmaWxlCiAgICBvcGVuIE9VVEZJTEUsICI+IiwgInJhd2F1ZGlvLnBuZyIgfHwgZGllOwog
ICAgYmlubW9kZSBPVVRGSUxFOwogICAgcHJpbnQgT1VURklMRSAkcG5nX2RhdGE7CiAgICBjbG9z
ZSBPVVRGSUxFOwp9CgojCiMgU2F2ZSB0aGUgSW1hZ2UgYXMgYSBQTkcgTWVtb3J5IEZpbGUodXBk
YXRlZCBzY3JlZW4gaW1hZ2UpCiMKc3ViIHNhdmVhc3BuZ21lbW9yeWZpbGUgewogICAgbXkoJG9z
Y29wZSkgPSBAXzsKICAgICRvc2NvcGUtPnttZW1vcnlmaWxlfSA9ICRvc2NvcGUtPntpbWFnZX0t
PnBuZzsJCQkjIFdyaXRlIGltYWdlIHRvIG1lbW9yeQp9CgojCiMgU2F2ZSB0aGUgSW1hZ2UgdG8g
YSBQTkcgRGlzayBmaWxlIHdpdGggaW5jcmVtZW50aW5nIGZpbGVuYW1lCiMKc3ViIHNuYXBhc3Bu
Z2ZpbGUgewogICAgbXkoJG9zY29wZSkgPSBAXzsKICAgIG15ICRwbmdfZGF0YSA9ICRvc2NvcGUt
PntpbWFnZX0tPnBuZzsJCQkJIyBXcml0ZSBpbWFnZSB0byBhIGRpc2sgZmlsZQogICAgb3BlbiBP
VVRGSUxFLCAiPiIsICJyYXdhdWRpbyRvc2NvcGUtPntzbmFwY291bnRlcn0ucG5nIiB8fCBkaWU7
CSMgQnVpbGQgdGhlIGZpbGVuYW1lCiAgICBiaW5tb2RlIE9VVEZJTEU7CiAgICBwcmludCBPVVRG
SUxFICRwbmdfZGF0YTsKICAgIGNsb3NlIE9VVEZJTEU7CiAgICAkb3Njb3BlLT57c25hcGNvdW50
ZXJ9Kys7CSAJCQkJCSMgSW5jcmVtZW50IGZpbGVuYW1lCn0KCiMKIyBEcmF3IGEgc2ltdWxhdGVk
IE8tU2NvcGUgU2NyZWVuCiMKc3ViIGRyYXdncmlkIHsKICAgIG15KCRvc2NvcGUpID0gQF87Cgog
ICAgbXkgJG1heHcgPSAkb3Njb3BlLT57bWF4d307CiAgICBteSAkbWF4aCA9ICRvc2NvcGUtPntt
YXhofTsKICAgIG15ICRjb2xvciA9ICRvc2NvcGUtPntjb2xvcn07CgojIERyYXcgQm9yZGVyCiAg
ICAkb3Njb3BlLT57aW1hZ2V9LT5zZXRUaGlja25lc3MoMyk7CiAgICAkb3Njb3BlLT57aW1hZ2V9
LT5yZWN0YW5nbGUoMSwgMiwgJG1heHctMiwgJG1heGgtMywgJGNvbG9yKTsJIyBGdWRnZSBib3gg
Y29vcmQgZm9yIGJlc3QgYXBwZWFyYW5jZQoKIyBEcmF3IGhvcml6b250YWwgbGluZXMKICAgICRv
c2NvcGUtPntpbWFnZX0tPnNldFRoaWNrbmVzcygxKTsKICAgIGZvcihteSAkaT0wOyAkaTwkbWF4
dzsgJGk9JGkrNTApIHsJCQkJCSMgNTAgcGl4ZWxzIHBlciBtYWpvciBkaXZpc2lvbgogICAgICAg
ICRvc2NvcGUtPntpbWFnZX0tPmxpbmUoMCwgJGksICRtYXh3LCAkaSwgJGNvbG9yKTsKICAgIH0K
CiMgRHJhdyB2ZXJ0aWNhbCBsaW5lcwogICAgZm9yKG15ICRpPTA7ICRpPCRtYXhoOyAkaT0kaSs1
MCkgewkJCQkJIyA1MCBwaXhlbHMgcGVyIG1ham9yIGRpdmlzaW9uCiAgICAgICAgJG9zY29wZS0+
e2ltYWdlfS0+bGluZSgkaSwgMCwgJGksICRtYXhoLCAkY29sb3IpOwogICAgfQoKIyBEcmF3IEF4
aXMKICAgICRvc2NvcGUtPntpbWFnZX0tPnNldFRoaWNrbmVzcygzKTsKCiAgICAkb3Njb3BlLT57
aW1hZ2V9LT5saW5lKCRtYXh3LzIsIDAsICRtYXh3LzIsICRtYXhoLCAkY29sb3IpOwkJIyBWZXJ0
aWNhbCBBeGlzCgogICAgJG9zY29wZS0+e2ltYWdlfS0+bGluZSgwLCAkbWF4aC8yLCAkbWF4dywg
JG1heGgvMiwgJGNvbG9yKTsJCSMgSG9yaXpvbnRhbCBBeGlzCgojIERyYXcgQXhpcyB0aWMgbWFy
a3MKICAgICRvc2NvcGUtPntpbWFnZX0tPnNldFRoaWNrbmVzcygxKTsKCiMgVmVydGljYWwgQXhp
cyB0aWMgbWFya3MKICAgIGZvcihteSAkaT0wOyAkaTwkbWF4aDsgJGk9JGkrMTApIHsJCQkJCSMg
MTAgcGl4ZWxzIHBlciBtaW5vciBkaXZpc2lvbgogICAgICAgICRvc2NvcGUtPntpbWFnZX0tPmxp
bmUoKCRtYXh3LzIpLTMsICRpLCAoJG1heHcvMikrMywgJGksICRjb2xvcik7ICMgNiBwaXhlbCB3
aWRlIHRpYyBtYXJrCiAgICB9CgojIEhvcml6b250YWwgQXhpcyB0aWMgbWFya3MKICAgIGZvciht
eSAkaT0wOyAkaTwkbWF4dzsgJGk9JGkrMTApIHsJCQkJCSMgMTAgcGl4ZWxzIHBlciBtaW5vciBk
aXZpc2lvbgogICAgICAgICRvc2NvcGUtPntpbWFnZX0tPmxpbmUoJGksICgkbWF4aC8yKSszLCAk
aSwgKCRtYXhoLzItMyksICRjb2xvcik7ICMgNiBwaXhlbCB3aWRlIHRpYyBtYXJrCiAgICB9Cgoj
IFNjcmVlbiBMYWJlbChzKSAtIFN0YXRpYyB0ZXh0IGZvciBub3cKICAgICRvc2NvcGUtPntpbWFn
ZX0tPnN0cmluZyhnZFNtYWxsRm9udCwgMTAsICAxMCwgJG9zY29wZS0+e3BjdHJsYWJlbH0sICAg
ICAkY29sb3IpOwogICAgJG9zY29wZS0+e2ltYWdlfS0+c3RyaW5nKGdkU21hbGxGb250LCAxMjAs
IDEwLCAkb3Njb3BlLT57cGFja2V0Y291bnRlcn0sICRjb2xvcik7CiAgICAkb3Njb3BlLT57aW1h
Z2V9LT5zdHJpbmcoZ2RTbWFsbEZvbnQsIDEwLCAgMjAsICRvc2NvcGUtPntzbGFiZWx9LCAgICAg
ICAgJGNvbG9yKTsKICAgICRvc2NvcGUtPntpbWFnZX0tPnN0cmluZyhnZFNtYWxsRm9udCwgMTIw
LCAyMCwgJG9zY29wZS0+e3NjYWxlZmFjdG9yfSwgICAkY29sb3IpOwogICAgJG9zY29wZS0+e2lt
YWdlfS0+c3RyaW5nKGdkU21hbGxGb250LCAxMCwgIDMwLCAkb3Njb3BlLT57cGxlbmxhYmVsfSwg
ICAgICRjb2xvcik7CiAgICAkb3Njb3BlLT57aW1hZ2V9LT5zdHJpbmcoZ2RTbWFsbEZvbnQsIDEy
MCwgMzAsICRvc2NvcGUtPntwYWNrZXRsZW5ndGh9LCAgJGNvbG9yKTsKfQoKCnN1YiBkcmF3Y3Vy
dmUgewkJCQkJCQkJIyBEcmF3IHRoZSBjdXJyZW50IGZpZm8KICAgIG15KCRvc2NvcGUpID0gQF87
CgogICAgbXkgJG1heHcgPSAkb3Njb3BlLT57bWF4d307CiAgICBteSAkbWF4aCA9ICRvc2NvcGUt
PnttYXhofTsKICAgIG15ICRjb2xvciA9ICRvc2NvcGUtPntjb2xvcn07CgogICAgJG9zY29wZS0+
e2ltYWdlfS0+c2V0VGhpY2tuZXNzKDEpOwoKICAgIG15ICRsYXN0eCA9IDA7CiAgICBteSAkbGFz
dHkgPSAwOwogICAgbXkgJHkgPSAwOwogICAgZm9yKG15ICRpPTA7ICRpPCRtYXh3OyAkaT0kaSsx
KSB7CQkJCQkjIDEgcGl4ZWwgc2FtcGxlIHdpZHRoCgogICAgICAgIGlmKCRvc2NvcGUtPntmaWZv
fVskaV0gPiAwKSB7CQkJCQkjIFNjYWxlL29mZnNldCB0aGUgc2FtcGxlCiAgICAgICAgICAgICR5
ID0gMzAwIC0gKCRvc2NvcGUtPntmaWZvfVskaV0gLyAkb3Njb3BlLT57c2NhbGVmYWN0b3J9KTsK
ICAgICAgICB9CiAgICAgICAgZWxzaWYoJG9zY29wZS0+e2ZpZm99WyRpXSA8IDApIHsKICAgICAg
ICAgICAgJHkgPSAzMDAgKyAoKGFicygkb3Njb3BlLT57Zmlmb31bJGldKSkgLyAkb3Njb3BlLT57
c2NhbGVmYWN0b3J9KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgJHkgPSAzMDA7
CQkJCQkJCSMgRGVmYXVsdCB0byAzMDAoInplcm8iIHZhbHVlKQogICAgICAgIH0KICAgICAgICAK
ICAgICAgICAkb3Njb3BlLT57aW1hZ2V9LT5saW5lKCRsYXN0eCwgJGxhc3R5LCAkaSwgJHksICRj
b2xvcik7CiAgICAgICAgJGxhc3R4ID0gJGk7CiAgICAgICAgJGxhc3R5ID0gJHk7CiAgICB9Cn0K
CnN1YiB1ZHBjb25uZWN0IHsKICAgIG15ICgkb3Njb3BlKSA9IEBfOwogICAgJG9zY29wZS0+e3Nv
Y2tldH0gPSBJTzo6U29ja2V0OjpJTkVULT5uZXcoCQkJCSMgT3BlbiB1ZHAgc29ja2V0IHRvIEdx
cngKICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxBZGRyID0+ICdsb2NhbGhvc3QnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbFBvcnQgPT4gNzM1NSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHJvdG8gICAgID0+ICd1ZHAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Cn0KCnN1YiB1ZHBkaXNjb25uZWN0IHsJCQkJCQkJIyBEaXNjb25uZWN0IHVkcCBzb2Nr
ZXQgZnJvbSBHcXJ4CiAgICBteSAoJG9zY29wZSkgPSBAXzsKICAgIGNsb3NlKCRvc2NvcGUtPntz
b2NrZXR9KTsKfQoKIyBlbnF1ZXVlLCBzaGlmdHF1ZXVlIGFuZCBmaWxscXVldWUgaW1wbGVtZW50
IGEgZmlmbyB0aGF0IGtlZXBzIHRoZSBtb3N0IHJlY2VudCA2MDAgc2FtcGxlcwojICAgIGVucXVl
dWUgYW5kIGZpbGxxdWV1ZSBmaWxsIHRoZSBmaWZvIGZvciB0aGUgZmlyc3QgdGltZSg2MDAgc2Ft
cGxlcykKIyAgICBzaGlmdHF1ZXVlIGhhbmRsZXMgYWxsIGZvbGxvd2luZyBzYW1wbGVzCiMgICAg
ICAgIHRvcHZhbHVlIGlzIGRpc2NhcmRlZCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyBlbnRlcmVkIGF0
IHRoZSBib3R0b20KIwojICAgIG5vdGU6ICQjeyRmaWZvfSBpcyB0aGUgaGlnaGVzdCBhcnJheSBp
bmRleChydW5zIDAtNTk5KQoKc3ViIGVucXVldWUgewkJCQkJCQkJIyBJbnNlcnQgYSBzYW1wbGUg
YXQgdGhlIGJvdHRvbSBvZiB0aGUgYXJyYXkKICAgIG15ICgkZmlmbywgJHNhbXBsZSkgPSBAXzsK
ICAgIGlmKCQjeyRmaWZvfSA8IDU5OSkgewogICAgICAgIHB1c2ggQCRmaWZvLCAkc2FtcGxlOwog
ICAgICAgIHJldHVybiAwOwkJCQkJCQkjIFNwYWNlIHN0aWxsIGF2YWlsYWJsZQogICAgfQogICAg
cmV0dXJuIDE7CQkJCQkJCQkjIEZ1bGwKfQoKc3ViIHNoaWZ0cXVldWUgewkJCQkJCQkjIFNoaWZ0
IG91dCBvbGRlc3QgYW5kIHB1c2ggaW4gbmV3ZXN0CiAgICBteSAoJGZpZm8sICRzYW1wbGUpID0g
QF87CiAgICBzaGlmdCAkZmlmbzsKICAgIHB1c2ggJGZpZm8sICRzYW1wbGUKfQoKc3ViIGZpbGxx
dWV1ZSB7CQkJCQkJCQkjIFJlYWQgcGFja2V0cyB1bnRpbCA2MDAgc2xvdCBmaWZvIGlzIGZpbGxl
ZAogICAgbXkgKCRvc2NvcGUpID0gQF87CiAgICB3aGlsZSAoMSkgewoKICAgICAgICAkb3Njb3Bl
LT57c29ja2V0fS0+cmVjdigkb3Njb3BlLT57cGFja2V0fSwyMDAwKTsJCSMgV2FpdCBmb3IgYSBw
YWNrZXQgLSBtYXhsZW5ndGggMjAwMAogICAgICAgIEB7JG9zY29wZS0+e2F1ZGlvc2FtcGxlc319
ID0gdW5wYWNrKCdzPConLCAkb3Njb3BlLT57cGFja2V0fSk7CSMgQ29udmVydCBmcm9tIDE2Yml0
ICJOZXR3b3JrIiBmb3JtYXQKICAgICAgICAkb3Njb3BlLT57cGFja2V0Y291bnRlcn0rKzsJCQkJ
CSMgVXBkYXRlIHJlY2VpdmVkIHBhY2tldCBjb3VudGVyCiAgICAgICAgJG9zY29wZS0+e3BhY2tl
dGxlbmd0aH0gPSBsZW5ndGgoJG9zY29wZS0+e3BhY2tldH0pOwkJIyBVcGRhdGUgcmVjZWl2ZWQg
cGFja2V0IGxlbmd0aAoKICAgICAgICBmb3JlYWNoIG15ICRzYW1wbGUoQHskb3Njb3BlLT57YXVk
aW9zYW1wbGVzfX0pIHsJCSMgTW92ZSB0aGUgc2FtcGxlcyB0byB0aGUgZmlmbwogICAgICAgICAg
ICAkb3Njb3BlLT57Zmlmb3N0YXR1c30gPSBlbnF1ZXVlKCRvc2NvcGUtPntmaWZvfSwgJHNhbXBs
ZSk7CSMgMC1ub3QgZnVsbCwgMS1mdWxsCiAgICAgICAgICAgIGlmKCRvc2NvcGUtPntmaWZvc3Rh
dHVzfSkge3JldHVybn07CQkJCSMgTG9vcCB1bnRpbCA2MDAgc2FtcGxlcyBhcmUgcXVldWVkCiAg
ICAgICAgfSAgCiAgICB9Cn0KCjE7Cgo=
--001a114784cc52616f0530107c5a
Content-Type: application/x-perl; name="udpserver.pl"
Content-Disposition: attachment; filename="udpserver.pl"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_imtejp6h1

IyEgL3Vzci9iaW4vcGVybAoKIyBHcXJ4IFVEUCBTZXJ2ZXIgVGVzdCBQcm9ncmFtIC0gdWRwc2Vy
dmVyLnBsCiMgICAgSmFtZXMgTS4gTHluZXMsIEpyLiBBcHJpbCAyLDIwMTYKIyAgICBTZW5kIHRl
c3QgVURQIHBhY2tldHMgdG8gdGhlIEdxcnhSYXdBdWRpb1Bsb3QucGwgcHJvZ3JhbQojICAgICAg
ICAxNmJpdCBzaWduZWQsIGxpdHRsZSBlbmRpYW4KIwojIFRvIFJ1bjogLi91ZHBzZXJ2ZXIucGwg
JgkJCQkJCSMgU3RhcnQgdGhlIHNlcnZlcgojICAgICAgICAgLi9HcXJ4UmF3QXVkaW9TZXJ2ZXIu
cGwJCQkJCSMgRGlzcGxheSB3YXZlZm9ybXMKIyAgICAgICAgIGtpbGwgJTEJCQkJCQkJIyBLaWxs
IHRoZSBzZXJ2ZXIKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIElPOjpTb2NrZXQ7CnVz
ZSBUaW1lOjpIaVJlcyBxdyhzbGVlcCk7CnVzZSBEYXRhOjpEdW1wZXI7CgoKIyBBcHBsaWNhdGlv
biBJbml0aWFsaXphdGlvbgpteSAkb3Njb3BlID0ge307CQkJCQkJCSMgQ3JlYXRlIGEgYmxhbmsg
by1zY29wZQokb3Njb3BlLT57d2F2ZWZvcm19ID0gKCk7CQkJCQkJIyBDcmVhdGUgYSBibGFuayB3
YXZlZm9ybQokb3Njb3BlLT57c29ja2V0fSA9IElPOjpTb2NrZXQ6OklORVQtPm5ldygJCQkJIyBP
cGVuIHVkcCBzb2NrZXQgdG8gR3FyeFJhd0F1ZGlvUGxvdC5wbAogICAgICAgICAgICAgICAgICAg
IFBlZXJBZGRyID0+ICdsb2NhbGhvc3QnLAogICAgICAgICAgICAgICAgICAgIFBlZXJQb3J0ID0+
IDczNTUsCiAgICAgICAgICAgICAgICAgICAgUHJvdG8gICAgID0+ICd1ZHAnCiAgICAgICAgICAg
ICAgICAgICAgKTsKJG9zY29wZS0+e3BhY2tldH0gPSAoKTsJCQkJCQkJIyBDcmVhdGUgYSBibGFu
ayBVRFAgcGFja2V0IHRvIHNlbmQKCgojICBCdWlsZCBhbmQgU2VuZCB0aGUgdHJhbnNtaXQgcGFj
a2V0cyAtIGEgdmFyaWV0eSBvZiB3YXZlIHR5cGVzCmZvcihteSAkaT0wOyAkaTwzMDAwOyAkaSsr
KSB7CiAgICBmb3IobXkgJGo9MDsgJGo8MTsgJGorKykgewogICAgICAgIHNpbndhdmVmb3JtKCRv
c2NvcGUpOwkJCQkJCSMgU2luIHdhdmUKICAgICAgICBwYWNrcGFja2V0KCRvc2NvcGUpOwogICAg
ICAgIHNlbmRwYWNrZXQoJG9zY29wZSk7CiAgICAgICAgc2xlZXAoLjAzKTsKICAgIH0KICAgIGZv
cihteSAkaj0wOyAkajw1OyAkaisrKSB7CiAgICAgICAgY2xlYXJ3YXZlZm9ybSgkb3Njb3BlKTsJ
CQkJCQkjIFplcm8gd2F2ZQogICAgICAgIHBhY2twYWNrZXQoJG9zY29wZSk7CiAgICAgICAgc2Vu
ZHBhY2tldCgkb3Njb3BlKTsKICAgICAgICBzbGVlcCguMDMpOwogICAgfQogICAgZm9yKG15ICRq
PTA7ICRqPDE7ICRqKyspIHsKICAgICAgICByYW5kb213YXZlZm9ybSgkb3Njb3BlKTsJCQkJCSMg
UmFuZG9tIHdhdmUKICAgICAgICBwYWNrcGFja2V0KCRvc2NvcGUpOwogICAgICAgIHNlbmRwYWNr
ZXQoJG9zY29wZSk7CiAgICAgICAgc2xlZXAoLjAzKTsKICAgIH0KICAgIGZvcihteSAkaj0wOyAk
ajw1OyAkaisrKSB7CiAgICAgICAgY2xlYXJ3YXZlZm9ybSgkb3Njb3BlKTsJCQkJCQkjIFplcm8g
d2F2ZQogICAgICAgIHBhY2twYWNrZXQoJG9zY29wZSk7CiAgICAgICAgc2VuZHBhY2tldCgkb3Nj
b3BlKTsKICAgICAgICBzbGVlcCguMDMpOwogICAgfQp9CgojZXhpdApjbG9zZSgkb3Njb3BlLT57
c29ja2V0fSk7CQkJCQkJIyBDbG9zZSB0aGUgVURQIGNvbm5lY3Rpb24KCgojIFN1YnJvdXRpbmVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKc3ViIHBhY2twYWNr
ZXQgewogICAgbXkoJG9zY29wZSkgPSBAXzsKICAgICRvc2NvcGUtPntwYWNrZXR9ID0gcGFjaygn
czwqJywgQHskb3Njb3BlLT57d2F2ZWZvcm19fSk7CQkjIENvbnZlcnQgdG8gMTZiaXQgIk5ldHdv
cmsiIGZvcm1hdCAgICAKfQoKc3ViIHNlbmRwYWNrZXQgewogICAgbXkoJG9zY29wZSkgPSBAXzsK
ICAgICRvc2NvcGUtPntzb2NrZXR9LT5zZW5kKCRvc2NvcGUtPntwYWNrZXR9KTsKfQoKc3ViIHNp
bndhdmVmb3JtIHsJCQkJCQkJIyBCdWlsZCBvbmUgY3ljbGUgb2YgYSB3YXZlZm9ybQogICAgbXko
JG9zY29wZSkgPSBAXzsKCiAgICBmb3IobXkgJGk9MDsgJGk8MzYwOyAkaSsrKSB7CiAgICAgICAg
bXkgJHJhZHMgPSAkaS81Ny4zMjsKICAgICAgICBteSAkcyA9IChzaW4oJHJhZHMpICogMTAwKSAr
IHJhbmQoNTApOwkJCQkjIFNpbiB3YXZlIHBsdXMgbm9pc2UKICAgICAgICAkb3Njb3BlLT57d2F2
ZWZvcm19WyRpXSA9ICRzOwogICAgfQp9CgpzdWIgY2xlYXJ3YXZlZm9ybSB7CQkJCQkJCSMgWmVy
byBvdXQgdGhlIHdhdmVmb3JtCiAgICBteSgkb3Njb3BlKSA9IEBfOwoKICAgIGZvcihteSAkaT0w
OyAkaTwzNjA7ICRpKyspIHsKICAgICAgICAkb3Njb3BlLT57d2F2ZWZvcm19WyRpXSA9IDA7CiAg
ICB9Cn0KCnN1YiByYW5kb213YXZlZm9ybSB7CQkJCQkJCSMgUmFuZG9tIHdhdmVmb3JtCiAgICBt
eSAoJG9zY29wZSkgPSBAXzsKCiAgICBmb3IobXkgJGk9MDsgJGk8MzYwOyAkaSsrKSB7CiAgICAg
ICAgJG9zY29wZS0+e3dhdmVmb3JtfVskaV0gPSByYW5kKDEwMCkgLSA1MDsKICAgIH0KfQoKCg==
--001a114784cc52616f0530107c5a
Content-Type: image/png; name="rawaudio3.png"
Content-Disposition: attachment; filename="rawaudio3.png"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_imtem53s2

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
GouMsOIzsAay/Aosulq0kCZLbJ25RrLoyaxomhXhs7HsdVnxEixcZ6GFWOiHPstZkRWdxiJjrO9a
LHn9rzi5fgrLXYnFjGNhFVYty4+w3NNZrhJrXrRIm+Uos8gSLMdusejJLLmdnooRFm2x7AkWVWep
VWiz6FlYTp2FbYekbRYznhWfi8V+BpbtjLMiI1l4kLVwOSb3Qfhntth6Fyb/ubsLX+v1YXAsPl56
DO+D5+Nd0POrj1eIlluLFnuajlZ+ldfaO3GCJT/hsDUr/tFiWRWLnJeFYqLAcoFlJCs1n8WPykxg
kYrFjGBlc/k2i3VZ5KysLFqYucWfzzWYlaIx1u0WLGQ0i46x8NlYVIElzoKbx/KMZNFNWbTZYhMW
qrFc+fs+xlmMlBXrsPK/+1pnYXFyLB1n9XW1RrRQjSWuRhtkYbNYdsFKz8uieQXpZ5WU7Vjo52Gh
LVi1ihms8jGwpljUJFYJOQ/rptOVEayhaDFgqbBaLZqs3q62YM3o6hwsja7eJAsZytLt6g2wulne
CJah0QIWsIAFrDOxjCzGRgtYwAIWsN4sC+bywAIWsIB1ySzI8sACFrCAdcksyPLAAhawgHXJLMjy
wAIWsIBlIMvIYmy0gAUsYAHrzbJgLg8sYAELWJfMgiwPLGABC1iXzIIsDyxgAQtYl8yCLA8sYAEL
WAayjCzGRgtYwAIWsN4sC+bywAIWsIB1ySzI8sACFrCAdcksyPLAAhawgHXJLMjywALWCSwjC7BU
ivp+P8fYQv8HNUvAIriqHBAAAAAASUVORK5CYII=
--001a114784cc52616f0530107c5a--
0
jmlynesjr
4/9/2016 5:17:26 PM
perl.wxperl.users 3070 articles. 0 followers. Follow

0 Replies
298 Views

Similar Articles

[PageSpeed] 15

Reply: