Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion The new XPLC module loading code

Received: by 10.36.127.16 with SMTP id z16mr1606086nzc.1181090070747;
        Tue, 05 Jun 2007 17:34:30 -0700 (PDT)
Return-Path: <wrl...@gmail.com>
Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.244])
        by mx.google.com with ESMTP id h71si832458nzf.2007.06.05.17.34.29;
        Tue, 05 Jun 2007 17:34:30 -0700 (PDT)
Received-SPF: pass (google.com: domain of wrl...@gmail.com designates 209.85.132.244 as permitted sender)
DomainKey-Status: good (test mode)
Received: by an-out-0708.google.com with SMTP id d18so435492and
        for <wvstreams-devel@googlegroups.com>; Tue, 05 Jun 2007 17:34:29 -0700 (PDT)
DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed;
        d=gmail.com; s=beta;
        h=domainkey-signature:received:received:subject:from:to:content-type:date:message-id:mime-version:x-mailer;
        b=oIzmwspOOLe7wNX6p7TPplzOzbb7nDstQ3dwPGGQkYyRt7dHbdA5FqoPy5qTMnM679hHJA2aqdCE6tL2ymLvonWwiVpvrFedgyYNva2OX9Eosq5uZb/GwJpVATwxNCBUGU2b5lNDqPOyqZNUJHZ70vk1xM5xaH/BEw09kRXlN/s=
DomainKey-Signature: a=rsa-sha1; c=nofws;
        d=gmail.com; s=beta;
        h=received:subject:from:to:content-type:date:message-id:mime-version:x-mailer;
        b=RnCX0LdPeozezTdXF+2fJyt3H1fRZ0LSaSuydlLw6LHx9prq+tNBpEzLS0bzr76HC3aIgfK4gy2BZ2Atue4RWe1w6ONiIJu51ZPpm4KOzg+IJ2jLPhbX62cN7mrLp72S9zImZAY7fhmjbF4Y3a8/tuxfc6VX9rkesWZXac6nhaQ=
Received: by 10.100.229.12 with SMTP id b12mr3691705anh.1181090069486;
        Tue, 05 Jun 2007 17:34:29 -0700 (PDT)
Return-Path: <wrl...@gmail.com>
Received: from ?192.168.0.13? ( [69.159.108.87])
        by mx.google.com with ESMTP id c2sm3169623ana.2007.06.05.17.34.27;
        Tue, 05 Jun 2007 17:34:28 -0700 (PDT)
Subject: The new XPLC module loading code
From: William Lachance <wrl...@gmail.com>
To: wvstreams-devel@googlegroups.com
Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-cGuI2rg7zlm86Uag8XeX"
Date: Tue, 05 Jun 2007 20:35:12 -0400
Message-Id: <1181090112.6000.8.camel@addiction>
Mime-Version: 1.0
X-Mailer: Evolution 2.10.1 


--=-cGuI2rg7zlm86Uag8XeX
Content-Type: multipart/mixed; boundary="=-UbTuvReQqFoR/chZATEy"


--=-UbTuvReQqFoR/chZATEy
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Attached is a diff which merges in Simon Law's XPLC moniker handling
work from sfllaw-uniconf into the wvstreams_inversion_2 branch. If I
understand the code correctly, these changes only involve modifying the
way objects are constructed using monikers: changing wvstreams to only
load the symbols (and corresponding libraries) when needed would involve
further work.=20

Thus, the followup questions are:

1. Does this change bring any immediate benefit?
2. How much work would it be to make substantial portions of WvStreams
loadable on demand? (rather than just on startup)
--=20
William Lachance <wrl...@gmail.com>


--=-UbTuvReQqFoR/chZATEy
Content-Disposition: attachment; filename=xplc-moniker.diff
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name=xplc-moniker.diff; charset=UTF-8

L3Vzci9iaW4vc3ZuOiAvaG9tZS93bGFjaC9zdm4vYnJhbmNoZXMvd3ZzdHJlYW1zX2ludmVyc2lv
bl8yL2xpYi9saWJjcnlwdG8uc28uMC45Ljg6IG5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxh
YmxlIChyZXF1aXJlZCBieSAvdXNyL2xpYi9saWJwcS5zby41KQ0KL3Vzci9iaW4vc3ZuOiAvaG9t
ZS93bGFjaC9zdm4vYnJhbmNoZXMvd3ZzdHJlYW1zX2ludmVyc2lvbl8yL2xpYi9saWJzc2wuc28u
MC45Ljg6IG5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlIChyZXF1aXJlZCBieSAvdXNy
L2xpYi9saWJwcS5zby41KQ0KL3Vzci9iaW4vc3ZuOiAvaG9tZS93bGFjaC9zdm4vYnJhbmNoZXMv
d3ZzdHJlYW1zX2ludmVyc2lvbl8yL2xpYi9saWJzc2wuc28uMC45Ljg6IG5vIHZlcnNpb24gaW5m
b3JtYXRpb24gYXZhaWxhYmxlIChyZXF1aXJlZCBieSAvdXNyL2xpYi9saWJuZW9uLnNvLjI2KQ0K
L3Vzci9iaW4vc3ZuOiAvaG9tZS93bGFjaC9zdm4vYnJhbmNoZXMvd3ZzdHJlYW1zX2ludmVyc2lv
bl8yL2xpYi9saWJjcnlwdG8uc28uMC45Ljg6IG5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxh
YmxlIChyZXF1aXJlZCBieSAvdXNyL2xpYi9saWJuZW9uLnNvLjI2KQ0KSW5kZXg6IHVuaWNvbmYv
dW5pc2VjdXJlZ2VuLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gdW5pY29uZi91bmlzZWN1cmVnZW4uY2MJ
KHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pc2VjdXJlZ2VuLmNjCSh3b3JraW5nIGNv
cHkpDQpAQCAtMjEsNyArMjEsOSBAQA0KICAgICByZXR1cm4gbmV3IFVuaVNlY3VyZUdlbihzKTsN
CiB9DQogDQotc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJwZXJtIiwgY3JlYXRv
cik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweGUzMDEzMzYwLCAweGRlYWMsIDB4NGQ3
OCwNCisJCQkgIHsweGI2LCAweDFkLCAweGQyLCAweGY4LCAweDIxLCAweDU0LCAweDliLCAweDBl
fX07DQorc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJwZXJtIiwgdXVpZCwgY3Jl
YXRvcik7DQogDQogDQogVW5pU2VjdXJlR2VuOjpVbmlTZWN1cmVHZW4oV3ZTdHJpbmdQYXJtIG1v
bmlrZXIsIFVuaVBlcm1HZW4gKl9wZXJtcykNCkluZGV4OiB1bmljb25mL3VuaWRlZmdlbi5jYw0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pZGVmZ2VuLmNjCShyZXZpc2lvbiAxMTYyNSkNCisr
KyB1bmljb25mL3VuaWRlZmdlbi5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTIyLDExICsyMiwxMiBA
QA0KICAgICByZXR1cm4gbmV3IFVuaURlZkdlbih3dmNyZWF0ZTxJVW5pQ29uZkdlbj4ocykpOw0K
IH0NCiANCitzdGF0aWMgY29uc3QgVVVJRCB1dWlkID0gezB4MGIyMTBkMDYsIDB4MmE5OCwgMHg0
NWZhLA0KKwkJCSAgezB4YTksIDB4MDgsIDB4YTAsIDB4YTMsIDB4NjAsIDB4MTAsIDB4N2EsIDB4
OTl9fTsNCiAvLyB0aGlzIG5hbWUgaXMgdG9vIGNvbmZ1c2luZy4gIFdlIHNob3VsZCBkZXByZWNh
dGUgaXQuDQotc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJkZWZhdWx0IiwgY3Jl
YXRvcik7DQotDQorc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJkZWZhdWx0Iiwg
dXVpZCwgY3JlYXRvcik7DQogLy8gYSBiZXR0ZXIgbmFtZSBmb3IgdGhlIHNhbWUgdGhpbmcuDQot
c3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnMigid2lsZGNhcmQiLCBjcmVhdG9yKTsN
CitzdGF0aWMgV3ZNb25pa2VyPElVbmlDb25mR2VuPiByZWcyKCJ3aWxkY2FyZCIsIHV1aWQsIGNy
ZWF0b3IpOw0KIA0KIA0KIFVuaUNvbmZLZXkgVW5pRGVmR2VuOjpmaW5kZGVmYXVsdChjb25zdCBV
bmlDb25mS2V5ICZrZXksIGNoYXIgKnAsIGNoYXIgKnEpDQpJbmRleDogdW5pY29uZi91bml3dmNv
bmZnZW4uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSB1bmljb25mL3VuaXd2Y29uZmdlbi5jYwkocmV2aXNp
b24gMTE2MjUpDQorKysgdW5pY29uZi91bml3dmNvbmZnZW4uY2MJKHdvcmtpbmcgY29weSkNCkBA
IC0zMyw3ICszMyw5IEBADQogICAgIHJldHVybiBuZXcgVW5pV3ZDb25mR2VuKG5ldyBXdkNvbmYo
cykpOw0KIH0NCiANCi1zdGF0aWMgV3ZNb25pa2VyPElVbmlDb25mR2VuPiByZWcoInd2Y29uZiIs
IGNyZWF0b3IpOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHhlN2Q2Y2M2OSwgMHg0OTRl
LCAweDQwOGQsDQorCQkJICB7MHhhZSwgMHg1ZSwgMHhjZSwgMHg4ZSwgMHg3MywgMHg2YSwgMHgz
MSwgMHhkNn19Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHJlZygid3Zjb25mIiwg
dXVpZCwgY3JlYXRvcik7DQogDQogDQogdm9pZCBVbmlXdkNvbmZHZW46Om5vdGlmeSh2b2lkICp1
c2VyZGF0YSwgV3ZTdHJpbmdQYXJtIHNlY3Rpb24sDQpJbmRleDogdW5pY29uZi91bmljYWNoZWdl
bi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pY2FjaGVnZW4uY2MJKHJldmlzaW9uIDEx
NjI1KQ0KKysrIHVuaWNvbmYvdW5pY2FjaGVnZW4uY2MJKHdvcmtpbmcgY29weSkNCkBAIC0xOSw3
ICsxOSw5IEBADQogICAgIHJldHVybiBuZXcgVW5pQ2FjaGVHZW4od3ZjcmVhdGU8SVVuaUNvbmZH
ZW4+KHMpKTsNCiB9DQogDQotc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJjYWNo
ZSIsIGNyZWF0b3IpOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHg5ZDM0MjM2ZSwgMHgz
Y2YyLCAweDQ2MjYsDQorCQkJICB7MHg5YywgMHgxNiwgMHg2OSwgMHhlNywgMHhmNiwgMHhjYywg
MHhiMSwgMHhjMX19Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHJlZygiY2FjaGUi
LCB1dWlkLCBjcmVhdG9yKTsNCiANCiANCiAvKioqKiogVW5pQ2FjaGVHZW4gKioqKiovDQpJbmRl
eDogdW5pY29uZi91bmlyZXRyeWdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pcmV0
cnlnZW4uY2MJKHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pcmV0cnlnZW4uY2MJKHdv
cmtpbmcgY29weSkNCkBAIC00MSw3ICs0MSw5IEBADQogICAgICAgICAgICAgcmV0cnlfaW50ZXJ2
YWxfbXMpOw0KIH0NCiANCi1zdGF0aWMgV3ZNb25pa2VyPElVbmlDb25mR2VuPiByZWcoInJldHJ5
IiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweDEwMjczNDk0LCAweGQw
NTAsIDB4NDZhOCwNCisJCQkgIHsweDljLCAweGJjLCAweGU2LCAweDFhLCAweGYwLCAweDY3LCAw
eDc3LCAweGZhfX07DQorc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJyZXRyeSIs
IHV1aWQsIGNyZWF0b3IpOw0KIA0KIA0KIC8qKioqKiBVbmlSZXRyeUdlbiAqKioqKi8NCkluZGV4
OiB1bmljb25mL3VuaXRlbXBnZW4uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB1bmljb25mL3VuaXRlbXBn
ZW4uY2MJKHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pdGVtcGdlbi5jYwkod29ya2lu
ZyBjb3B5KQ0KQEAgLTE1LDcgKzE1LDkgQEANCiAgICAgcmV0dXJuIG5ldyBVbmlUZW1wR2VuKCk7
DQogfQ0KIA0KLXN0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHJlZygidGVtcCIsIGNyZWF0
b3IpOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHhhYTYwZTZkZCwgMHgyZjdmLCAweDQw
MTQsDQorCQkJICB7MHg5MSwgMHgwZSwgMHhlZiwgMHhiZSwgMHhjZSwgMHhhZiwgMHhhNSwgMHgz
M319Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHJlZygidGVtcCIsIHV1aWQsIGNy
ZWF0b3IpOw0KIA0KIA0KIC8qKioqKiBVbmlUZW1wR2VuICoqKioqLw0KSW5kZXg6IHVuaWNvbmYv
dW5pYXV0b2dlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pYXV0b2dlbi5jYwkocmV2
aXNpb24gMTE2MjUpDQorKysgdW5pY29uZi91bmlhdXRvZ2VuLmNjCSh3b3JraW5nIGNvcHkpDQpA
QCAtNjAsNCArNjAsNiBAQA0KIH0NCiANCiANCi1zdGF0aWMgV3ZNb25pa2VyPElVbmlDb25mR2Vu
PiBhdXRvcmVnKCJhdXRvIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsw
eDE3ZTYxNjcyLCAweDg2MDcsIDB4NGZhYSwNCisJCQkgIHsweDllLCAweDg3LCAweDllLCAweGJh
LCAweDBlLCAweGQzLCAweGJjLCAweDRkfX07DQorc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdl
bj4gYXV0b3JlZygiYXV0byIsIHV1aWQsIGNyZWF0b3IpOw0KSW5kZXg6IHVuaWNvbmYvdW5pbGlz
dGdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pbGlzdGdlbi5jYwkocmV2aXNpb24g
MTE2MjUpDQorKysgdW5pY29uZi91bmlsaXN0Z2VuLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtNTUs
OSArNTUsMTEgQEANCiANCiAgICAgcmV0dXJuIG5ldyBVbmlMaXN0R2VuKGwpOw0KIH0NCi0gDQot
c3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJsaXN0IiwgY3JlYXRvcik7DQogDQor
c3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweGJhY2M1MzAxLCAweDMwOTcsIDB4NDE4YSwNCisJ
CQkgIHsweGJmLCAweGU5LCAweGNlLCAweGFlLCAweGJlLCAweDQ4LCAweGFiLCAweGMyfX07DQor
c3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJsaXN0IiwgdXVpZCwgY3JlYXRvcik7
DQorDQogVW5pTGlzdEdlbjo6VW5pTGlzdEdlbihVbmlDb25mR2VuTGlzdCAqX2wpIDogbChfbCkN
CiB7DQogICAgIFVuaUNvbmZHZW5MaXN0OjpJdGVyIGkoKmwpOw0KSW5kZXg6IHVuaWNvbmYvdW5p
cmVhZG9ubHlnZW4uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB1bmljb25mL3VuaXJlYWRvbmx5Z2VuLmNj
CShyZXZpc2lvbiAxMTYyNSkNCisrKyB1bmljb25mL3VuaXJlYWRvbmx5Z2VuLmNjCSh3b3JraW5n
IGNvcHkpDQpAQCAtMTYsNCArMTYsNiBAQA0KICAgICByZXR1cm4gbmV3IFVuaVJlYWRPbmx5R2Vu
KHd2Y3JlYXRlPElVbmlDb25mR2VuPihzKSk7DQogfQ0KIA0KLXN0YXRpYyBXdk1vbmlrZXI8SVVu
aUNvbmZHZW4+IHJlZygicmVhZG9ubHkiLCBjcmVhdG9yKTsNCitzdGF0aWMgY29uc3QgVVVJRCB1
dWlkID0gezB4OGI5MzcwMmMsIDB4ODRjZiwgMHg0ZWUyLA0KKwkJCSAgezB4YjcsIDB4MTEsIDB4
ZjksIDB4MDMsIDB4ODcsIDB4MzgsIDB4Y2EsIDB4ZDF9fTsNCitzdGF0aWMgV3ZNb25pa2VyPElV
bmlDb25mR2VuPiByZWcoInJlYWRvbmx5IiwgdXVpZCwgY3JlYXRvcik7DQpJbmRleDogdW5pY29u
Zi91bmliYWNoZWxvcmdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pYmFjaGVsb3Jn
ZW4uY2MJKHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pYmFjaGVsb3JnZW4uY2MJKHdv
cmtpbmcgY29weSkNCkBAIC0xNSw3ICsxNSw5IEBADQogICAgIHJldHVybiBuZXcgVW5pQmFjaGVs
b3JHZW4ocyk7DQogfQ0KIA0KLXN0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IG1vbmlrZXIo
ImJhY2hlbG9yIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweDQ0YjJl
NDlmLCAweDNjNDIsIDB4NDkxNSwNCisJCQkgIHsweGIxLCAweGM3LCAweDFmLCAweGRiLCAweGY5
LCAweDM1LCAweDVlLCAweGRlfX07DQorc3RhdGljIFd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gbW9u
aWtlcigiYmFjaGVsb3IiLCB1dWlkLCBjcmVhdG9yKTsNCiANCiBVbmlCYWNoZWxvckdlbjo6VW5p
QmFjaGVsb3JHZW4oSVVuaUNvbmZHZW4gKmlubmVyKQ0KICAgICA6IFVuaUZpbHRlckdlbihpbm5l
cikNCkluZGV4OiB1bmljb25mL3VuaWZpbGVzeXN0ZW1nZW4uY2MNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB1
bmljb25mL3VuaWZpbGVzeXN0ZW1nZW4uY2MJKHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYv
dW5pZmlsZXN5c3RlbWdlbi5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTE3LDcgKzE3LDkgQEANCiAg
ICAgcmV0dXJuIG5ldyBVbmlGaWxlU3lzdGVtR2VuKHMsIDA3NzcpOw0KIH0NCiANCi1Xdk1vbmlr
ZXI8SVVuaUNvbmZHZW4+IFVuaUZpbGVTeXN0ZW1HZW5Nb25pa2VyKCJmcyIsIGNyZWF0b3IpOw0K
K3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHhjODhlNTVlMywgMHg2NGNjLCAweDQ5NjYsDQor
CQkJICB7MHhhYywgMHg0YywgMHg0OSwgMHg0OSwgMHgzOCwgMHg0YywgMHgwMiwgMHg4Yn19Ow0K
K1d2TW9uaWtlcjxJVW5pQ29uZkdlbj4gVW5pRmlsZVN5c3RlbUdlbk1vbmlrZXIoImZzIiwgdXVp
ZCwgY3JlYXRvcik7DQogDQogDQogVW5pRmlsZVN5c3RlbUdlbjo6VW5pRmlsZVN5c3RlbUdlbihX
dlN0cmluZ1Bhcm0gX2RpciwgbW9kZV90IF9tb2RlKQ0KSW5kZXg6IHVuaWNvbmYvdW5pZmFzdHJl
Z2V0Z2VuLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gdW5pY29uZi91bmlmYXN0cmVnZXRnZW4uY2MJKHJl
dmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pZmFzdHJlZ2V0Z2VuLmNjCSh3b3JraW5nIGNv
cHkpDQpAQCAtMTcsNyArMTcsOSBAQA0KICAgICByZXR1cm4gbmV3IFVuaUZhc3RSZWdldEdlbih3
dmNyZWF0ZTxJVW5pQ29uZkdlbj4ocykpOw0KIH0NCiANCi1zdGF0aWMgV3ZNb25pa2VyPElVbmlD
b25mR2VuPiByZWcoImZhc3QtcmVnZXQiLCBjcmVhdG9yKTsNCitzdGF0aWMgY29uc3QgVVVJRCB1
dWlkID0gezB4Y2NhMzAwZWUsIDB4YWQ2NiwgMHg0MjAxLA0KKwkJCSAgezB4YjcsIDB4ZGUsIDB4
ZTUsIDB4ZGQsIDB4YzgsIDB4NDEsIDB4MzAsIDB4OTh9fTsNCitzdGF0aWMgV3ZNb25pa2VyPElV
bmlDb25mR2VuPiByZWcoImZhc3QtcmVnZXQiLCB1dWlkLCBjcmVhdG9yKTsNCiANCiANCiBVbmlG
YXN0UmVnZXRHZW46OlVuaUZhc3RSZWdldEdlbihJVW5pQ29uZkdlbiAqX2lubmVyKSA6DQpJbmRl
eDogdW5pY29uZi91bml0cmFuc2FjdGlvbmdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYv
dW5pdHJhbnNhY3Rpb25nZW4uY2MJKHJldmlzaW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvdW5pdHJh
bnNhY3Rpb25nZW4uY2MJKHdvcmtpbmcgY29weSkNCkBAIC0xMiw3ICsxMiw5IEBADQogCXJldHVy
biBOVUxMOw0KIH0NCiANCi1zdGF0aWMgV3ZNb25pa2VyPElVbmlDb25mR2VuPiBtb25pa2VyKCJ0
cmFuc2FjdGlvbiIsIGNyZWF0b3IpOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHhjNmRh
Y2VjMSwgMHhlNmI0LCAweDQ2YTAsDQorCQkJICB7MHg5NCwgMHhlYSwgMHg4ZiwgMHhiMCwgMHgw
ZiwgMHhlMywgMHhiZCwgMHg1N319Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IG1v
bmlrZXIoInRyYW5zYWN0aW9uIiwgdXVpZCwgY3JlYXRvcik7DQogDQogLyogVGhpcyBlbnVtIGlz
IGEgZmllbGQgb2YgVW5pQ29uZkNoYW5nZVRyZWUuIEl0IGluZGljYXRlcyB0aGUgdHlwZSBvZg0K
ICAgIGNoYW5nZSByZXByZXNlbnRlZCBieSBhIG5vZGUgaW4gYSBVbmlDb25mQ2hhbmdlVHJlZS4g
Ki8NCkluZGV4OiB1bmljb25mL3VuaWZzdHJlZWdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNv
bmYvdW5pZnN0cmVlZ2VuLmNjCShyZXZpc2lvbiAxMTYyNSkNCisrKyB1bmljb25mL3VuaWZzdHJl
ZWdlbi5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTgxLDYgKzgxLDggQEANCiAgICAgcmV0dXJuIG5l
dyBVbmlBdXRvTW91bnRHZW4ocyk7DQogfQ0KIA0KLVd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gVW5p
RnNUcmVlR2VuTW9uaWtlcigiZnN0cmVlIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQg
dXVpZCA9IHsweDU2OWMzOTI3LCAweDdjNGUsIDB4NDU3MCwNCisJCQkgIHsweDgxLCAweGUyLCAw
eDNmLCAweDk0LCAweDU5LCAweDExLCAweDkxLCAweGJjfX07DQorV3ZNb25pa2VyPElVbmlDb25m
R2VuPiBVbmlGc1RyZWVHZW5Nb25pa2VyKCJmc3RyZWUiLCB1dWlkLCBjcmVhdG9yKTsNCiANCiAN
CkluZGV4OiB1bmljb25mL3VuaXJlcGxpY2F0ZWdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNv
bmYvdW5pcmVwbGljYXRlZ2VuLmNjCShyZXZpc2lvbiAxMTYyNSkNCisrKyB1bmljb25mL3VuaXJl
cGxpY2F0ZWdlbi5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTQ1LDcgKzQ1LDkgQEANCiAgICAgcmV0
dXJuIG5ldyBVbmlSZXBsaWNhdGVHZW4oZ2Vucyk7DQogfQ0KIA0KLXN0YXRpYyBXdk1vbmlrZXI8
SVVuaUNvbmZHZW4+IHJlZygicmVwbGljYXRlIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVV
SUQgdXVpZCA9IHsweDE0OWUyOWIwLCAweGQxY2QsIDB4NDE1YywNCisJCQkgIHsweDg3LCAweGU3
LCAweDk3LCAweGVmLCAweDcxLCAweDE5LCAweDkzLCAweDFhfX07DQorc3RhdGljIFd2TW9uaWtl
cjxJVW5pQ29uZkdlbj4gcmVnKCJyZXBsaWNhdGUiLCB1dWlkLCBjcmVhdG9yKTsNCiANCiANCiAv
KioqKiogVW5pUmVwbGljYXRlR2VuICoqKioqLw0KSW5kZXg6IHVuaWNvbmYvZGFlbW9uL3VuaWNv
bmZkLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gdW5pY29uZi9kYWVtb24vdW5pY29uZmQuY2MJKHJldmlz
aW9uIDExNjI1KQ0KKysrIHVuaWNvbmYvZGFlbW9uL3VuaWNvbmZkLmNjCSh3b3JraW5nIGNvcHkp
DQpAQCAtNTMsNyArNTMsOSBAQA0KICAgICByZXR1cm4gZ2VuOw0KIH0NCiANCi1Xdk1vbmlrZXI8
SVVuaUNvbmZHZW4+IFVuaU5hbWVkTW9uaWtlcigibmFtZWQiLCBjcmVhdG9yKTsNCitzdGF0aWMg
Y29uc3QgVVVJRCB1dWlkID0gezB4ZDM0YTNhZjgsIDB4OWNkNCwgMHg0Y2U4LA0KKwkJCSAgezB4
YTAsIDB4NmEsIDB4YmYsIDB4MjcsIDB4NDMsIDB4MmEsIDB4ZjEsIDB4NDF9fTsNCitXdk1vbmlr
ZXI8SVVuaUNvbmZHZW4+IFVuaU5hbWVkTW9uaWtlcigibmFtZWQiLCB1dWlkLCBjcmVhdG9yKTsN
CiANCiANCiBjbGFzcyBVbmlDb25mZCA6IHB1YmxpYyBXdlN0cmVhbXNEYWVtb24NCkluZGV4OiB1
bmljb25mL3QvdW5pY29uZnJvb3QudC5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdC91bmlj
b25mcm9vdC50LmNjCShyZXZpc2lvbiAxMTYyNSkNCisrKyB1bmljb25mL3QvdW5pY29uZnJvb3Qu
dC5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTE0LDExICsxNCwxMiBAQA0KICAgICByb290MlsiLyJd
LnNldG1lKCJmb28iKTsNCiAgICAgcm9vdDJbInN1YnQiXS5zZXRtZSgiYmFyIik7DQogICAgIHJv
b3QyWyJzdWJ0L21heW8iXS5zZXRtZSgibW9vIik7DQotICAgIFdWUEFTUyhzdHJjbXAocm9vdDJb
Ii8iXS5nZXRtZSgpLmNzdHIoKSwgIiIpID09IDApOw0KLSAgICBXVlBBU1Moc3RyY21wKHJvb3Qy
WyJzdWJ0Il0uZ2V0bWUoKS5jc3RyKCksICIiKSA9PSAwKTsNCi0gICAgV1ZQQVNTKHN0cmNtcChy
b290Mlsic3VidC9tYXlvIl0uZ2V0bWUoKS5jc3RyKCksICIiKSA9PSAwKTsgICAgICAgIA0KKyAg
ICByb290Mlsic3VidC9tYXlvL2JheiJdLnNldG1lKCJNT08iKTsNCisgICAgV1ZQQVNTKHJvb3Qy
WyIvIl0uZ2V0bWUoKSA9PSBXdlN0cmluZzo6ZW1wdHkpOw0KKyAgICBXVlBBU1Mocm9vdDJbInN1
YnQiXS5nZXRtZSgpID09IFd2U3RyaW5nOjplbXB0eSk7DQorICAgIFdWUEFTUyhyb290Mlsic3Vi
dC9tYXlvIl0uZ2V0bWUoKSA9PSBXdlN0cmluZzo6ZW1wdHkpOw0KKyAgICBXVlBBU1Mocm9vdDJb
InN1YnQvbWF5by9iYXoiXS5nZXRtZSgpID09ICJNT08iKTsNCiAgICAgV1ZGQUlMKHJvb3QyWyJk
aWFsZXIgMiJdLmV4aXN0cygpKTsNCi0NCiB9DQogDQogDQpAQCAtMzYsNiArMzcsNyBAQA0KICAg
ICANCiAgICAgY2ZnLnNldG1lKCJ4Iik7DQogICAgIGNmZy5zZXRtZSg1KTsNCisgICAgV1ZQQVNT
RVEoIjUiLCBjZmcuZ2V0bWUoKSk7DQogICAgIFdWUEFTU0VRKCI1IiwgY2ZnLmdldG1lKCJ4Iikp
Ow0KICAgICBXVlBBU1NFUSgiNSIsIGNmZy5nZXRtZSg1KSk7DQogICAgIA0KSW5kZXg6IHVuaWNv
bmYvdW5pc3VidHJlZWdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pc3VidHJlZWdl
bi5jYwkocmV2aXNpb24gMTE2MjUpDQorKysgdW5pY29uZi91bmlzdWJ0cmVlZ2VuLmNjCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMjQsNyArMjQsOSBAQA0KICAgICByZXR1cm4gbmV3IFVuaVN1YnRyZWVH
ZW4od3ZjcmVhdGU8SVVuaUNvbmZHZW4+KG9uZSksIHR3byk7DQogfQ0KIA0KLXN0YXRpYyBXdk1v
bmlrZXI8SVVuaUNvbmZHZW4+IHN1YnRyZWVyZWcoInN1YnRyZWUiLCBjcmVhdG9yKTsNCitzdGF0
aWMgY29uc3QgVVVJRCB1dWlkID0gezB4N2RhZWRhMDAsIDB4NTc1MiwgMHg0MjBkLA0KKwkJCSAg
ezB4ODMsIDB4NjgsIDB4MTIsIDB4Y2UsIDB4NmUsIDB4ODksIDB4ODksIDB4NDB9fTsNCitzdGF0
aWMgV3ZNb25pa2VyPElVbmlDb25mR2VuPiBzdWJ0cmVlcmVnKCJzdWJ0cmVlIiwgdXVpZCwgY3Jl
YXRvcik7DQogDQogDQogVW5pU3VidHJlZUdlbjo6VW5pU3VidHJlZUdlbihJVW5pQ29uZkdlbiAq
Z2VuLCBjb25zdCBVbmlDb25mS2V5ICZfc3Via2V5KQ0KSW5kZXg6IHVuaWNvbmYvdW5pbnVsbGdl
bi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pbnVsbGdlbi5jYwkocmV2aXNpb24gMTE2
MjUpDQorKysgdW5pY29uZi91bmludWxsZ2VuLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtMTYsNCAr
MTYsNiBAQA0KICAgICByZXR1cm4gbmV3IFVuaU51bGxHZW4oKTsNCiB9DQogDQotc3RhdGljIFd2
TW9uaWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJudWxsIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0
IFVVSUQgdXVpZCA9IHsweDhhYzEyZjExLCAweDIwNWMsIDB4NGExNywNCisJCQkgIHsweGE2LCAw
eGExLCAweGQyLCAweDliLCAweGE2LCAweDg0LCAweDQzLCAweGVmfX07DQorc3RhdGljIFd2TW9u
aWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJudWxsIiwgdXVpZCwgY3JlYXRvcik7DQpJbmRleDogdW5p
Y29uZi91bmljbGllbnRnZW4uY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB1bmljb25mL3VuaWNsaWVudGdl
bi5jYwkocmV2aXNpb24gMTE2MjUpDQorKysgdW5pY29uZi91bmljbGllbnRnZW4uY2MJKHdvcmtp
bmcgY29weSkNCkBAIC0zMSw3ICszMSw5IEBADQogDQogICAgIHJldHVybiBuZXcgVW5pQ2xpZW50
R2VuKG5ldyBXdlVuaXhDb25uKGRzdCksIGRzdCk7DQogfQ0KLXN0YXRpYyBXdk1vbmlrZXI8SVVu
aUNvbmZHZW4+IHVuaXhyZWcoInVuaXgiLCB1bml4Y3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVV
SUQgdW5peHV1aWQgPSB7MHhkYWEwMDVjZCwgMHgyNzVmLCAweDQyZjAsDQorCQkJICAgICAgezB4
YWYsIDB4NDAsIDB4YzYsIDB4ZTYsIDB4NzAsIDB4ZWYsIDB4MTcsIDB4ZDZ9fTsNCitzdGF0aWMg
V3ZNb25pa2VyPElVbmlDb25mR2VuPiB1bml4cmVnKCJ1bml4IiwgdW5peHV1aWQsIHVuaXhjcmVh
dG9yKTsNCiAjZW5kaWYNCiANCiANCkBAIC03MiwzNCArNzQsMjEgQEANCiAgICAgcmV0dXJuIG5l
dyBVbmlDbGllbnRHZW4od3ZjcmVhdGU8SVd2U3RyZWFtPihzKSk7DQogfQ0KIA0KLSNpZmRlZiBX
SVRIX1NMUA0KLSNpbmNsdWRlICJ3dnNscC5oIg0KK3N0YXRpYyBjb25zdCBVVUlEIHRjcHV1aWQg
PSB7MHg0NjQwMTFhYywgMHhhNzNmLCAweDQwODcsDQorCQkJICAgIHsweGExLCAweGVkLCAweDM1
LCAweDBiLCAweGZjLCAweDVmLCAweDBlLCAweGM1fX07DQorc3RhdGljIFd2TW9uaWtlcjxJVW5p
Q29uZkdlbj4gdGNwcmVnKCJ0Y3AiLCB0Y3B1dWlkLCB0Y3BjcmVhdG9yKTsNCiANCi0vLyBGSVhN
RTogT25seSBnZXRzIHRoZSBmaXJzdA0KLXN0YXRpYyBJVW5pQ29uZkdlbiAqc2xwY3JlYXRvcihX
dlN0cmluZ1Bhcm0gcykNCi17DQotICAgIFd2U3RyaW5nTGlzdCBzZXJ2ZXJsaXN0Ow0KLSAgICAN
Ci0gICAgaWYgKHNscF9nZXRfc2VydnMoInVuaWNvbmYubml0aSIsIHNlcnZlcmxpc3QpKQ0KLSAg
ICB7DQotCVd2U3RyaW5nIHNlcnZlciA9IHNlcnZlcmxpc3QucG9wc3RyKCk7DQotCXByaW50Zigi
Q3JlYXRpbmcgY29ubmVjdGlvbiB0bzogJXNcbiIsIHNlcnZlci5jc3RyKCkpOw0KLQlyZXR1cm4g
bmV3IFVuaUNsaWVudEdlbihuZXcgV3ZUQ1BDb25uKHNlcnZlciksIHMpOw0KLSAgICB9DQotICAg
IGVsc2UNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLX0NCitzdGF0aWMgY29uc3QgVVVJRCBzc2x1
dWlkID0gezB4NDk0ZmQ2YTIsIDB4N2RhMiwgMHg0ZmViLA0KKwkJCSAgICAgezB4YmYsIDB4MTIs
IDB4N2UsIDB4NjAsIDB4YmYsIDB4YzUsIDB4M2EsIDB4Yzd9fTsNCitzdGF0aWMgV3ZNb25pa2Vy
PElVbmlDb25mR2VuPiBzc2xyZWcoInNzbCIsIHNzbHV1aWQsIHNzbGNyZWF0b3IpOw0KIA0KLXN0
YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHNscHJlZygic2xwIiwgc2xwY3JlYXRvcik7DQot
I2VuZGlmDQorc3RhdGljIGNvbnN0IFVVSUQgd3Z1dWlkID0gezB4OWQ3MGZmMmYsIDB4NGFlOCwg
MHg0OGUzLA0KKwkJCSAgICB7MHhhZSwgMHhhNywgMHgzYSwgMHg5OSwgMHg1OSwgMHgwOSwgMHg2
MywgMHhiMn19Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVVuaUNvbmZHZW4+IHd2c3RyZWFtcmVnKCJ3
dnN0cmVhbSIsIHd2dXVpZCwgd3ZzdHJlYW1jcmVhdG9yKTsNCiANCi1zdGF0aWMgV3ZNb25pa2Vy
PElVbmlDb25mR2VuPiB0Y3ByZWcoInRjcCIsIHRjcGNyZWF0b3IpOw0KLXN0YXRpYyBXdk1vbmlr
ZXI8SVVuaUNvbmZHZW4+IHNzbHJlZygic3NsIiwgc3NsY3JlYXRvcik7DQotc3RhdGljIFd2TW9u
aWtlcjxJVW5pQ29uZkdlbj4gd3ZzdHJlYW1yZWcoInd2c3RyZWFtIiwgd3ZzdHJlYW1jcmVhdG9y
KTsNCiANCiANCiANCi0NCiAvKioqKiogVW5pQ2xpZW50R2VuICoqKioqLw0KIA0KIFVuaUNsaWVu
dEdlbjo6VW5pQ2xpZW50R2VuKElXdlN0cmVhbSAqc3RyZWFtLCBXdlN0cmluZ1Bhcm0gZHN0KSAN
CkluZGV4OiB1bmljb25mL3VuaWluaWdlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5p
aW5pZ2VuLmNjCShyZXZpc2lvbiAxMTYyNSkNCisrKyB1bmljb25mL3VuaWluaWdlbi5jYwkod29y
a2luZyBjb3B5KQ0KQEAgLTIyLDcgKzIyLDkgQEANCiAgICAgcmV0dXJuIG5ldyBVbmlJbmlHZW4o
cyk7DQogfQ0KIA0KLVd2TW9uaWtlcjxJVW5pQ29uZkdlbj4gVW5pSW5pR2VuTW9uaWtlcigiaW5p
IiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweDU2YmEwMWE5LCAweGMy
ZDMsIDB4NGY3MSwNCisJCQkgIHsweGE2LCAweGY2LCAweDRlLCAweGJhLCAweDVmLCAweDA5LCAw
eDg4LCAweDU3fX07DQorV3ZNb25pa2VyPElVbmlDb25mR2VuPiBVbmlJbmlHZW5Nb25pa2VyKCJp
bmkiLCB1dWlkLCBjcmVhdG9yKTsNCiANCiANCiAvKioqKiogVW5pSW5pR2VuICoqKioqLw0KSW5k
ZXg6IHVuaWNvbmYvdW5pc2xvd2dlbi5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHVuaWNvbmYvdW5pc2xv
d2dlbi5jYwkocmV2aXNpb24gMTE2MjUpDQorKysgdW5pY29uZi91bmlzbG93Z2VuLmNjCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMTMsMTAgKzEzLDExIEBADQogew0KICAgICByZXR1cm4gbmV3IFVuaVNs
b3dHZW4od3ZjcmVhdGU8SVVuaUNvbmZHZW4+KHMpKTsNCiB9DQorc3RhdGljIGNvbnN0IFVVSUQg
dXVpZCA9IHsweGFjNzQ4YTJjLCAweDU5ZTgsIDB4NGVjZiwNCisJCQkgIHsweDgxLCAweDlmLCAw
eGU1LCAweGM4LCAweGMzLCAweGE2LCAweGMxLCAweDNkfX07DQorc3RhdGljIFd2TW9uaWtlcjxJ
VW5pQ29uZkdlbj4gcmVnKCJzbG93IiwgdXVpZCwgY3JlYXRvcik7DQogDQotc3RhdGljIFd2TW9u
aWtlcjxJVW5pQ29uZkdlbj4gcmVnKCJzbG93IiwgY3JlYXRvcik7DQogDQotDQogVW5pU2xvd0dl
bjo6VW5pU2xvd0dlbihJVW5pQ29uZkdlbiAqaW5uZXIpIDogVW5pRmlsdGVyR2VuKGlubmVyKQ0K
IHsNCiAgICAgc2xvd2NvdW50ID0gMDsNCkluZGV4OiB1cmxnZXQvd3ZodHRwY29tcG9uZW50LmNj
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gdXJsZ2V0L3d2aHR0cGNvbXBvbmVudC5jYwkocmV2aXNpb24gMTE2
MjUpDQorKysgdXJsZ2V0L3d2aHR0cGNvbXBvbmVudC5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTM2
LDUgKzM2LDEwIEBADQogfQ0KIA0KIA0KLXN0YXRpYyBXdk1vbmlrZXI8SVd2U3RyZWFtPiByZWco
Imh0dHAiLCBjcmVhdG9yKTsNCi1zdGF0aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVncygiaHR0
cHMiLCBzY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweDJkYTNkNzA4LCAw
eDAzN2UsIDB4NDIwOSwNCisJCQkgIHsweDhkLCAweDhhLCAweDcwLCAweDYzLCAweGY4LCAweDI4
LCAweGQ1LCAweDQzfX07DQorc3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZygiaHR0cCIs
IHV1aWQsIGNyZWF0b3IpOw0KKw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWRzID0gezB4M2YwNGVk
YjcsIDB4OTJhOSwgMHg0YmUzLA0KKwkJCSAgIHsweGEwLCAweGIzLCAweGI4LCAweDRmLCAweDhl
LCAweDdlLCAweDkwLCAweDVkfX07DQorc3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZ3Mo
Imh0dHBzIiwgdXVpZHMsIHNjcmVhdG9yKTsNCkluZGV4OiBjb25maWd1cmUuYWMNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDExNjI1KQ0KKysrIGNvbmZpZ3VyZS5hYwko
d29ya2luZyBjb3B5KQ0KQEAgLTQ5OSw3ICs0OTksNyBAQA0KIAlmaQ0KICAgICBlbHNlDQogICAg
ICAgICBXVl9BUFBFTkQoQ1BQRkxBR1MsIFstSSR3aXRoX3hwbGMvaW5jbHVkZV0pDQotCVdWX0FQ
UEVORChMREZMQUdTLCBbLUwkd2l0aF94cGxjXSkNCisJV1ZfQVBQRU5EKExERkxBR1MsIFstTCR3
aXRoX3hwbGMgLWx4cGxjIC1seHBsYy1jeHggLWxkbF0pDQogCUFDX0NIRUNLX0hFQURFUlMoeHBs
Yy9jb3JlLmgsLCBbd2l0aF94cGxjPW5vXSwgWyNkZWZpbmUgVU5TVEFCTEVdKQ0KIAlMSUJTX3Nh
dmU9IiRMSUJTIg0KIAlBQ19DSEVDS19MSUIoeHBsYywgWFBMQ19nZXRTZXJ2aWNlTWFuYWdlciws
IFt3aXRoX3hwbGM9bm9dKQ0KSW5kZXg6IGlwc3RyZWFtcy93dnRjcC5jYw0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIGlwc3RyZWFtcy93dnRjcC5jYwkocmV2aXNpb24gMTE2MjYpDQorKysgaXBzdHJlYW1zL3d2
dGNwLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtNjAsNyArNjAsOSBAQA0KICAgICByZXR1cm4gbmV3
IFd2VENQQ29ubihzKTsNCiB9DQogDQotc3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZygi
dGNwIiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZCA9IHsweDExMDE2MTg0LCAw
eDIwMTcsIDB4NDcxMywNCisJCQkgIHsweDhiLCAweDhjLCAweGU2LCAweGIwLCAweGI2LCAweDhm
LCAweGQ2LCAweGY5fX07DQorc3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZygidGNwIiwg
dXVpZCwgY3JlYXRvcik7DQogDQogDQogV3ZUQ1BDb25uOjpXdlRDUENvbm4oY29uc3QgV3ZJUFBv
cnRBZGRyICZfcmVtYWRkcikNCkluZGV4OiBpcHN0cmVhbXMvd3Z1bml4c29ja2V0LmNjDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gaXBzdHJlYW1zL3d2dW5peHNvY2tldC5jYwkocmV2aXNpb24gMTE2MjUpDQor
KysgaXBzdHJlYW1zL3d2dW5peHNvY2tldC5jYwkod29ya2luZyBjb3B5KQ0KQEAgLTUzLDcgKzUz
LDkgQEANCiAgICAgcmV0dXJuIG5ldyBXdlVuaXhDb25uKHMpOw0KIH0NCiANCi1zdGF0aWMgV3ZN
b25pa2VyPElXdlN0cmVhbT4gcmVnKCJ1bml4IiwgY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVV
SUQgdXVpZCA9IHsweDUzOTIzOTMwLCAweGZjYmQsIDB4NDI3ZSwNCisJCQkgIHsweGE2LCAweGRi
LCAweDAxLCAweDE0LCAweDhhLCAweDMwLCAweDgzLCAweGQ2fX07DQorc3RhdGljIFd2TW9uaWtl
cjxJV3ZTdHJlYW0+IHJlZygidW5peCIsIHV1aWQsIGNyZWF0b3IpOw0KIA0KIA0KIFd2VW5peENv
bm46Old2VW5peENvbm4oaW50IF9mZCwgY29uc3QgV3ZVbml4QWRkciAmX2FkZHIpDQpJbmRleDog
Y3J5cHRvL3d2c3Nsc3RyZWFtLmNjDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY3J5cHRvL3d2c3Nsc3RyZWFt
LmNjCShyZXZpc2lvbiAxMTYyNikNCisrKyBjcnlwdG8vd3Zzc2xzdHJlYW0uY2MJKHdvcmtpbmcg
Y29weSkNCkBAIC0zOCwxMCArMzgsMTUgQEANCiAgICAgcmV0dXJuIG5ldyBXdlNTTFN0cmVhbSh3
dmNyZWF0ZTxJV3ZTdHJlYW0+KHMpLCBOVUxMLCAwLCB0cnVlKTsNCiB9DQogDQotc3RhdGljIFd2
TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZygic3NsIiwgY3JlYXRvcik7DQotc3RhdGljIFd2TW9uaWtl
cjxJV3ZTdHJlYW0+IHNyZWcoInNzbHNlcnYiLCBzY3JlYXRvcik7DQorc3RhdGljIGNvbnN0IFVV
SUQgdXVpZCA9IHsweDhlZTFkNTBiLCAweDg3MTMsIDB4NGEwYSwNCisJCQkgIHsweDhiLCAweDI1
LCAweDRlLCAweDA1LCAweDc5LCAweDk3LCAweGNhLCAweDY3fX07DQorc3RhdGljIFd2TW9uaWtl
cjxJV3ZTdHJlYW0+IHJlZygic3NsIiwgdXVpZCwgY3JlYXRvcik7DQogDQorc3RhdGljIGNvbnN0
IFVVSUQgc3V1aWQgPSB7MHgyMzc0MDUzMSwgMHg5OGZmLCAweDQ5ZDEsDQorCQkJICAgezB4OGIs
IDB4NmQsIDB4NDUsIDB4M2UsIDB4NDAsIDB4MzIsIDB4NzcsIDB4ZmN9fTsNCitzdGF0aWMgV3ZN
b25pa2VyPElXdlN0cmVhbT4gc3JlZygic3Nsc2VydiIsIHN1dWlkLCBzY3JlYXRvcik7DQogDQor
DQogI2RlZmluZSBNQVhfQk9VTkNFX0FNT1VOVCAoMTYzODQpIC8vIDEgU1NMdjMvVExTdjEgcmVj
b3JkDQogDQogc3RhdGljIGludCB3dl92ZXJpZnlfY2IoaW50IHByZXZlcmlmeV9vaywgWDUwOV9T
VE9SRV9DVFggKmN0eCkgDQpJbmRleDogdmFycy5taw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHZhcnMubWsJ
KHJldmlzaW9uIDExNjI1KQ0KKysrIHZhcnMubWsJKHdvcmtpbmcgY29weSkNCkBAIC0xODAsNyAr
MTgwLDcgQEANCiAJJChjYWxsIG9iamVjdHMsY29uZmlnZmlsZSBjcnlwdG8gaXBzdHJlYW1zIFwN
CiAJCSQoQVJDSF9TVUJESVJTKSBzdHJlYW1zIHVybGdldCkpDQogbGlid3ZzdHJlYW1zLnNvOiBs
aWJ3dnV0aWxzLnNvIGxpYnd2YmFzZS5zbw0KLWxpYnd2c3RyZWFtcy5zbzogTElCUys9LWxzc2wg
LWxjcnlwdG8gDQorbGlid3ZzdHJlYW1zLnNvOiBMSUJTKz0tbHNzbCAtbGNyeXB0byAkKExJQlhQ
TEMpDQogDQogbGlidW5pY29uZi5hIGxpYnVuaWNvbmYuc286ICQoZmlsdGVyLW91dCAkKEJBU0VP
QkpTKSwgXA0KIAkkKGNhbGwgb2JqZWN0cyx1bmljb25mKSkNCkluZGV4OiBpbmNsdWRlL3d2bW9u
aWtlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gaW5jbHVkZS93dm1vbmlrZXIuaAkocmV2aXNpb24gMTE2
MjUpDQorKysgaW5jbHVkZS93dm1vbmlrZXIuaAkod29ya2luZyBjb3B5KQ0KQEAgLTEyLDMyICsx
Miw1OCBAQA0KICNpbmNsdWRlICJ3dnN0cmluZy5oIg0KICNpbmNsdWRlICJ3dnhwbGMuaCINCiAN
Ci1jbGFzcyBXdk1vbmlrZXJSZWdpc3RyeTsNCi0NCiB0eXBlZGVmIHZvaWQgKld2TW9uaWtlckNy
ZWF0ZUZ1bmMoV3ZTdHJpbmdQYXJtIHBhcm1zKTsNCiANCiAvKioNCisgKiBXdk1vbmlrZXJDcmVh
dGVGdW5jU3RvcmUgaXMgYW4gSU9iamVjdCB0aGF0IGdldHMgcmVnaXN0ZXJlZCB3aXRoDQorICog
WFBMQywgc28gdGhhdCB5b3UgY2FuIGhhdmUgYSBXdk1vbmlrZXJDcmVhdGVGdW5jIHRoYXQgY3Jl
YXRlcyBhIG5ldw0KKyAqIG9iamVjdC4NCisgKi8NCitjbGFzcyBXdk1vbmlrZXJDcmVhdGVGdW5j
U3RvcmUgOiBwdWJsaWMgSU9iamVjdA0KK3sNCisgICAgSU1QTEVNRU5UX0lPQkpFQ1QoV3ZNb25p
a2VyQ3JlYXRlRnVuY1N0b3JlKTsNCisgICAgV3ZNb25pa2VyQ3JlYXRlRnVuYyAqZnVuYzsNCisN
CitwdWJsaWM6DQorICAgIFd2TW9uaWtlckNyZWF0ZUZ1bmNTdG9yZShXdk1vbmlrZXJDcmVhdGVG
dW5jICpfZnVuYykNCisJOiBmdW5jKF9mdW5jKQ0KKyAgICB7DQorICAgIH0NCisNCisgICAgdmly
dHVhbCB+V3ZNb25pa2VyQ3JlYXRlRnVuY1N0b3JlKCkNCisgICAgew0KKyAgICB9DQorDQorICAg
IHZvaWQgKmNyZWF0ZShXdlN0cmluZ1Bhcm0gcGFybXMpDQorICAgIHsNCisJcmV0dXJuIGZ1bmMo
cGFybXMpOw0KKyAgICB9DQorfTsNCisNCisNCisNCisvKioNCiAgKiBXdk1vbmlrZXJCYXNlIGlz
IGFuIGF1dG8tcmVnaXN0cmF0aW9uIGNsYXNzIGZvciBwdXR0aW5nIHRoaW5ncyBpbnRvDQotICog
YSBXdk1vbmlrZXJSZWdpc3RyeS4gIFdoZW4gYSBXdk1vbmlrZXJCYXNlIGluc3RhbmNlIGlzIGNy
ZWF0ZWQsIGl0DQotICogcmVnaXN0ZXJzIGEgbW9uaWtlciBwcmVmaXggKCJ0ZXN0OiIsICJzc2w6
IiwgImluaToiLCBldGMpIGFuZCBhIGZhY3RvcnkNCisgKiBYUExDLiAgV2hlbiBhIFd2TW9uaWtl
ckJhc2UgaW5zdGFuY2UgaXMgY3JlYXRlZCwgaXQgcmVnaXN0ZXJzIGENCisgKiBtb25pa2VyIHBy
ZWZpeCAoInRlc3Q6IiwgInNzbDoiLCAiaW5pOiIsIGV0YykgYW5kIGEgZmFjdG9yeQ0KICAqIGZ1
bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuIElPYmplY3QgdXNpbmcgdGhhdCBw
cmVmaXguDQotICogDQorICoNCiAgKiBXaGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQsIGl0
IGF1dG8tdW5yZWdpc3RlcnMgdGhlIG1vbmlrZXIgcHJlZml4DQotICogZnJvbSB0aGUgcmVnaXN0
cnkuDQotICogDQorICogZnJvbSBYUExDLg0KKyAqDQogICogWW91IGNhbid0IGFjdHVhbGx5IGNy
ZWF0ZSBvbmUgb2YgdGhlc2UsIGJlY2F1c2UgaXQncyBub3QgdHlwZXNhZmUuICBTZWUNCiAgKiBX
dk1vbmlrZXI8VD4gaW5zdGVhZC4NCiAgKi8NCiBjbGFzcyBXdk1vbmlrZXJCYXNlDQogew0KIHBy
b3RlY3RlZDoNCi0gICAgV3ZNb25pa2VyQmFzZShjb25zdCBVVUlEICZpaWQsIFd2U3RyaW5nUGFy
bSBfaWQsDQotCQkgIFd2TW9uaWtlckNyZWF0ZUZ1bmMgKmZ1bmMpOw0KKyAgICBXdk1vbmlrZXJC
YXNlKGNvbnN0IFVVSUQgJmNhdGVnb3J5LCBXdlN0cmluZ1Bhcm0gX2lkLA0KKwkJICBjb25zdCBV
VUlEICZpaWQsIFd2TW9uaWtlckNyZWF0ZUZ1bmMgKmZ1bmMpOw0KICAgICB+V3ZNb25pa2VyQmFz
ZSgpOw0KLSAgICANCisNCiBwdWJsaWM6DQotICAgIFd2U3RyaW5nIGlkOw0KLSAgICBXdk1vbmlr
ZXJSZWdpc3RyeSAqcmVnOw0KKyAgICBVVUlEIG9pZDsNCisgICAgV3ZNb25pa2VyQ3JlYXRlRnVu
Y1N0b3JlIGZ1bmM7DQogfTsNCiANCiANCkBAIC00NSwxNiArNzEsMTUgQEANCiAgKiBBIHR5cGUt
c2FmZSB2ZXJzaW9uIG9mIFd2TW9uaWtlckJhc2UgdGhhdCBsZXRzIHlvdSBwcm92aWRlIGNyZWF0
ZSBmdW5jdGlvbnMNCiAgKiBmb3Igb2JqZWN0IHR5cGVzIG90aGVyIHRoYW4gSU9iamVjdC4gIChU
aGUgb2JqZWN0cyB0aGVtc2VsdmVzIGhhdmUgdG8NCiAgKiBiZSBkZXJpdmVkIGZyb20gSU9iamVj
dCwgaG93ZXZlci4pDQotICogDQorICoNCiAgKiBTZWUgV3ZNb25pa2VyQmFzZSBmb3IgZGV0YWls
cy4NCi0gKiANCisgKg0KICAqIEV4YW1wbGU6DQotICogICAgc3RhdGljIElXdlN0cmVhbSAqY3Jl
YXRlZnVuYyhXdlN0cmluZ1Bhcm0gcywgSU9iamVjdCAqb2JqLA0KLSAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpDQorICogICAgc3RhdGljIElXdlN0cmVh
bSAqY3JlYXRlZnVuYyhXdlN0cmluZ1Bhcm0gcykNCiAgKiAgICB7DQogICogICAgICAgIHJldHVy
biBuZXcgV3ZTdHJlYW07DQogICogICAgfQ0KLSAqIA0KKyAqDQogICogICAgc3RhdGljIFd2TW9u
aWtlcjxJV3ZTdHJlYW0+IHJlZ2lzdHJhdGlvbigic3NsIiwgY3JlYXRlZnVuYyk7DQogICovDQog
dGVtcGxhdGUgPGNsYXNzIFQ+DQpAQCAtNjMsOCArODgsOSBAQA0KIHB1YmxpYzoNCiAgICAgdHlw
ZWRlZiBUICpDcmVhdGVGdW5jKFd2U3RyaW5nUGFybSBwYXJtcyk7DQogICAgIA0KLSAgICBXdk1v
bmlrZXIoV3ZTdHJpbmdQYXJtIF9pZCwgQ3JlYXRlRnVuYyAqX2Z1bmMpDQotCTogV3ZNb25pa2Vy
QmFzZShYUExDX0lJRDxUPjo6Z2V0KCksIF9pZCwgKFd2TW9uaWtlckNyZWF0ZUZ1bmMgKilfZnVu
YykNCisgICAgV3ZNb25pa2VyKFd2U3RyaW5nUGFybSBfaWQsIGNvbnN0IFVVSUQgJl9vaWQsIENy
ZWF0ZUZ1bmMgKl9mdW5jKQ0KKwk6IFd2TW9uaWtlckJhc2UoWFBMQ19JSUQ8VD46OmdldCgpLCBf
aWQsIF9vaWQsDQorCQkJcmVpbnRlcnByZXRfY2FzdDxXdk1vbmlrZXJDcmVhdGVGdW5jICo+KF9m
dW5jKSkNCiAgICAgeyANCiAJLy8gdGhpcyBsb29rcyBwb2ludGxlc3MsIGJ1dCBpdCBlbnN1cmVz
IHRoYXQgVCogY2FuIGJlIHNhZmVseSwNCiAJLy8gYXV0b21hdGljYWxseSBkb3duY2FzdCB0byBJ
T2JqZWN0Ki4gIFRoYXQgbWVhbnMgVCBpcyByZWFsbHkgZGVyaXZlZA0KSW5kZXg6IHV0aWxzL3d2
bW9uaWtlci5jYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHV0aWxzL3d2bW9uaWtlci5jYwkocmV2aXNpb24g
MTE2MjUpDQorKysgdXRpbHMvd3Ztb25pa2VyLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtNyw2ICs3
LDEzIEBADQogICovDQogI2luY2x1ZGUgInd2bW9uaWtlcnJlZ2lzdHJ5LmgiDQogI2luY2x1ZGUg
InN0cnV0aWxzLmgiDQorDQorI2luY2x1ZGUgInhwbGMvY29yZS5oIg0KKyNpbmNsdWRlICJ4cGxj
L0lDYXRlZ29yeS5oIg0KKyNpbmNsdWRlICJ4cGxjL0lDYXRlZ29yeUl0ZXJhdG9yLmgiDQorI2lu
Y2x1ZGUgInhwbGMvSUNhdGVnb3J5TWFuYWdlci5oIg0KKyNpbmNsdWRlICJ4cGxjL0lTdGF0aWNT
ZXJ2aWNlSGFuZGxlci5oIg0KKw0KICNpbmNsdWRlIDxhc3NlcnQuaD4NCiAjaW5jbHVkZSA8c3Rk
aW8uaD4NCiANCkBAIC0yMSwxNzkgKzI4LDEwMSBAQA0KICNlbmRpZg0KIA0KIA0KLXN0YXRpYyB1
bnNpZ25lZCBXdkhhc2goY29uc3QgVVVJRCAmX3V1aWQpDQotew0KLSAgICB1bnNpZ25lZCB2YWwg
PSAwOw0KLSAgICB1bnNpZ25lZCBpbnQgKnV1aWQgPSAodW5zaWduZWQgaW50ICopJl91dWlkOw0K
LSAgICBpbnQgbWF4ID0gc2l6ZW9mKFVVSUQpL3NpemVvZigqdXVpZCk7DQotICAgIA0KLSAgICBm
b3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgbWF4OyBjb3VudCsrKQ0KLQl2YWwgKz0gdXVpZFtj
b3VudF07DQotICAgIA0KLSAgICByZXR1cm4gdmFsOw0KLX0NCitVVUlEX01BUF9CRUdJTihXdk1v
bmlrZXJDcmVhdGVGdW5jU3RvcmUpDQorICBVVUlEX01BUF9FTlRSWShJT2JqZWN0KQ0KK1VVSURf
TUFQX0VORA0KIA0KIA0KLURlY2xhcmVXdlNjYXR0ZXJEaWN0KFd2TW9uaWtlclJlZ2lzdHJ5LCBV
VUlELCByZWdfaWlkKTsNCi1zdGF0aWMgV3ZNb25pa2VyUmVnaXN0cnlEaWN0ICpyZWdzOw0KLSAg
DQotDQotDQotV3ZNb25pa2VyUmVnaXN0cnk6Old2TW9uaWtlclJlZ2lzdHJ5KGNvbnN0IFVVSUQg
JmlpZCkgDQotICAgIDogcmVnX2lpZChpaWQpLCBkaWN0KDEwKQ0KK1d2TW9uaWtlckJhc2U6Old2
TW9uaWtlckJhc2UoY29uc3QgVVVJRCAmaWlkLCBXdlN0cmluZ1Bhcm0gaWQsDQorCQkJICAgICBj
b25zdCBVVUlEICZfb2lkLCBXdk1vbmlrZXJDcmVhdGVGdW5jICpfZnVuYykNCisgIDogb2lkKF9v
aWQpLCBmdW5jKF9mdW5jKQ0KIHsNCi0gICAgREVCVUdMT0coIld2TW9uaWtlclJlZ2lzdHJ5IGNy
ZWF0aW5nLlxuIik7DQotICAgIHJlZmNvdW50ID0gMDsNCi19DQorICAgIERFQlVHTE9HKCJXdk1v
bmlrZXIgY3JlYXRpbmcoJXMpLlxuIiwgaWQuY3N0cigpKTsNCiANCi0NCi1Xdk1vbmlrZXJSZWdp
c3RyeTo6fld2TW9uaWtlclJlZ2lzdHJ5KCkNCi17DQotICAgIERFQlVHTE9HKCJXdk1vbmlrZXJS
ZWdpc3RyeSBkZXN0cm95aW5nLlxuIik7DQorICAgIElTZXJ2aWNlTWFuYWdlciAqc3J2bWdyID0g
WFBMQ19nZXRTZXJ2aWNlTWFuYWdlcigpOw0KKyAgICBpZiAoc3J2bWdyKQ0KKyAgICB7DQorCUlD
YXRlZ29yeU1hbmFnZXIgKmNhdG1ncjsNCisJY2F0bWdyID0gc3RhdGljX2Nhc3Q8SUNhdGVnb3J5
TWFuYWdlciAqPigNCisJICAgIHNydm1nci0+Z2V0T2JqZWN0KFhQTENfY2F0ZWdvcnlNYW5hZ2Vy
KSk7DQorCUlTdGF0aWNTZXJ2aWNlSGFuZGxlciAqc3NydmhkbHI7DQorCXNzcnZoZGxyID0gc3Rh
dGljX2Nhc3Q8SVN0YXRpY1NlcnZpY2VIYW5kbGVyICo+KA0KKwkgICAgc3J2bWdyLT5nZXRPYmpl
Y3QoWFBMQ19zdGF0aWNTZXJ2aWNlSGFuZGxlcikpOw0KKwlpZiAoY2F0bWdyICYmIHNzcnZoZGxy
KQ0KKwl7DQorCSAgICBjYXRtZ3ItPnJlZ2lzdGVyQ29tcG9uZW50KGlpZCwgb2lkLCBpZCk7DQor
CSAgICBzc3J2aGRsci0+YWRkT2JqZWN0KG9pZCwgJmZ1bmMpOw0KKwl9DQorCWlmIChjYXRtZ3Ip
IFdWUkVMRUFTRShjYXRtZ3IpOw0KKyAgICB9DQogfQ0KIA0KIA0KLXZvaWQgV3ZNb25pa2VyUmVn
aXN0cnk6OmFkZChXdlN0cmluZ1Bhcm0gaWQsIFd2TW9uaWtlckNyZWF0ZUZ1bmMgKmZ1bmMpDQor
V3ZNb25pa2VyQmFzZTo6fld2TW9uaWtlckJhc2UoKQ0KIHsNCi0gICAgREVCVUdMT0coIld2TW9u
aWtlclJlZ2lzdHJ5IHJlZ2lzdGVyKCVzKS5cbiIsIGlkLmNzdHIoKSk7DQotICAgIGFzc2VydCgh
ZGljdFtpZF0pOw0KLSAgICBkaWN0LmFkZChuZXcgUmVnaXN0cmF0aW9uKGlkLCBmdW5jKSwgdHJ1
ZSk7DQorICAgIERFQlVHTE9HKCJXdk1vbmlrZXIgZGVzdHJveWluZyglcykuXG4iLCBpZC5jc3Ry
KCkpOw0KKyAgICBJU2VydmljZU1hbmFnZXIgKnNydm1nciA9IFhQTENfZ2V0U2VydmljZU1hbmFn
ZXIoKTsNCisgICAgaWYgKHNydm1ncikNCisgICAgew0KKwlJU3RhdGljU2VydmljZUhhbmRsZXIg
KnNzcnZoZGxyOw0KKwlzc3J2aGRsciA9IHN0YXRpY19jYXN0PElTdGF0aWNTZXJ2aWNlSGFuZGxl
ciAqPigNCisJICAgIHNydm1nci0+Z2V0T2JqZWN0KFhQTENfc3RhdGljU2VydmljZUhhbmRsZXIp
KTsNCisJaWYgKHNzcnZoZGxyKQ0KKwkgICAgc3NydmhkbHItPnJlbW92ZU9iamVjdChvaWQpOw0K
KyAgICB9DQogfQ0KIA0KIA0KLXZvaWQgV3ZNb25pa2VyUmVnaXN0cnk6OmRlbChXdlN0cmluZ1Bh
cm0gaWQpDQordm9pZCAqd3ZjcmVhdGUoY29uc3QgVVVJRCAmY2F0ZWdvcnksIFd2U3RyaW5nUGFy
bSBfbW9uaWtlcikNCiB7DQotICAgIERFQlVHTE9HKCJXdk1vbmlrZXJSZWdpc3RyeSB1bnJlZ2lz
dGVyKCVzKS5cbiIsIGlkLmNzdHIoKSk7DQotICAgIGFzc2VydChkaWN0W2lkXSk7DQotICAgIGRp
Y3QucmVtb3ZlKGRpY3RbaWRdKTsNCi19DQorICAgIGFzc2VydCghX21vbmlrZXIuaXNudWxsKCkp
Ow0KIA0KKyAgICBXdlN0cmluZyBtb25pa2VyKF9tb25pa2VyKTsNCisgICAgbW9uaWtlciA9IHRy
aW1fc3RyaW5nKG1vbmlrZXIuZWRpdCgpKTsNCiANCi12b2lkICpXdk1vbmlrZXJSZWdpc3RyeTo6
Y3JlYXRlKFd2U3RyaW5nUGFybSBfcykNCi17DQotICAgIFd2U3RyaW5nIHQoX3MpOw0KLSAgICBX
dlN0cmluZyBzKHRyaW1fc3RyaW5nKHQuZWRpdCgpKSk7DQotDQotICAgIGNoYXIgKmNwdHIgPSBz
dHJjaHIocy5lZGl0KCksICc6Jyk7DQorICAgIGNoYXIgKmNwdHIgPSBzdHJjaHIobW9uaWtlci5l
ZGl0KCksICc6Jyk7DQogICAgIGlmIChjcHRyKQ0KIAkqY3B0cisrID0gMDsNCiAgICAgZWxzZQ0K
IAljcHRyID0gIiI7DQotICAgIA0KLSAgICBERUJVR0xPRygiV3ZNb25pa2VyUmVnaXN0cnkgY3Jl
YXRlIG9iamVjdCAoJyVzJyAnJXMnKS5cbiIsIHMuY3N0cigpLCBjcHRyKTsNCi0gICAgDQotICAg
IFJlZ2lzdHJhdGlvbiAqciA9IGRpY3Rbc107DQotICAgIGlmIChyKQ0KLQlyZXR1cm4gci0+ZnVu
YyhjcHRyKTsNCi0gICAgZWxzZQ0KLQlyZXR1cm4gTlVMTDsNCi19DQogDQorICAgIERFQlVHTE9H
KCJ3dmNyZWF0ZSBjcmVhdGUgb2JqZWN0ICgnJXMnICclcycpLlxuIiwgbW9uaWtlci5jc3RyKCks
IGNwdHIpOw0KIA0KLVd2TW9uaWtlclJlZ2lzdHJ5ICpXdk1vbmlrZXJSZWdpc3RyeTo6ZmluZF9y
ZWcoY29uc3QgVVVJRCAmaWlkKQ0KLXsNCi0gICAgREVCVUdMT0coIld2TW9uaWtlclJlZ2lzdHJ5
IGZpbmRfcmVnLlxuIik7DQotICAgIA0KLSAgICBpZiAoIXJlZ3MpDQotCXJlZ3MgPSBuZXcgV3ZN
b25pa2VyUmVnaXN0cnlEaWN0KDEwKTsNCi0gICAgDQotICAgIFd2TW9uaWtlclJlZ2lzdHJ5ICpy
ZWcgPSAoKnJlZ3MpW2lpZF07DQotICAgIA0KLSAgICBpZiAoIXJlZykNCi0gICAgew0KLQkvLyB3
ZSBoYXZlIHRvIG1ha2Ugb25lIQ0KLQlyZWcgPSBuZXcgV3ZNb25pa2VyUmVnaXN0cnkoaWlkKTsN
Ci0JcmVncy0+YWRkKHJlZywgdHJ1ZSk7DQotCXJlZy0+YWRkUmVmKCk7IC8vIG9uZSByZWZlcmVu
Y2UgZm9yIGJlaW5nIGluIHRoZSBsaXN0IGF0IGFsbA0KLSAgICB9DQotICAgIA0KLSAgICByZWct
PmFkZFJlZigpOw0KLSAgICByZXR1cm4gcmVnOw0KLX0NCisgICAgSVNlcnZpY2VNYW5hZ2VyICpz
cnZtZ3IgPSBYUExDX2dldFNlcnZpY2VNYW5hZ2VyKCk7DQorICAgIGlmICghc3J2bWdyKQ0KKwly
ZXR1cm4gTlVMTDsNCiANCisgICAgSUNhdGVnb3J5TWFuYWdlciAqY2F0bWdyOw0KKyAgICBjYXRt
Z3IgPSBzdGF0aWNfY2FzdDxJQ2F0ZWdvcnlNYW5hZ2VyICo+KA0KKwlzcnZtZ3ItPmdldE9iamVj
dChYUExDX2NhdGVnb3J5TWFuYWdlcikpOw0KKyAgICBpZiAoIWNhdG1ncikNCisJcmV0dXJuIE5V
TEw7DQogDQotSU9iamVjdCAqV3ZNb25pa2VyUmVnaXN0cnk6OmdldEludGVyZmFjZShjb25zdCBV
VUlEICZ1dWlkKQ0KLXsNCi0jaWYgMA0KLSAgICBpZiAodXVpZC5lcXVhbHMoSU9iamVjdF9JSUQp
KQ0KLSAgICB7DQotCWFkZFJlZigpOw0KLQlyZXR1cm4gdGhpczsNCi0gICAgfQ0KLSNlbmRpZg0K
LSAgICANCi0gICAgLy8gd2UgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgYW55IGludGVyZmFjZXMgZm9y
IG5vdy4NCi0gICAgDQotICAgIHJldHVybiAwOw0KLX0NCisgICAgSUNhdGVnb3J5ICpjYXQgPSBj
YXRtZ3ItPmdldENhdGVnb3J5KGNhdGVnb3J5KTsNCisgICAgaWYgKCFjYXQpDQorCXJldHVybiBO
VUxMOw0KIA0KKyAgICBJQ2F0ZWdvcnlJdGVyYXRvciAqaSA9IGNhdC0+Z2V0SXRlcmF0b3IoKTsN
CisgICAgaWYgKCFpKQ0KKwlyZXR1cm4gTlVMTDsNCiANCi11bnNpZ25lZCBpbnQgV3ZNb25pa2Vy
UmVnaXN0cnk6OmFkZFJlZigpDQotew0KLSAgICBERUJVR0xPRygiV3ZNb25pa2VyUmVnaXN0cnkg
YWRkUmVmLlxuIik7DQotICAgIHJldHVybiArK3JlZmNvdW50Ow0KLX0NCi0NCi0NCi11bnNpZ25l
ZCBpbnQgV3ZNb25pa2VyUmVnaXN0cnk6OnJlbGVhc2UoKQ0KLXsNCi0gICAgREVCVUdMT0coIld2
TW9uaWtlclJlZ2lzdHJ5IHJlbGVhc2UuXG4iKTsNCi0gICAgDQotICAgIGlmICgtLXJlZmNvdW50
ID4gMSkNCi0JcmV0dXJuIHJlZmNvdW50Ow0KLSAgICANCi0gICAgaWYgKHJlZmNvdW50ID09IDEp
DQorICAgIGZvciAoOyAhaS0+ZG9uZSgpOyBpLT5uZXh0KCkpDQogICAgIHsNCi0JLy8gdGhlIGxp
c3QgaGFzIG9uZSByZWZlcmVuY2UgdG8gdXMsIGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuDQot
CS8vIE5vdGU6IHJlbW92ZSgpIHdpbGwgZGVsZXRlIHRoaXMgb2JqZWN0IQ0KLQlyZWdzLT5yZW1v
dmUodGhpcyk7DQotCWlmIChyZWdzLT5pc2VtcHR5KCkpDQorCWlmIChtb25pa2VyID09IFd2U3Ry
aW5nKGktPmdldFN0cmluZygpKSkNCiAJew0KLQkgICAgZGVsZXRlIHJlZ3M7DQotCSAgICByZWdz
ID0gTlVMTDsNCisJICAgIFVVSUQgb2lkID0gaS0+Z2V0VXVpZCgpOw0KKwkgICAgV3ZNb25pa2Vy
Q3JlYXRlRnVuY1N0b3JlICpmdW5jOw0KKwkgICAgZnVuYyA9IHN0YXRpY19jYXN0PFd2TW9uaWtl
ckNyZWF0ZUZ1bmNTdG9yZSAqPigNCisJCXNydm1nci0+Z2V0T2JqZWN0KG9pZCkpOw0KKwkgICAg
aWYgKGZ1bmMpDQorCSAgICB7DQorCQlXVlJFTEVBU0UoaSk7DQorCQlXVlJFTEVBU0UoY2F0KTsN
CisJCXJldHVybiBmdW5jLT5jcmVhdGUoY3B0cik7DQorCSAgICB9DQogCX0NCi0JcmV0dXJuIDA7
DQogICAgIH0NCi0gICAgDQotICAgIC8qIHByb3RlY3QgYWdhaW5zdCByZS1lbnRlcmluZyB0aGUg
ZGVzdHJ1Y3RvciAqLw0KLSAgICByZWZjb3VudCA9IDE7DQotICAgIGRlbGV0ZSB0aGlzOw0KLSAg
ICByZXR1cm4gMDsNCisgICAgV1ZSRUxFQVNFKGkpOw0KKyAgICBXVlJFTEVBU0UoY2F0KTsNCisg
ICAgcmV0dXJuIE5VTEw7DQogfQ0KLQ0KLQ0KLVd2TW9uaWtlckJhc2U6Old2TW9uaWtlckJhc2Uo
Y29uc3QgVVVJRCAmaWlkLCBXdlN0cmluZ1Bhcm0gX2lkLCANCi0JCQkgICAgIFd2TW9uaWtlckNy
ZWF0ZUZ1bmMgKmZ1bmMpDQotICAgIDogaWQoX2lkKQ0KLXsNCi0gICAgREVCVUdMT0coIld2TW9u
aWtlciBjcmVhdGluZyglcykuXG4iLCBpZC5jc3RyKCkpOw0KLSAgICByZWcgPSBXdk1vbmlrZXJS
ZWdpc3RyeTo6ZmluZF9yZWcoaWlkKTsNCi0gICAgaWYgKHJlZykNCi0JcmVnLT5hZGQoaWQsIGZ1
bmMpOw0KLX0NCi0NCi0NCi1Xdk1vbmlrZXJCYXNlOjp+V3ZNb25pa2VyQmFzZSgpDQotew0KLSAg
ICBERUJVR0xPRygiV3ZNb25pa2VyIGRlc3Ryb3lpbmcoJXMpLlxuIiwgaWQuY3N0cigpKTsNCi0g
ICAgaWYgKHJlZykNCi0gICAgew0KLQlyZWctPmRlbChpZCk7DQotCVdWUkVMRUFTRShyZWcpOw0K
LSAgICB9DQotfQ0KLQ0KLQ0KLXZvaWQgKnd2Y3JlYXRlKGNvbnN0IFVVSUQgJmlpZCwgV3ZTdHJp
bmdQYXJtIG1vbmlrZXIpDQotew0KLSAgICBhc3NlcnQoIW1vbmlrZXIuaXNudWxsKCkpOw0KLSAg
ICBXdk1vbmlrZXJSZWdpc3RyeSAqcmVnID0gV3ZNb25pa2VyUmVnaXN0cnk6OmZpbmRfcmVnKGlp
ZCk7DQotICAgIGlmIChyZWcpDQotICAgIHsNCi0Jdm9pZCAqcmV0ID0gcmVnLT5jcmVhdGUobW9u
aWtlcik7DQotCVdWUkVMRUFTRShyZWcpOw0KLQlyZXR1cm4gcmV0Ow0KLSAgICB9DQotICAgIGVs
c2UNCi0JcmV0dXJuIE5VTEw7DQotfQ0KSW5kZXg6IHN0cmVhbXMvd3Zjb25zdHJlYW0uY2MNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBzdHJlYW1zL3d2Y29uc3RyZWFtLmNjCShyZXZpc2lvbiAxMTYyNSkNCisr
KyBzdHJlYW1zL3d2Y29uc3RyZWFtLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtNDAsMTMgKzQwLDIz
IEBADQogICAgIHJldHVybiBuZXcgX1d2Q29uU3RyZWFtKDAsIDEpOw0KIH0NCiANCi1zdGF0aWMg
V3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMCgic3RkaW4iLCAgY3JlYXRlX3N0ZGluKTsNCi1zdGF0
aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMSgic3Rkb3V0IiwgY3JlYXRlX3N0ZG91dCk7DQot
c3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZzIoInN0ZGVyciIsIGNyZWF0ZV9zdGRlcnIp
Ow0KLXN0YXRpYyBXdk1vbmlrZXI8SVd2U3RyZWFtPiByZWczKCJzdGRpbyIsICBjcmVhdGVfc3Rk
aW8pOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQwID0gezB4MWQ1MWEyOGYsIDB4MmM4YiwgMHg0
YTA4LA0KKwkJCSAgezB4OGQsIDB4ZjksIDB4MTMsIDB4NGYsIDB4MzYsIDB4ZmUsIDB4OWYsIDB4
YzR9fTsNCitzdGF0aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMCgic3RkaW4iLCAgdXVpZDAs
IGNyZWF0ZV9zdGRpbik7DQorIA0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQxID0gezB4MjcwZTRh
NWIsIDB4NTYxMSwgMHg0MWMwLA0KKwkJCSAgIHsweDgxLCAweGVmLCAweDQ3LCAweDUyLCAweDNh
LCAweDQxLCAweDhjLCAweDc4fX07DQorc3RhdGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZzEo
InN0ZG91dCIsIHV1aWQxLCBjcmVhdGVfc3Rkb3V0KTsNCisgDQorc3RhdGljIGNvbnN0IFVVSUQg
dXVpZDIgPSB7MHg0OTI0YWE0YiwgMHgyZjhiLCAweDRlYWIsDQorCQkJICAgezB4YjMsIDB4YTks
IDB4NTMsIDB4MWEsIDB4YmMsIDB4MjksIDB4OGUsIDB4YTd9fTsNCitzdGF0aWMgV3ZNb25pa2Vy
PElXdlN0cmVhbT4gcmVnMigic3RkZXJyIiwgdXVpZDIsIGNyZWF0ZV9zdGRlcnIpOw0KKyANCitz
dGF0aWMgY29uc3QgVVVJRCB1dWlkMyA9IHsweDBjM2E5MjZlLCAweDRmOTYsIDB4NGExYywNCisJ
CQkgICB7MHhhZCwgMHhlOSwgMHhjMCwgMHg2NiwgMHgyZiwgMHhhNCwgMHg4YiwgMHhhMX19Ow0K
K3N0YXRpYyBXdk1vbmlrZXI8SVd2U3RyZWFtPiByZWczKCJzdGRpbyIsICB1dWlkMywgY3JlYXRl
X3N0ZGlvKTsNCiANCiANCi0NCiBfV3ZDb25TdHJlYW06Ol9XdkNvblN0cmVhbShpbnQgX3JmZCwg
aW50IF93ZmQsDQogICAgICAgICBXdlN0cmluZ1Bhcm0gbmFtZSkNCiAgICAgOiBXdkZEU3RyZWFt
KF9yZmQsIF93ZmQpDQpJbmRleDogc3RyZWFtcy93dmZkc3RyZWFtLmNjDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gc3RyZWFtcy93dmZkc3RyZWFtLmNjCShyZXZpc2lvbiAxMTYyNikNCisrKyBzdHJlYW1zL3d2
ZmRzdHJlYW0uY2MJKHdvcmtpbmcgY29weSkNCkBAIC00OSw3ICs0OSw5IEBADQogICAgIHJldHVy
biBuZXcgV3ZGZFN0cmVhbShzLm51bSgpKTsNCiB9DQogDQotc3RhdGljIFd2TW9uaWtlcjxJV3ZT
dHJlYW0+IHJlZygiZmQiLCBjcmVhdG9yKTsNCitzdGF0aWMgY29uc3QgVVVJRCB1dWlkID0gezB4
ZjkyMGYxODIsIDB4MTIyMCwgMHg0ZDY5LA0KKwkJCSAgezB4YTMsIDB4ZmUsIDB4NzQsIDB4ZDUs
IDB4MjgsIDB4MjgsIDB4ZDYsIDB4MjN9fTsNCitzdGF0aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4g
cmVnKCJmZCIsIHV1aWQsIGNyZWF0b3IpOw0KIA0KIFd2RmRTdHJlYW06Old2RmRTdHJlYW0oaW50
IF9yd2ZkKQ0KICAgICA6IHJmZChfcndmZCksIHdmZChfcndmZCkNCkluZGV4OiBzdHJlYW1zL3d2
c3RyZWFtY2xvbmUuY2MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBzdHJlYW1zL3d2c3RyZWFtY2xvbmUuY2MJ
KHJldmlzaW9uIDExNjI2KQ0KKysrIHN0cmVhbXMvd3ZzdHJlYW1jbG9uZS5jYwkod29ya2luZyBj
b3B5KQ0KQEAgLTIzLDcgKzIzLDkgQEANCiAgICAgcmV0dXJuIG5ldyBXdlN0cmVhbUNsb25lKHd2
Y3JlYXRlPElXdlN0cmVhbT4ocykpOw0KIH0NCiANCi1zdGF0aWMgV3ZNb25pa2VyPElXdlN0cmVh
bT4gcmVnKCJjbG9uZSIsIGNyZWF0b3IpOw0KK3N0YXRpYyBjb25zdCBVVUlEIHV1aWQgPSB7MHg2
MTYyMDQyZCwgMHhmN2FiLCAweDQ1OWQsDQorCQkJICB7MHg4YSwgMHgyZSwgMHhmYywgMHhiYSwg
MHgyOCwgMHgzNiwgMHg3MCwgMHg1Zn19Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVd2U3RyZWFtPiBy
ZWcoImNsb25lIiwgdXVpZCwgY3JlYXRvcik7DQogDQogDQogV3ZTdHJlYW1DbG9uZTo6V3ZTdHJl
YW1DbG9uZShJV3ZTdHJlYW0gKl9jbG9uZWQpIA0KSW5kZXg6IHN0cmVhbXMvd3ZmaWxlLmNjDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gc3RyZWFtcy93dmZpbGUuY2MJKHJldmlzaW9uIDExNjI2KQ0KKysrIHN0
cmVhbXMvd3ZmaWxlLmNjCSh3b3JraW5nIGNvcHkpDQpAQCAtNTUsMTAgKzU1LDE4IEBADQogICAg
IHJldHVybiBuZXcgV3ZGaWxlKHMsIE9fUkRXUnxPX0NSRUFULCAwNjY2KTsNCiB9DQogDQotc3Rh
dGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZzAoImluZmlsZSIsIGluY3JlYXRvcik7DQotc3Rh
dGljIFd2TW9uaWtlcjxJV3ZTdHJlYW0+IHJlZzEoIm91dGZpbGUiLCBvdXRjcmVhdG9yKTsNCi1z
dGF0aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMygiZmlsZSIsIGNyZWF0b3IpOw0KK3N0YXRp
YyBjb25zdCBVVUlEIHV1aWQwID0gezB4N2E5NTlmZTEsIDB4Yjg0NSwgMHg0NTIwLA0KKwkJCSAg
ezB4YmYsIDB4NGIsIDB4YzAsIDB4ZGEsIDB4ZTQsIDB4ZjQsIDB4ZjQsIDB4NGV9fTsNCitzdGF0
aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMCgiaW5maWxlIiwgdXVpZDAsIGluY3JlYXRvcik7
DQogDQorc3RhdGljIGNvbnN0IFVVSUQgdXVpZDEgPSB7MHgwMDQzY2VkYywgMHhkNzQ4LCAweDQ4
YzQsDQorCQkJICAgezB4YTEsIDB4OWMsIDB4NjMsIDB4ZmMsIDB4YjgsIDB4OGQsIDB4YTUsIDB4
MjR9fTsNCitzdGF0aWMgV3ZNb25pa2VyPElXdlN0cmVhbT4gcmVnMSgib3V0ZmlsZSIsIHV1aWQx
LCBvdXRjcmVhdG9yKTsNCisNCitzdGF0aWMgY29uc3QgVVVJRCB1dWlkMyA9IHsweDBjNWRiNTU2
LCAweGUzOTksIDB4NGU4MCwNCisJCQkgICB7MHg4MCwgMHg4OSwgMHg4YywgMHhjNiwgMHgwNiwg
MHgzYSwgMHgyYiwgMHgzOH19Ow0KK3N0YXRpYyBXdk1vbmlrZXI8SVd2U3RyZWFtPiByZWczKCJm
aWxlIiwgdXVpZDMsIGNyZWF0b3IpOw0KKw0KIGJvb2wgV3ZGaWxlOjpvcGVuKFd2U3RyaW5nUGFy
bSBmaWxlbmFtZSwgaW50IG1vZGUsIGludCBjcmVhdGVfbW9kZSkNCiB7DQogICAgIG5vZXJyKCk7
DQo=


--=-UbTuvReQqFoR/chZATEy--

--=-cGuI2rg7zlm86Uag8XeX
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQBGZgFANbsx4+7HsQERAm+OAJoCUvh/pRbnvGQezpQe5aZV/FDURQCfX8uj
U1IWb4oNry7pB5Kd0LkoJfM=
=mao7
-----END PGP SIGNATURE-----

--=-cGuI2rg7zlm86Uag8XeX--