Hello Matz and rubyists,

Let me greet you from Google.
Recently I wrote the attached patches:

(1) Fixes --with-static-linked-ext

--with-static-linked-ext configure flag has been broken for years.
This patch fixes it.
I'll commit this patch later.


(2) Ruby's port to NativeClient
NativeClient (a.k.a NaCl) is a secure environment for running native
binaries on browsers.
 https://developers.google.com/native-client/

This patch is a proof of concept version of porting Ruby to NaCl.
This patch contains an example version of Ruby interpreter that
communicates with browsers via Pepper API. You can evaluate
expressions, require standard libraries and extensions.
Some features of Ruby, e.g. fork or socket are not available due to
limitation of NaCl. Some other features are temporarily disabled, e.g.
threading.
Unfortunately this port does not yet pass even btest. But it can be fixed later.

I'd like to commit this patch too. May I, Matz?

-- 
Regards,

Yuki Sonoda (Yugui)
yugui / google.com
ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBlZTdiYjA1Li40
M2YxNDc3IDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC01
MSw2ICs1MSw3OSBAQCB0YXJnZXRfY3B1PXg2NAogXSkKIF0pCiAKK0FDX0RFRlVOKFtSVUJZX05B
Q0xdLAorWworIEFTX0NBU0UoWyIke2hvc3Rfb3N9Il0sIAorW25hY2xdLCBbCisgIGFjX2N2X2V4
ZWV4dD0ubmV4ZQorICBob3N0X3ZlbmRvcj1jaHJvbWl1bQorICBhY19jdl9ob3N0PWNocm9taXVt
CisgIEFDX01TR19DSEVDS0lORyhbd2hlYXRoZXIgXCROQUNMX1NES19ST09UIGlzIHNldF0pCisg
IGlmIHRlc3QgeCIke05BQ0xfU0RLX1JPT1R9IiA9IHg7IHRoZW4KKyAgICBBQ19NU0dfUkVTVUxU
KFtub10pCisgICAgQUNfTVNHX0VSUk9SKFtZb3UgbmVlZCB0byBzZXQgXCROQUNMX1NES19ST09U
IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGJ1aWxkIGZvciBOYXRpdmVDbGllbnRdKQorICBmaQor
ICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCisgIG5hY2xfY3ZfYnVpbGRfdmFyaWFudD1nbGliYwor
ICBBQ19BUkdfV0lUSChuZXdsaWIsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdp
dGgtbmV3bGliXSwgW3VzZXMgbmV3bGliIHZlcnNpb24gb2YgTmF0aXZlQ2xpZW50IFNES10pLAor
ICAgICAgICAgICAgICBbQVNfQ0FTRShbJHdpdGh2YWxdLAorICAgICAgICAgICAgICAgICAgICAg
ICBbbm9dLCBbbmFjbF9jdl9idWlsZF92YXJpYW50PWdsaWJjXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgW3llc10sIFtuYWNsX2N2X2J1aWxkX3ZhcmlhbnQ9bmV3bGliXSldKQorCisgIEFTX0NB
U0UoWyIkYnVpbGRfY3B1Il0sCisgICAgICAgICAgW3g4Nl82NHxpPzg2XSwgW25hY2xfY3ZfY3B1
X25pY2s9eDg2XSwgW25hY2xfY3ZfY3B1X25pY2s9JGJ1aWxkX2NwdV0pCisgIEFTX0NBU0UoWyIk
YnVpbGRfb3MiXSwKKyAgICAgICAgICBbbGludXgqXSwgW25hY2xfY3Zfb3Nfbmljaz1saW51eF0s
CisgICAgICAgICAgW2RhcndpbipdLCBbbmFjbF9jdl9vc19uaWNrPW1hY10sCisgICAgICAgICAg
W2N5Z3dpbip8bWluZ3cqXSwgW25hY2xfY3Zfb3Nfbmljaz13aW5dLAorICAgICAgICAgIFtuYWNs
X2N2X29zX25pY2s9JGJ1aWxkX29zXSkKKworICBob3N0PSIkaG9zdF9jcHUtY2hyb21pdW0tJGhv
c3Rfb3MtIgorICBhY190b29sX3ByZWZpeD0iJGhvc3RfY3B1LW5hY2wtIgorCisgIEFDX01TR19D
SEVDS0lORyhbTmF0aXZlQ2xpZW50IHRvb2xjaGFpbl0pCisgIGlmIHRlc3QgLWQgXAorICAgICIk
e05BQ0xfU0RLX1JPT1R9L3Rvb2xjaGFpbi8ke25hY2xfY3Zfb3Nfbmlja31fJHtuYWNsX2N2X2Nw
dV9uaWNrfV8ke25hY2xfY3ZfYnVpbGRfdmFyaWFudH0iOyB0aGVuCisgICAgTkFDTF9UT09MQ0hB
SU49IiR7bmFjbF9jdl9vc19uaWNrfV8ke25hY2xfY3ZfY3B1X25pY2t9XyR7bmFjbF9jdl9idWls
ZF92YXJpYW50fSIKKyAgZWxzZQorICAgIEFTX0NBU0UoCisgICAgICBbIiR7bmFjbF9jdl9idWls
ZF92YXJpYW50fSJdLAorICAgICAgW2dsaWJjXSwgW2lmIHRlc3QgXAorICAgICAgICAtZCAiJHtO
QUNMX1NES19ST09UfS90b29sY2hhaW4vJHtuYWNsX2N2X29zX25pY2t9XyR7bmFjbF9jdl9jcHVf
bmlja31fbmV3bGliIiBcCisgICAgICAgIC1hIC1kICIke05BQ0xfU0RLX1JPT1R9L3Rvb2xjaGFp
bi8ke25hY2xfY3Zfb3Nfbmlja31fJHtuYWNsX2N2X2NwdV9uaWNrfSI7IHRoZW4KKyAgICAgICAg
TkFDTF9UT09MQ0hBSU49IiR7bmFjbF9jdl9vc19uaWNrfV8ke25hY2xfY3ZfY3B1X25pY2t9Igor
ICAgICAgZmldLAorICAgICAgW25ld2xpYl0sIFsgTkFDTF9UT09MQ0hBSU49IiR7bmFjbF9jdl9v
c19uaWNrfV8ke25hY2xfY3ZfY3B1X25pY2t9IiBdKQorICBmaQorICBpZiB0ZXN0ICEgLWUgIiR7
TkFDTF9TREtfUk9PVH0vdG9vbGNoYWluLyR7TkFDTF9UT09MQ0hBSU59LyR7YWNfdG9vbF9wcmVm
aXh9Z2NjIjsgdGhlbgorICAgIGlmIHRlc3QgIiR7YnVpbGRfY3B1fSIgPSBpNjg2IC1hIC1lICIk
e05BQ0xfU0RLX1JPT1R9L3Rvb2xjaGFpbi8ke05BQ0xfVE9PTENIQUlOfS9uYWNsLWdjYyI7IHRo
ZW4KKyAgICAgIGFjX3Rvb2xfcHJlZml4PW5hY2wtCisgICAgZmkKKyAgICBpZiB0ZXN0ICIke2J1
aWxkX2NwdX0iID0geDg2XzY0IC1hIC1lICIke05BQ0xfU0RLX1JPT1R9L3Rvb2xjaGFpbi8ke05B
Q0xfVE9PTENIQUlOfS9uYWNsLWdjYyI7IHRoZW4KKyAgICAgIGFjX3Rvb2xfcHJlZml4PW5hY2w2
NC0KKyAgICBmaQorICBmaQorICBpZiB0ZXN0IC16ICIke05BQ0xfVE9PTENIQUlOfSI7IHRoZW4K
KyAgICBBQ19NU0dfRVJST1IoW1VucmVjb2duaXplZCAtLWhvc3QgYW5kIC0tYnVpbGQgY29tYmlu
YXRpb24gb3IgTmFDbCBTREsgaXMgbm90IGluc3RhbGxlZF0pCisgIGZpCisgIFBBVEg9IiR7UEFU
SH06JHtOQUNMX1NES19ST09UfS90b29sY2hhaW4vJHtOQUNMX1RPT0xDSEFJTn0vYmluIgorICBB
Q19NU0dfUkVTVUxUKCR7TkFDTF9UT09MQ0hBSU59KQorCisgIEFDX1NVQlNUKE5BQ0xfVE9PTENI
QUlOKQorICBBQ19TVUJTVChOQUNMX1NES19ST09UKQorICBBQ19TVUJTVChOQUNMX1NES19WQVJJ
QU5ULCBuYWNsX2N2X2J1aWxkX3ZhcmlhbnQpCitdKV0pCisKK0FDX0RFRlVOKFtSVUJZX05BQ0xf
Q0hFQ0tfUEVQUEVSX1RZUEVTXSwKK1sKKyBBQ19DSEVDS19UWVBFUyhbc3RydWN0IFBQQl9Db3Jl
LCBzdHJ1Y3QgUFBCX01lc3NhZ2luZywgc3RydWN0IFBQQl9WYXIsCisgICAgICAgICAgICAgIHN0
cnVjdCBQUEJfVVJMTG9hZGVyLCBzdHJ1Y3QgUFBCX1VSTFJlcXVlc3RJbmZvLAorICAgICAgICAg
ICAgICBzdHJ1Y3QgUFBCX1VSTFJlc3BvbnNlSW5mbywgc3RydWN0IFBQQl9GaWxlUmVmLAorICAg
ICAgICAgICAgICBzdHJ1Y3QgUFBQX0luc3RhbmNlXSkKK10pCisKIEFDX0RFRlVOKFtSVUJZX0NQ
UE9VVEZJTEVdLAogW0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJHtDUFB9IGFjY2VwdHMgLW8sIHJi
X2N2X2NwcG91dGZpbGUsCiBbY3BwZmxhZ3M9JENQUEZMQUdTCkBAIC0yODMsNiArMzU2LDcgQEAg
aWYgdGVzdCAteiAiJHtDWFhGTEFHUytzZXR9IjsgdGhlbgogICAgIGN4eGZsYWdzPSIkY3h4Zmxh
Z3MgIicke29wdGZsYWdzfSAke2RlYnVnZmxhZ3N9ICR7d2FybmZsYWdzfScKIGZpCiAKK1JVQllf
TkFDTAogaWYgdGVzdCB4IiR7YnVpbGR9IiAhPSB4IiR7aG9zdH0iOyB0aGVuCiAgIEFDX0NIRUNL
X1RPT0woQ0MsIGdjYykKIGZpCkBAIC0zNzcsNiArNDUxLDcgQEAgQUNfU1VCU1QoTUFLRURJUlMp
CiAKIEFDX0NIRUNLX1BST0dTKERPVCwgZG90KQogQUNfQ0hFQ0tfUFJPR1MoRE9YWUdFTiwgZG94
eWdlbikKK0FTX0NBU0UoWyIke2hvc3Rfb3N9Il0sIFtuYWNsXSwgW0FDX1BBVEhfUFJPRyhQWVRI
T04sIHB5dGhvbildKQogCiBBQ19DSEVDS19QUk9HKFBLR19DT05GSUcsIHBrZy1jb25maWcsIFtw
a2ctY29uZmlnXSwgW10sIFtdLAogICAgIFtgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi
IC0tcHJpbnQtZXJyb3JzIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gIiRhc19k
aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiYF0pCkBAIC01MDksNyArNTg0LDcgQEAgaWYgdGVzdCAi
JEdDQyIgPSB5ZXM7IHRoZW4KIAogICAgICMgLWZzdGFjay1wcm90ZWN0b3IKICAgICBBU19DQVNF
KFsiJHRhcmdldF9vcyJdLAotICAgIFttaW5ndypdLCBbCisgICAgW21pbmd3KnxuYWNsXSwgWwog
CXN0YWNrX3Byb3RlY3Rvcj1ubwogICAgIF0sCiAgICAgWwpAQCAtMTEzNSw2ICsxMjEwLDE0IEBA
IG1haW4oKQogCQldLAogW3N1cGVydXgqXSwgWwlhY19jdl9mdW5jX3NldGl0aW1lcj1ubwogCQld
LAorW25hY2xdLCBbCisgIExJQlM9Ii1sbSAtbG5vc3lzICRMSUJTIgorICBpZiB0ZXN0ICIke25h
Y2xfY3ZfYnVpbGRfdmFyaWFudH0iID0gIm5ld2xpYiI7IHRoZW4KKyAgICBSVUJZX0FQUEVORF9P
UFRJT04oQ1BQRkxBR1MsIC1ETkFDTF9ORVdMSUIpCisgIGVsc2UKKyAgICBSVUJZX0FQUEVORF9P
UFRJT04oWENGTEFHUywgLWZQSUMpCisgIGZpCisgIF0sCiBbCUxJQlM9Ii1sbSAkTElCUyJdKQog
QUNfQ0hFQ0tfTElCKGNyeXB0LCBjcnlwdCkKIEFDX0NIRUNLX0xJQihkbCwgZGxvcGVuKQkjIER5
bmFtaWMgbGlua2luZyBmb3IgU3VuT1MvU29sYXJpcyBhbmQgU1lTVgpAQCAtMTIwMSw2ICsxMjg0
LDkgQEAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXQuc3RfY3RpbWVuc2VjXSkKIAogQUNf
Q0hFQ0tfVFlQRVMoW3N0cnVjdCB0aW1lc3BlY10sIFtdLCBbXSwgW0AlOkBpZmRlZiBIQVZFX1RJ
TUVfSAogQCU6QGluY2x1ZGUgPHRpbWUuaD4KK0AlOkBlbmRpZgorQCU6QGlmZGVmIEhBVkVfU1lT
X1RJTUVfSAorQCU6QGluY2x1ZGUgPHN5cy90aW1lLmg+CiBAJTpAZW5kaWZdKQogCiBBQ19DSEVD
S19UWVBFUyhbc3RydWN0IHRpbWV6b25lXSwgW10sIFtdLCBbQCU6QGlmZGVmIEhBVkVfVElNRV9I
CkBAIC0xMjYzLDYgKzEzNDksOCBAQCBSVUJZX0RFRklOVChpbnRwdHJfdCwgdm9pZCopCiBSVUJZ
X0RFRklOVCh1aW50cHRyX3QsIHZvaWQqLCB1bnNpZ25lZCkKIFJVQllfREVGSU5UKHNzaXplX3Qs
IHNpemVfdCwgW10sIFtAJTpAaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkJZG5sIG1heSBkaWZmZXIg
ZnJvbSBpbnQsIHNvIG5vdCB1c2UgQUNfVFlQRV9TU0laRV9ULgogCitSVUJZX05BQ0xfQ0hFQ0tf
UEVQUEVSX1RZUEVTCisKIEFDX0NBQ0hFX0NIRUNLKGZvciBzdGFjayBlbmQgYWRkcmVzcywgcmJf
Y3Zfc3RhY2tfZW5kX2FkZHJlc3MsCiBbcmJfY3Zfc3RhY2tfZW5kX2FkZHJlc3M9bm8KIGZvciBh
ZGRyIGluIF9fbGliY19zdGFja19lbmQgX1NFTkQ7IGRvCkBAIC0xNDUxLDExICsxNTM5LDExIEBA
IEFDX0NIRUNLX0ZVTkNTKGZtb2Qga2lsbHBnIHdhaXQ0IHdhaXRwaWQgZm9yayBzcGF3bnYgc3lz
Y2FsbCBfX3N5c2NhbGwgY2hyb290IGdlCiAJICAgICAgZ2V0cGdycCBzZXRwZ3JwIGdldHBnaWQg
c2V0cGdpZCBpbml0Z3JvdXBzIGdldGdyb3VwcyBzZXRncm91cHNcCiAJICAgICAgZ2V0cHJpb3Jp
dHkgZ2V0cmxpbWl0IHNldHJsaW1pdCBzeXNjb25mIGNsb3NlIGdldHB3bmFtX3IgZ2V0Z3JuYW1f
clwKIAkgICAgICBkbG9wZW4gc2lncHJvY21hc2sgc2lnYWN0aW9uIHNpZ3NldGptcCBfc2V0am1w
IF9sb25nam1wXAotCSAgICAgIHNldHNpZCB0ZWxsZGlyIHNlZWtkaXIgZmNobW9kIGNvc2ggc2lu
aCB0YW5oIGxvZzIgcm91bmRcCisJICAgICAgc2V0c2lkIHRlbGxkaXIgc2Vla2RpciBmY2htb2Qg
Y29zaCBzaW5oIHRhbmggbG9nMiByb3VuZCBsbGFic1wKIAkgICAgICBzZXR1aWQgc2V0Z2lkIGRh
ZW1vbiBzZWxlY3RfbGFyZ2VfZmRzZXQgc2V0ZW52IHVuc2V0ZW52XAogICAgICAgICAgICAgICBt
a3RpbWUgdGltZWdtIGdtdGltZV9yIGNsb2NrX2dldHRpbWUgZ2V0dGltZW9mZGF5IHBvbGwgcHBv
bGxcCiAgICAgICAgICAgICAgIHByZWFkIHNlbmRmaWxlIHNodXRkb3duIHNpZ2FsdHN0YWNrIGRs
X2l0ZXJhdGVfcGhkclwKLSAgICAgICAgICAgICAgZHVwMyBwaXBlMiBwb3NpeF9tZW1hbGlnbiBt
ZW1hbGlnbikKKyAgICAgICAgICAgICAgZHVwMyBwaXBlMiBwb3NpeF9tZW1hbGlnbiBtZW1hbGln
biBpb2N0bCkKIAogQUNfQ0FDSEVfQ0hFQ0soZm9yIHVuc2V0ZW52IHJldHVybnMgYSB2YWx1ZSwg
cmJfY3ZfdW5zZXRlbnZfcmV0dXJuX3ZhbHVlLAogICBbQUNfVFJZX0NPTVBJTEUoWwpAQCAtMTkx
Nyw3ICsyMDA1LDggQEAgaWYgdGVzdCB4IiRlbmFibGVfcHRocmVhZCIgPSB4eWVzOyB0aGVuCiAJ
cHRocmVhZF9nZXRhdHRyX25wIHB0aHJlYWRfYXR0cl9nZXRfbnAgcHRocmVhZF9hdHRyX2dldHN0
YWNrXAogCXB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucCBwdGhyZWFkX2dldF9zdGFja3NpemVfbnAg
XAogCXRocl9zdGtzZWdtZW50IHB0aHJlYWRfc3RhY2tzZWdfbnAgcHRocmVhZF9nZXR0aHJkc19u
cCBcCi0JcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jayBwdGhyZWFkX3NpZ21hc2spCisgICAgICAg
IHB0aHJlYWRfY29uZF9pbml0aWFsaXplIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2sgcHRocmVh
ZF9jb25kYXR0cl9pbml0IFwKKyAgICAgICAgcHRocmVhZF9zaWdtYXNrKQogZmkKIGlmIHRlc3Qg
eCIkYWNfY3ZfaGVhZGVyX3Vjb250ZXh0X2giID0geHllczsgdGhlbgogICAgIGlmIHRlc3QgeCIk
cmJfd2l0aF9wdGhyZWFkIiA9IHh5ZXM7IHRoZW4KQEAgLTIwMzQsMTEgKzIxMjMsMTQgQEAgaWYg
dGVzdCAiJHJiX2N2X2JpbmFyeV9lbGYiID0geWVzOyB0aGVuCiAgIGlmIHRlc3QgIiR3aXRoX2Rs
bl9hX291dCIgPSB5ZXM7IHRoZW4KICAgICBBQ19NU0dfRVJST1IoZGxuX2Ffb3V0IGRvZXMgbm90
IHdvcmsgd2l0aCBFTEYpCiAgIGZpCi0gIEFDX0xJQk9CSihbYWRkcjJsaW5lXSkKKyAgQUNfQ0hF
Q0tfSEVBREVSUyhbZWxmLmggZWxmX2FiaS5oXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2Vs
Zl9oID0geWVzIC1vICRhY19jdl9oZWFkZXJfZWxmX2FiaV9oID0geWVzOyB0aGVuCisgICAgQUNf
TElCT0JKKFthZGRyMmxpbmVdKQorICBmaQogZmkKIAogQVNfQ0FTRShbIiR0YXJnZXRfb3MiXSwK
LVtsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSB8IGJzZGkqIHwga29wZW5zb2xhcmlzKi1nbnVd
LCBbCitbbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUgfCBic2RpKiB8IGtvcGVuc29sYXJpcyot
Z251IHwgbmFjbF0sIFsKICAgICBpZiB0ZXN0ICIkcmJfY3ZfYmluYXJ5X2VsZiIgPSBubzsgdGhl
bgogCXdpdGhfZGxuX2Ffb3V0PXllcwogICAgIGVsc2UKQEAgLTIyMTgsNiArMjMxMCw3IEBAIGlm
IHRlc3QgIiR3aXRoX2Rsbl9hX291dCIgIT0geWVzOyB0aGVuCiAJCQlyYl9jdl9kbG9wZW49eWVz
XSwKIAlbb3MyLWVteCpdLCBbCUxERkxBR1M9IiRMREZMQUdTIC1ab21mIgogCQkJXSwKKyAgICAg
ICAgW25hY2xdLCBbIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJyBdLAogCVsgCTogJHtMRFNIQVJF
RD0iJChMRCkifV0pCiAgIEFDX01TR19SRVNVTFQoJHJiX2N2X2Rsb3BlbikKIGZpCkBAIC0yMzQy
LDYgKzI0MzUsOSBAQCBBU19DQVNFKFsiJHRhcmdldF9vcyJdLAogICBbKmRqZ3BwKl0sIFsKICAg
ICBzZXR1cD1TZXR1cC5kagogICAgIF0sCisgIFtuYWNsXSwgWworICAgIHNldHVwPVNldHVwLm5h
Y2wKKyAgICBdLAogICBbCiAgICAgc2V0dXA9U2V0dXAKICAgICBdKQpAQCAtMjYwMCw2ICsyNjk2
LDcgQEAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBwcmVmaXggb2YgZXh0ZXJuYWwgc3ltYm9sc10sIHJi
X2N2X3N5bWJvbF9wcmVmaXgsIFsKIFNZTUJPTF9QUkVGSVg9IiRyYl9jdl9zeW1ib2xfcHJlZml4
IgogdGVzdCAieCRTWU1CT0xfUFJFRklYIiA9IHhOT05FICYmIFNZTUJPTF9QUkVGSVg9JycKIE1J
TklETE5PQko9ZG15ZGxuLm8KKwogQVNfQ0FTRShbIiR0YXJnZXRfb3MiXSwKICAgICBbbGludXgq
XSwgWwogCV0sCkBAIC0yNjc5LDcgKzI3NzYsMTAgQEAgQVNfQ0FTRShbIiR0YXJnZXRfb3MiXSwK
IAlBU19DQVNFKFsiJFlBQ0MiXSxbKnlhY2MqXSwgWwogCSAgICBYQ0ZMQUdTPSIkWENGTEFHUyAt
RFlZTUFYREVQVEg9MzAwIgogCSAgICBZQUNDPSIkWUFDQyAtTmw0MDAwMCAtTm00MDAwMCIKLQld
KV0pCisJXSldLAorICAgIFtuYWNsXSwgWworCUZJUlNUTUFLRUZJTEU9R05VbWFrZWZpbGU6bmFj
bC9HTlVtYWtlZmlsZS5pbgorCV0pCiBNSU5JT0JKUz0iJE1JTklETE5PQkoiCiAKIEFTX0NBU0Uo
WyIkVEhSRUFEX01PREVMIl0sCmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IDg0NzZj
MGUuLmFjNGIxYzYgMTAwNjQ0Ci0tLSBhL2Rpci5jCisrKyBiL2Rpci5jCkBAIC00NCw2ICs0NCwx
MCBAQAogIyAgaW5jbHVkZSAid2luMzIvZGlyLmgiCiAjIGVuZGlmCiAjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fbmF0aXZlX2NsaWVudF9fKSAmJiBkZWZpbmVkKE5BQ0xfTkVXTElCKQorIyBpbmNsdWRl
ICJuYWNsL2RpcmVudC5oIgorIyBpbmNsdWRlICJuYWNsL3N0YXQuaCIKKyNlbmRpZgogCiAjaW5j
bHVkZSA8ZXJybm8uaD4KIApkaWZmIC0tZ2l0IGEvZGxuLmMgYi9kbG4uYwppbmRleCAzOGUxZGNk
Li5jYzE1MzcwIDEwMDY0NAotLS0gYS9kbG4uYworKysgYi9kbG4uYwpAQCAtMTMxOCwxMyArMTMx
OCwyOCBAQCBkbG5fbG9hZChjb25zdCBjaGFyICpmaWxlKQogIyBkZWZpbmUgUlRMRF9HTE9CQUwg
MAogI2VuZGlmCiAKKyNpZmRlZiBfX25hdGl2ZV9jbGllbnRfXworCWNoYXIqIHAsICpvcmlnOwor
ICAgICAgICBpZiAoZmlsZVswXSA9PSAnLicgJiYgZmlsZVsxXSA9PSAnLycpIGZpbGUrPTI7CisJ
b3JpZyA9IHN0cmR1cChmaWxlKTsKKwlmb3IgKHAgPSBmaWxlOyAqcDsgKytwKSB7CisJICAgIGlm
ICgqcCA9PSAnLycpICpwID0gJ18nOworCX0KKyNlbmRpZgogCS8qIExvYWQgZmlsZSAqLwogCWlm
ICgoaGFuZGxlID0gKHZvaWQqKWRsb3BlbihmaWxlLCBSVExEX0xBWll8UlRMRF9HTE9CQUwpKSA9
PSBOVUxMKSB7CisjaWZkZWYgX19uYXRpdmVfY2xpZW50X18KKyAgICAgICAgICAgIGZyZWUob3Jp
Zyk7CisjZW5kaWYKIAkgICAgZXJyb3IgPSBkbG5fc3RyZXJyb3IoKTsKIAkgICAgZ290byBmYWls
ZWQ7CiAJfQogCiAJaW5pdF9mY3QgPSAodm9pZCgqKSgpKShWQUxVRSlkbHN5bShoYW5kbGUsIGJ1
Zik7CisjaWZkZWYgX19uYXRpdmVfY2xpZW50X18KKwlzdHJjcHkoZmlsZSwgb3JpZyk7CisJZnJl
ZShvcmlnKTsKKyNlbmRpZgogI2lmIGRlZmluZWQgX19TWU1CSUFOMzJfXwogCWlmIChpbml0X2Zj
dCA9PSBOVUxMKSB7CiAJICAgIGluaXRfZmN0ID0gKHZvaWQoKikoKSlkbHN5bShoYW5kbGUsICIx
Iik7IC8qIFNvbWUgU3ltYmlhbiB2ZXJzaW9ucyBkbyBub3Qgc3VwcG9ydCBzeW1ib2wgdGFibGUg
aW4gRExMLCBvcmRpbmFsIG51bWJlcnMgb25seSAqLwpkaWZmIC0tZ2l0IGEvZXh0L1NldHVwLm5h
Y2wgYi9leHQvU2V0dXAubmFjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
ZTI1MmZkCi0tLSAvZGV2L251bGwKKysrIGIvZXh0L1NldHVwLm5hY2wKQEAgLTAsMCArMSw1MCBA
QAorIyAjb3B0aW9uIG5vZHluYW1pYworIyAKKyMgI1dpbjMyQVBJCisjIGJpZ2RlY2ltYWwKKyMg
Y29udGludWF0aW9uCisjIGNvdmVyYWdlCisjICNjdXJzZXMKKyMgZGF0ZQorIyAjZGJtCisjIGRp
Z2VzdC9idWJibGViYWJibGUKKyMgZGlnZXN0CisjIGRpZ2VzdC9tZDUKKyMgZGlnZXN0L3JtZDE2
MAorIyBkaWdlc3Qvc2hhMQorIyBkaWdlc3Qvc2hhMgorIyBkbAorIyBkbC9jYWxsYmFjaworIyAj
ZGwvd2luMzIKKyMgZXRjCisjIGZjbnRsCisjIGZpYmVyCisjICNmaWRkbGUKKyMgI2dkYm0KKyMg
I2ljb252CisjIGlvL2NvbnNvbGUKKyMgaW8vbm9uYmxvY2sKKyMgaW8vd2FpdAorIyAjanNvbgor
IyBqc29uL2dlbmVyYXRvcgorIyBqc29uL3BhcnNlcgorIyBtYXRobi9jb21wbGV4CisjIG1hdGhu
L3JhdGlvbmFsCisjIG5rZgorIyBvYmpzcGFjZQorIyAjb3BlbnNzbAorIyBwYXRobmFtZQorIyAj
cHN5Y2gKKyMgI3B0eQorIyByYWNjL2NwYXJzZQorIyAjcmVhZGxpbmUKKyMgcmlwcGVyCisjICNz
ZGJtCisjICNzb2NrZXQKKyMgc3RyaW5naW8KKyMgc3Ryc2NhbgorIyBzeWNrCisjICNzeXNsb2cK
KyMgI3RrCisjICN0ay90a3V0aWwKKyMgI3psaWIKZGlmZiAtLWdpdCBhL2V4dC9leHRtay5yYiBi
L2V4dC9leHRtay5yYgppbmRleCBkYzRiZTg0Li40MzkyOWZiIDEwMDc1NQotLS0gYS9leHQvZXh0
bWsucmIKKysrIGIvZXh0L2V4dG1rLnJiCkBAIC02Miw2ICs2MiwxMSBAQCBkZWYgc3lzdGVtKCph
cmdzKQogICBzdXBlcgogZW5kCiAKK2RlZiBzeXN0ZW0oKmFyZ3MpCisgIHB1dHMgYXJncy5tYXB7
fGFyZ3wgU2hlbGx3b3Jkcy5lc2NhcGUoYXJnKX0uam9pbignICcpIGlmIHZlcmJvc2U/CisgIHN1
cGVyCitlbmQKKwogZGVmIGV4dHJhY3RfbWFrZWZpbGUobWFrZWZpbGUsIGtlZXAgPSB0cnVlKQog
ICBtID0gRmlsZS5yZWFkKG1ha2VmaWxlKQogICBpZiAhKHRhcmdldCA9IG1bL15UQVJHRVRbIFx0
XSo9WyBcdF0qKFxTKikvLCAxXSkKQEAgLTY1Nyw2ICs2NjIsMTMgQEAgaWYgJGNvbmZpZ3VyZV9v
bmx5IGFuZCAkY29tbWFuZF9vdXRwdXQKICAgICBjb25maWdfc3RyaW5nKCdSQU5MSUInKSBkbyB8
cmFubGlifAogICAgICAgbWYucHV0cyAiXHQtJChRKSN7cmFubGlifSAkQCAyPiAvZGV2L251bGwg
fHwgdHJ1ZSIKICAgICBlbmQKKyAgICBtZi5wdXRzICJleHQvZXh0aW5pdC4jeyRPQkpFWFR9Olxu
XHQkKFEpJChNQUtFKSAkKE1GTEFHUykgVj0kKFYpICRAIgorICAgIG1mLnB1dHMgImV4dC9saWJl
eHQuI3skTElCRVhUfTogJChFWFRPQkpTKSIKKyAgICBtZi5wdXRzICJcdCQoRUNITykgbGlua2lu
ZyBzdGF0aWMtbGlicmFyeSAkQCIKKyAgICBtZi5wdXRzICJcdCQoUSkgJChBUikgI3tjb25maWdf
c3RyaW5nKCdBUkZMQUdTJykgfHwgJ2NydSAnfSRAICQoRVhUT0JKUykiCisgICAgY29uZmlnX3N0
cmluZygnUkFOTElCJykgZG8gfHJhbmxpYnwKKyAgICAgIG1mLnB1dHMgIlx0LSQoUSkje3Jhbmxp
Yn0gJEAgMj4gL2Rldi9udWxsIHx8IHRydWUiCisgICAgZW5kCiAgICAgbWYucHV0cwogICAgIGV4
ZWMgPSBjb25maWdfc3RyaW5nKCJleGVjIikge3xzdHJ8IHN0ciArICIgIn0KICAgICB0YXJnZXRz
LmVhY2ggZG8gfHRndHwKZGlmZiAtLWdpdCBhL2V4dC9wdHkvZXh0Y29uZi5yYiBiL2V4dC9wdHkv
ZXh0Y29uZi5yYgppbmRleCAzZDZkMGYxLi44OTAyNjlmIDEwMDY0NAotLS0gYS9leHQvcHR5L2V4
dGNvbmYucmIKKysrIGIvZXh0L3B0eS9leHRjb25mLnJiCkBAIC0xLDYgKzEsNiBAQAogcmVxdWly
ZSAnbWttZicKIAotaWYgL21zd2lufG1pbmd3fGJjY3dpbi8gIX4gUlVCWV9QTEFURk9STQoraWYg
L21zd2lufG1pbmd3fGJjY3dpbnxuYWNsLyAhfiBSVUJZX1BMQVRGT1JNCiAgIGhhdmVfaGVhZGVy
KCJzeXMvc3Ryb3B0cy5oIikKICAgaGF2ZV9mdW5jKCJzZXRyZXN1aWQiKQogICBoYXZlX2hlYWRl
cigibGlidXRpbC5oIikKZGlmZiAtLWdpdCBhL2ZpbGUuYyBiL2ZpbGUuYwppbmRleCA1OWRlODNj
Li5iYjFhYjM3IDEwMDY0NAotLS0gYS9maWxlLmMKKysrIGIvZmlsZS5jCkBAIC02MCw2ICs2MCwx
MyBAQCBpbnQgZmxvY2soaW50LCBpbnQpOwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CiAKKyNpZiBkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKSAmJiBkZWZp
bmVkKE5BQ0xfTkVXTElCKQorIyBpbmNsdWRlICJuYWNsL3V0aW1lLmgiCisjIGluY2x1ZGUgIm5h
Y2wvc3RhdC5oIgorIyBpbmNsdWRlICJuYWNsL3VuaXN0ZC5oIgorI2VuZGlmCisKKwogI2lmZGVm
IEhBVkVfU1lTX01LREVWX0gKICNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KICNlbmRpZgpAQCAtMzM1
OCw3ICszMzY1LDExIEBAIHJlYWxwYXRoX3JlYyhsb25nICpwcmVmaXhsZW5wLCBWQUxVRSAqcmVz
b2x2ZWRwLCBjb25zdCBjaGFyICp1bnJlc29sdmVkLCBWQUxVRSBsCiAgICAgICAgICAgICAgICAg
c3RydWN0IHN0YXQgc2J1ZjsKICAgICAgICAgICAgICAgICBpbnQgcmV0OwogICAgICAgICAgICAg
ICAgIFZBTFVFIHRlc3RwYXRoMiA9IHJiX3N0cl9lbmNvZGVfb3NwYXRoKHRlc3RwYXRoKTsKKyNp
ZmRlZiBfX25hdGl2ZV9jbGllbnRfXworICAgICAgICAgICAgICAgIHJldCA9IHN0YXQoUlNUUklO
R19QVFIodGVzdHBhdGgyKSwgJnNidWYpOworI2Vsc2UKICAgICAgICAgICAgICAgICByZXQgPSBs
c3RhdChSU1RSSU5HX1BUUih0ZXN0cGF0aDIpLCAmc2J1Zik7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICBpZiAocmV0ID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBF
Tk9FTlQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgIWxhc3QgfHwg
KnVucmVzb2x2ZWRfZmlyc3RzZXApCkBAIC0zNDAzLDYgKzM0MTQsMTMgQEAgcmVhbHBhdGhfcmVj
KGxvbmcgKnByZWZpeGxlbnAsIFZBTFVFICpyZXNvbHZlZHAsIGNvbnN0IGNoYXIgKnVucmVzb2x2
ZWQsIFZBTFVFIGwKICAgICB9CiB9CiAKKyNpZmRlZiBfX25hdGl2ZV9jbGllbnRfXworVkFMVUUK
K3JiX3JlYWxwYXRoX2ludGVybmFsKFZBTFVFIGJhc2VkaXIsIFZBTFVFIHBhdGgsIGludCBzdHJp
Y3QpCit7CisgICAgcmV0dXJuIHBhdGg7Cit9CisjZWxzZQogVkFMVUUKIHJiX3JlYWxwYXRoX2lu
dGVybmFsKFZBTFVFIGJhc2VkaXIsIFZBTFVFIHBhdGgsIGludCBzdHJpY3QpCiB7CkBAIC0zNDc2
LDYgKzM0OTQsNyBAQCByYl9yZWFscGF0aF9pbnRlcm5hbChWQUxVRSBiYXNlZGlyLCBWQUxVRSBw
YXRoLCBpbnQgc3RyaWN0KQogICAgIE9CSl9UQUlOVChyZXNvbHZlZCk7CiAgICAgcmV0dXJuIHJl
c29sdmVkOwogfQorI2VuZGlmCiAKIC8qCiAgKiBjYWxsLXNlcToKQEAgLTUxNDIsNiArNTE2MSw5
IEBAIHJiX3BhdGhfY2hlY2soY29uc3QgY2hhciAqcGF0aCkKIH0KIAogI2lmbmRlZiBfV0lOMzIK
KyNpZmRlZiBfX25hdGl2ZV9jbGllbnRfXworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2Vu
ZGlmCiBpbnQKIHJiX2ZpbGVfbG9hZF9vayhjb25zdCBjaGFyICpwYXRoKQogewpkaWZmIC0tZ2l0
IGEvZ2MuYyBiL2djLmMKaW5kZXggYTVhZGExYy4uNGE5NjEyNyAxMDA2NDQKLS0tIGEvZ2MuYwor
KysgYi9nYy5jCkBAIC0zMyw2ICszMywxMiBAQAogI2lmZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gK
ICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNlbmRpZgorI2lmIGRlZmluZWQoX19uYXRpdmVf
Y2xpZW50X18pICYmIGRlZmluZWQoTkFDTF9ORVdMSUIpCisjIGluY2x1ZGUgIm5hY2wvcmVzb3Vy
Y2UuaCIKKyMgdW5kZWYgSEFWRV9QT1NJWF9NRU1BTElHTgorIyB1bmRlZiBIQVZFX01FTUFMSUdO
CisKKyNlbmRpZgogCiAjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fCiAj
aW5jbHVkZSA8d2luZG93cy5oPgpkaWZmIC0tZ2l0IGEvZ2MuaCBiL2djLmgKaW5kZXggZGYyY2Y3
ZC4uMDk0Yjk0MSAxMDA2NDQKLS0tIGEvZ2MuaAorKysgYi9nYy5oCkBAIC0yLDkgKzIsOSBAQAog
I2lmbmRlZiBSVUJZX0dDX0gKICNkZWZpbmUgUlVCWV9HQ19IIDEKIAotI2lmIGRlZmluZWQoX194
ODZfNjRfXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYm
IGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQogI2RlZmlu
ZSBTRVRfTUFDSElORV9TVEFDS19FTkQocCkgX19hc21fXygibW92cVx0JSVyc3AsICUwIiA6ICI9
ciIgKCoocCkpKQotI2VsaWYgZGVmaW5lZChfX2kzODYpICYmIGRlZmluZWQoX19HTlVDX18pCisj
ZWxpZiBkZWZpbmVkKF9faTM4NikgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19u
YXRpdmVfY2xpZW50X18pCiAjZGVmaW5lIFNFVF9NQUNISU5FX1NUQUNLX0VORChwKSBfX2FzbV9f
KCJtb3ZsXHQlJWVzcCwgJTAiIDogIj1yIiAoKihwKSkpCiAjZWxzZQogTk9JTkxJTkUodm9pZCBy
Yl9nY19zZXRfc3RhY2tfZW5kKFZBTFVFICoqc3RhY2tfZW5kX3ApKTsKZGlmZiAtLWdpdCBhL2lv
LmMgYi9pby5jCmluZGV4IDU5OTdjMjkuLmFlMDE5NDkgMTAwNjQ0Ci0tLSBhL2lvLmMKKysrIGIv
aW8uYwpAQCAtMjgsNyArMjgsOSBAQAogI2lmIGRlZmluZWQgSEFWRV9ORVRfU09DS0VUX0gKICMg
aW5jbHVkZSA8bmV0L3NvY2tldC5oPgogI2VsaWYgZGVmaW5lZCBIQVZFX1NZU19TT0NLRVRfSAot
IyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjIGlmbmRlZiBfX25hdGl2ZV9jbGllbnRfXworIyAg
aW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIyBlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9f
Qk9XX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmlu
ZWQoX19FTVhfXykgfHwgZGVmaW5lZChfX0JFT1NfXykgfHwgZGVmaW5lZChfX0hBSUtVX18pCkBA
IC00Nyw2ICs0OSw5IEBACiAjaWYgZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiAhZGVmaW5l
ZChfV0lOMzIpCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
bmF0aXZlX2NsaWVudF9fKSAmJiBkZWZpbmVkKE5BQ0xfTkVXTElCKQorIyBpbmNsdWRlICJuYWNs
L2lvY3RsLmgiCisjZW5kaWYKICNpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgfHwgZGVmaW5lZChf
V0lOMzIpCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRkNOVExf
SCkKQEAgLTE2MSw3ICsxNjYsNyBAQCB2b2lkCiByYl9tYXlndmxfZmRfZml4X2Nsb2V4ZWMoaW50
IGZkKQogewogICAvKiBNaW5HVyBkb24ndCBoYXZlIEZfR0VURkQgYW5kIEZEX0NMT0VYRUMuICBb
cnVieS1jb3JlOjQwMjgxXSAqLwotI2lmZGVmIEZfR0VURkQKKyNpZiBkZWZpbmVkKEZfR0VURkQp
ICYmICFkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQogICAgIGludCBmbGFncywgZmxhZ3MyLCBy
ZXQ7CiAgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7IC8qIHNob3VsZCBub3QgZmFpbCBl
eGNlcHQgRUJBREYuICovCiAgICAgaWYgKGZsYWdzID09IC0xKSB7CkBAIC0xODcsNyArMTkyLDYg
QEAgcmJfZmRfZml4X2Nsb2V4ZWMoaW50IGZkKQogICAgIGlmIChtYXhfZmlsZV9kZXNjcmlwdG9y
IDwgZmQpIG1heF9maWxlX2Rlc2NyaXB0b3IgPSBmZDsKIH0KIAotCiBpbnQKIHJiX2Nsb2V4ZWNf
b3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKIHsKQEAg
LTE1MDIsNyArMTUwNiw3IEBAIHJiX2lvX3NldF9wb3MoVkFMVUUgaW8sIFZBTFVFIG9mZnNldCkK
IAogc3RhdGljIHZvaWQgY2xlYXJfcmVhZGNvbnYocmJfaW9fdCAqZnB0cik7CiAKLSNpZmRlZiBI
QVZFX0ZTWU5DCisjaWYgZGVmaW5lZChIQVZFX0ZTWU5DKSB8fCAhZGVmaW5lZChfV0lOMzIpCiAK
IC8qCiAgKiAgY2FsbC1zZXE6CkBAIC0xNTQyLDYgKzE1NDYsNyBAQCByYl9pb19yZXdpbmQoVkFM
VUUgaW8pCiAKICAgICByZXR1cm4gSU5UMkZJWCgwKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50
CiBpb19maWxsYnVmKHJiX2lvX3QgKmZwdHIpCkBAIC0xNjMxLDYgKzE2MzYsNyBAQCByYl9pb19l
b2YoVkFMVUUgaW8pCiAgICAgcmV0dXJuIFFmYWxzZTsKIH0KIAorI2lmZGVmIEhBVkVfRlNZTkMK
IC8qCiAgKiAgY2FsbC1zZXE6CiAgKiAgICAgaW9zLnN5bmMgICAgLT4gdHJ1ZSBvciBmYWxzZQpA
QCAtMTcwOSwxNCArMTcxNSwxOSBAQCByYl9pb19mc3luYyhWQUxVRSBpbykKIAogICAgIGlmIChp
b19mZmx1c2goZnB0cikgPCAwKQogICAgICAgICByYl9zeXNfZmFpbCgwKTsKLSNpZm5kZWYgX1dJ
TjMyCS8qIGFscmVhZHkgY2FsbGVkIGluIGlvX2ZmbHVzaCgpICovCisjIGlmbmRlZiBfV0lOMzIJ
LyogYWxyZWFkeSBjYWxsZWQgaW4gaW9fZmZsdXNoKCkgKi8KICAgICBpZiAoKGludClyYl90aHJl
YWRfaW9fYmxvY2tpbmdfcmVnaW9uKG5vZ3ZsX2ZzeW5jLCBmcHRyLCBmcHRyLT5mZCkgPCAwKQog
CXJiX3N5c19mYWlsX3BhdGgoZnB0ci0+cGF0aHYpOwotI2VuZGlmCisjIGVuZGlmCiAgICAgcmV0
dXJuIElOVDJGSVgoMCk7CiB9CiAjZWxzZQotI2RlZmluZSByYl9pb19mc3luYyByYl9mX25vdGlt
cGxlbWVudAorIyBkZWZpbmUgcmJfaW9fZnN5bmMgcmJfZl9ub3RpbXBsZW1lbnQKKyMgZGVmaW5l
IHJiX2lvX3N5bmMgcmJfZl9ub3RpbXBsZW1lbnQKK3N0YXRpYyBWQUxVRSByYl9pb19zZXRfc3lu
YyhWQUxVRSBpbywgVkFMVUUgc3luYykgeworICByYl9ub3RpbXBsZW1lbnQoKTsKKyAgLyogTkVW
RVIgUkVBQ0hFRCAqLyByZXR1cm4gUXVuZGVmOworfQogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0ZE
QVRBU1lOQwpAQCAtODIwMCwxMCArODIxMSwxMCBAQCByYl9mX3NlbGVjdChpbnQgYXJnYywgVkFM
VUUgKmFyZ3YsIFZBTFVFIG9iaikKIAogI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpb2N0bF9y
ZXFfdDsKLSAjZGVmaW5lIE5VTTJJT0NUTFJFUShudW0pIE5VTTJVTE9ORyhudW0pCisjIGRlZmlu
ZSBOVU0ySU9DVExSRVEobnVtKSBOVU0yVUxPTkcobnVtKQogI2Vsc2UKICB0eXBlZGVmIGludCBp
b2N0bF9yZXFfdDsKLSAjZGVmaW5lIE5VTTJJT0NUTFJFUShudW0pIE5VTTJJTlQobnVtKQorIyBk
ZWZpbmUgTlVNMklPQ1RMUkVRKG51bSkgTlVNMklOVChudW0pCiAjZW5kaWYKIAogc3RydWN0IGlv
Y3RsX2FyZyB7CmRpZmYgLS1naXQgYS9pc2VxLmMgYi9pc2VxLmMKaW5kZXggZWM5YWM1Zi4uZmYw
YmNhZCAxMDA2NDQKLS0tIGEvaXNlcS5jCisrKyBiL2lzZXEuYwpAQCAtMTU0OCw0ICsxNTQ4LDMg
QEAgSW5pdF9JU2VxKHZvaWQpCiAgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJfY0lT
ZXEsICJkaXNhc20iLCBpc2VxX3NfZGlzYXNtLCAxKTsKICAgICByYl9kZWZpbmVfc2luZ2xldG9u
X21ldGhvZChyYl9jSVNlcSwgImRpc2Fzc2VtYmxlIiwgaXNlcV9zX2Rpc2FzbSwgMSk7CiB9Ci0K
ZGlmZiAtLWdpdCBhL21pc3NpbmcvZmxvY2suYyBiL21pc3NpbmcvZmxvY2suYwppbmRleCA3NjNj
NDlkLi40MzVkNjZhIDEwMDY0NAotLS0gYS9taXNzaW5nL2Zsb2NrLmMKKysrIGIvbWlzc2luZy9m
bG9jay5jCkBAIC0xLDcgKzEsOCBAQAogI2luY2x1ZGUgInJ1YnkvY29uZmlnLmgiCisjaW5jbHVk
ZSAicnVieS9ydWJ5LmgiCiAKICNpZiBkZWZpbmVkIF9XSU4zMgotI2VsaWYgZGVmaW5lZCBIQVZF
X0ZDTlRMICYmIGRlZmluZWQgSEFWRV9GQ05UTF9ICisjZWxpZiBkZWZpbmVkIEhBVkVfRkNOVEwg
JiYgZGVmaW5lZCBIQVZFX0ZDTlRMX0ggJiYgIWRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCiAK
IC8qIFRoZXNlIGFyZSB0aGUgZmxvY2soKSBjb25zdGFudHMuICBTaW5jZSB0aGlzIHN5dGVtcyBk
b2Vzbid0IGhhdmUKICAgIGZsb2NrKCksIHRoZSB2YWx1ZXMgb2YgdGhlIGNvbnN0YW50cyBhcmUg
cHJvYmFibHkgbm90IGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL25hY2wvR05VbWFrZWZpbGUuaW4g
Yi9uYWNsL0dOVW1ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjQ2OTEyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9uYWNsL0dOVW1ha2VmaWxlLmluCkBAIC0wLDAg
KzEsNjAgQEAKKyMgQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyMgQXV0aG9yOiB5dWd1aUBnb29nbGUuY29tIChZdWd1aSBTb25vZGEpCisKK2luY2x1ZGUg
TWFrZWZpbGUKKy1pbmNsdWRlIHVuY29tbW9uLm1rCisKK05BQ0xfU0RLX1JPT1Q9QE5BQ0xfU0RL
X1JPT1RACitOQUNMX1RPT0xDSEFJTj1ATkFDTF9UT09MQ0hBSU5ACitOQUNMX1RPT0xDSEFJTl9E
SVI9JChOQUNMX1NES19ST09UKS90b29sY2hhaW4vJChOQUNMX1RPT0xDSEFJTikKK1BBVEgrPTok
KE5BQ0xfVE9PTENIQUlOX0RJUikvYmluCitQWVRIT049QFBZVEhPTkAKKworUFBST0dSQU09cGVw
cGVyLSQoUFJPR1JBTSkKK1BFUFBFUl9MSUJTPS1scHBhcGkKK1BST0dSQU1fTk1GPSQoUFJPR1JB
TToubmV4ZT0ubm1mKQorUFBST0dSQU1fTk1GPSQoUFBST0dSQU06Lm5leGU9Lm5tZikKKworR05V
bWFrZWZpbGU6ICQoc3JjZGlyKS9uYWNsL0dOVW1ha2VmaWxlLmluCiskKFBQUk9HUkFNKTogJChQ
Uk9HUkFNKSBwZXBwZXJfbWFpbi4kKE9CSkVYVCkKKwkkKFEpJChNQUtFKSAkKE1GTEFHUykgUFJP
R1JBTT0kKFBQUk9HUkFNKSBNQUlOT0JKPSJwZXBwZXJfbWFpbi4kKE9CSkVYVCkiIExJQlM9IiQo
TElCUykgJChQRVBQRVJfTElCUykiIHByb2dyYW0KKyQoUFJPR1JBTV9OTUYpICQoUFBST0dSQU1f
Tk1GKTogJChAOi5ubWY9Lm5leGUpIG5hY2wvY3JlYXRlX25tZi5yYgorCisuUEhPTlk6IHBwcm9n
cmFtIHBhY2thZ2Ugc2hvd19uYWNsZmxhZ3MKKy5TVUZGSVhFUzogLm5leGUgLm5tZgorLm5leGUu
bm1mOgorCSQoRUNITykgZ2VuZXJhdGluZyBtYW5pZmVzdCAkQAorCSQoUSkkKEJBU0VSVUJZKSAt
SS4gLXIkKGFyY2gpLWZha2UgJChzcmNkaXIpL25hY2wvY3JlYXRlX25tZi5yYiAtLXZlcmJvc2U9
JChWKSAkKEA6Lm5tZj0ubmV4ZSkgJEAKKworcGVwcGVyX21haW4uJChPQkpFWFQpOiAkKHNyY2Rp
cikvbmFjbC9wZXBwZXJfbWFpbi5jCisJQCQoRUNITykgY29tcGlsaW5nIG5hY2wvcGVwcGVyX21h
aW4uYworCSQoUSkgJChDQykgJChDRkxBR1MpICQoWENGTEFHUykgJChDUFBGTEFHUykgJChDT1VU
RkxBRykkQCAtYyAkKHNyY2RpcikvbmFjbC9wZXBwZXJfbWFpbi5jCitydWJ5LiQoT0JKRVhUKToK
KwlAJChFQ0hPKSBjb21waWxpbmcgJDwKKwkkKFEpICQoQ0MpICQoQ0ZMQUdTKSAkKFhDRkxBR1Mp
ICQoQ1BQRkxBR1MpICQoQ09VVEZMQUcpJEAudG1wIC1jICQ8CisJJChRKSAkKE9CSkNPUFkpIC0t
d2Vha2VuLXN5bWJvbD1yYl9sb2FkX2ZpbGUgJEAudG1wICRACisJQC0kKFJNKSAkQC50bXAKK2Zp
bGUuJChPQkpFWFQpOgorCUAkKEVDSE8pIGNvbXBpbGluZyAkPAorCSQoUSkgJChDQykgJChDRkxB
R1MpICQoWENGTEFHUykgJChDUFBGTEFHUykgJChDT1VURkxBRykkQC50bXAgLWMgJDwKKwkkKFEp
ICQoT0JKQ09QWSkgLS13ZWFrZW4tc3ltYm9sPXJiX2ZpbGVfbG9hZF9vayAkQC50bXAgJEAKKwlA
LSQoUk0pICRALnRtcAorCithbGw6IHBwcm9ncmFtCittYWluOiAkKFBST0dSQU1fTk1GKQorcHBy
b2dyYW06IHNob3dmbGFncyAkKFBQUk9HUkFNKSAkKFBQUk9HUkFNX05NRikKK3Byb2dyYW06ICQo
UFJPR1JBTV9OTUYpCitwcm9nOiBwcHJvZ3JhbQorCitwYWNrYWdlOiBwcHJvZ3JhbSBpbnN0YWxs
LWxpYiBpbnN0YWxsLWV4dC1jb21tIGluc3RhbGwtZXh0LWFyY2gKKwkkKEVDSE8pIGdlbmVyYXRp
bmcgbWFuaWZlc3QgJEAKKwkkKFEpJChCQVNFUlVCWSkgLUkuIC1yJChhcmNoKS1mYWtlICQoc3Jj
ZGlyKS9uYWNsL3BhY2thZ2UucmIgJChwcmVmaXgpCisKK3Nob3dmbGFnczogc2hvd19uYWNsZmxh
Z3MKKworc2hvd19uYWNsZmxhZ3M6CisJQGVjaG8gIiAgICAgIFBBVEggPSAkKFBBVEgpIgorCUBl
Y2hvICIgICAgICBOQUNMX1NES19ST09UID0gJChOQUNMX1NES19ST09UKSIKKworY2xlYW4tbG9j
YWw6OgorCS0kKFJNKSAkKFBQUk9HUkFNKSBwZXBwZXJfbWFpbi4kKE9CSkVYVCkgJChQUk9HUkFN
X05NRikgJChQUFJHT1JBTV9OTUYpCmRpZmYgLS1naXQgYS9uYWNsL1JFQURNRS5uYWNsIGIvbmFj
bC9SRUFETUUubmFjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAxY2Qz
Ci0tLSAvZGV2L251bGwKKysrIGIvbmFjbC9SRUFETUUubmFjbApAQCAtMCwwICsxLDI2IEBACis9
YmVnaW4KKz0gTmF0aXZlIENsaWVudCBwb3J0IG9mIFJ1YnkKKworPSBIb3cgdG8gYnVpbGQKKz09
IFByZXJlcXVpc2l0ZXMKK1lvdSBuZWVkIHRvIGluc3RhbGwgdGhlIGZvbGxvd2luZyB0aGluZ3Mg
YmVmb3JlIGJ1aWxkaW5nIE5hQ2wgcG9ydCBvZiBSdWJ5LgorKiBSdWJ5IDEuOS4zIG9yIGxhdGVy
CisqIFB5dGhvbiAyLjYgb3IgbGF0ZXIKKyogTmF0aXZlQ2xpZW50IFNESyBwZXBwZXIgMTggb3Ig
bGF0ZXIKKyogR05VIG1ha2UKKworPT0gU3RlcHMKKygxKSBFeHRyYWN0IGFsbCBmaWxlcyBmcm9t
IHRoZSB0YXJiYWxsOgorICAgICAkIHRhciB4emYgcnVieS1YLlkuWi50YXIuZ3oKKygyKSBTZXQg
TkFDTF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YWlyYW5ibGUgdG8gdGhlIHBhdGggdG8gdGhlIE5h
dGl2ZSBDbGllbnQgU0RLIHlvdSBpbnN0YWxsZWQ6CisgICAgICQgZXhwb3J0IE5BQ0xfU0RLX1JP
T1Q9L2hvbWUveXVndWkvc3JjL25hY2xfc2RrL3BlcHBlcl8xNgorKDMpIENvbmZpZ3VyZQorICAg
ICAkIC4vY29uZmlndXJlIC0tcHJlZml4PS90bXAvbmFjbC1ydWJ5IC0taG9zdD14ODZfNjQtbmFj
bCAtLXdpdGgtYmFzZXJ1Ynk9L3BhdGgvdG8vcnVieS0xLjkuMworKDQpIE1ha2UKKyAgICAgJCBt
YWtlCisgICAgICQgbWFrZSBwYWNrYWdlCisKKz0gQ29weXJpZ2h0CisqIENvcHlyaWdodCAyMDEy
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIEF1dGhvcjogeXVndWlAZ29vZ2xl
LmNvbSAoWXVndWkgU29ub2RhKQorPWVuZApkaWZmIC0tZ2l0IGEvbmFjbC9jcmVhdGVfbm1mLnJi
IGIvbmFjbC9jcmVhdGVfbm1mLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNkZmU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9uYWNsL2NyZWF0ZV9ubWYucmIKQEAgLTAsMCAr
MSw3MCBAQAorIyEvdXNyL2Jpbi9ydWJ5CisjIENvcHlyaWdodDo6IENvcHlyaWdodCAyMDEyIEdv
b2dsZSBJbmMuCisjIExpY2Vuc2U6OiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBPcmlnaW5hbCBB
dXRob3I6OiBZdWd1aSBTb25vZGEgKG1haWx0bzp5dWd1aUBnb29nbGUuY29tKQorIworIyBXcmFw
cGVyIGZvciBjcmVhdGVfbm1mLnB5IC8gZ2VuZXJhdGVfbm1mLnB5CisKK3JlcXVpcmUgRmlsZS5q
b2luKEZpbGUuZGlybmFtZShfX0ZJTEVfXyksICduYWNsLWNvbmZpZycpCisKK2luY2x1ZGUgTmFD
bENvbmZpZworJHZlcmJvc2l0eSA9IDAKKworZGVmIHVzYWdlX2FuZF9leGl0CisgICRzdGRlcnIu
cHV0cyAiVXNhZ2U6ICN7JFBST0dSQU1fTkFNRX0gWy0tdmVyYm9zZT1OXSBwYXRoL3RvL2lucHV0
Lm5leGUgcGF0aC90by9vdXRwdXQubm1mIgorICBleGl0IGZhbHNlCitlbmQKKworZGVmIGNyZWF0
ZV9keW5hbWljYWxseV9saW5rZWQobm1mLCBleGUpCisgIGNtZCA9IFsKKyAgICBQWVRIT04sIENS
RUFURV9OTUYsCisgICAgJy1vJywgbm1mLAorICAgICctRCcsIE9CSkRVTVAsCisgICAgJy1MJywg
SE9TVF9MSUIsCisgICAgZXhlCisgIF0KKyAgcHV0cyBjbWQuam9pbignICcpIGlmICR2ZXJib3Np
dHkgPiAwCisgIGV4ZWMoKmNtZCkKK2VuZAorCitkZWYgY3JlYXRlX3N0YXRpY2FsbHlfbGlua2Vk
KG5tZiwgZXhlKQorICBGaWxlLm9wZW4obm1mLCAidyIpIHt8ZnwKKyAgICBmLndyaXRlIDw8LUVP
Uy5nc3ViKC9eIHs2fS8sICcnKQorICAgICAgeworICAgICAgICAicHJvZ3JhbSI6IHsKKyAgICAg
ICAgICAiI3tBUkNIfSI6IHsKKyAgICAgICAgICAgICJ1cmwiOiAiI3tleGV9IgorICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgIEVPUworICB9CitlbmQKKworZGVmIG1haW4KKyAg
d2hpbGUgbSA9IEFSR1YuZmlyc3QubWF0Y2goLy0tKFthLXotXSspKD86PShcUyspKT8vKQorICAg
IGNhc2UgbVsxXQorICAgIHdoZW4gJ3ZlcmJvc2UnCisgICAgICB1c2FnZV9hbmRfZXhpdCB1bmxl
c3MgbVsyXVsvXEFbMC05XStcei9dCisgICAgICAkdmVyYm9zaXR5ID0gbVsyXS50b19pCisgICAg
d2hlbiAnaGVscCcKKyAgICAgIHVzYWdlX2VuZF9leGl0CisgICAgZW5kCisgICAgQVJHVi5zaGlm
dAorICBlbmQKKworICB1c2FnZV9hbmRfZXhpdCBpZiBBUkdWLnNpemUgPCAyCisKKyAgZXhlLCBu
bWYgPSBBUkdWWzBdLCBBUkdWWzFdCisgIGlmIG5ld2xpYj8KKyAgICBjcmVhdGVfc3RhdGljYWxs
eV9saW5rZWQobm1mLCBleGUpCisgIGVsc2UKKyAgICBjcmVhdGVfZHluYW1pY2FsbHlfbGlua2Vk
KG5tZiwgZXhlKQorICBlbmQKK2VuZAorCitpZiBfX0ZJTEVfXyA9PSAkMAorICAgbWFpbigpCitl
bmQKKworCmRpZmYgLS1naXQgYS9uYWNsL2RpcmVudC5oIGIvbmFjbC9kaXJlbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWJkYWQzCi0tLSAvZGV2L251bGwKKysrIGIv
bmFjbC9kaXJlbnQuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF1dGhvcjogeXVndWlAZ29vZ2xlLmNv
bSAoWXVndWkgU29ub2RhKQorICovCisjaWZuZGVmIFJVQllfTkFDTF9ESVJFTlRfSAorI2RlZmlu
ZSBSVUJZX05BQ0xfRElSRU5UX0gKKworLyogTmFDbCBTREsgMC4zIGhhcyBpbXBsZW1lbnRhdGlv
bnMgb2YgZGlyIGZ1bmN0aW9ucyBidXQgbm8gZGVjbGFyYXRpb24gaW4KKyAqIGRpcmVudC5oICov
CitpbnQgcmVhZGRpcl9yKERJUiAqZGlycCwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBk
aXJlbnQgKipyZXN1bHQpOwordm9pZCByZXdpbmRkaXIoRElSICpkaXJwKTsKK2xvbmcgdGVsbGRp
cihESVIgKmRpcnApOwordm9pZCBzZWVrZGlyKERJUiAqZGlycCwgbG9uZyBvZmZzZXQpOworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL25hY2wvZXhhbXBsZS5odG1sIGIvbmFjbC9leGFtcGxlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjMzMyOQotLS0gL2Rldi9udWxs
CisrKyBiL25hY2wvZXhhbXBsZS5odG1sCkBAIC0wLDAgKzEsMTUwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5SdWJ5IEV4YW1wbGU8L3RpdGxlPgorCisgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBSdWJ5TW9kdWxlID0gbnVsbDsgIC8v
IEdsb2JhbCBhcHBsaWNhdGlvbiBvYmplY3QuCisgICAgc3RhdHVzVGV4dCA9ICdOTy1TVEFUVVMn
OworICAgIHJ1YnlSZWFkeSA9IGZhbHNlOworCisgICAgLy8gSW5kaWNhdGUgbG9hZCBzdWNjZXNz
LgorICAgIGZ1bmN0aW9uIG1vZHVsZURpZExvYWQoKSB7CisgICAgICBSdWJ5TW9kdWxlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J1YnknKTsKKyAgICAgIGZvcm0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnc291cmNlLWZvcm0nKTsKKyAgICAgIGZvcm0uc3R5bGUuZGlzcGxheSA9ICJi
bG9jayI7CisgICAgICB1cGRhdGVTdGF0dXMoJ1NVQ0NFU1MnKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBldmFsU291cmNlKCkgeworICAgICAgaWYgKHJ1YnlSZWFkeSkgeworICAgICAgICBSdWJ5
TW9kdWxlLnBvc3RNZXNzYWdlKCdldmFsOicgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic291
cmNlIikudmFsdWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgIk5vdCB5ZXQgcmVh
ZHkiOworICAgICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IFJ1YnlFcnJvcihtZXNzYWdlKSB7CisgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAg
ICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBGYXRhbEVycm9yKG1lc3NhZ2UpIHsKKyAg
ICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQorCisgICAgLy8gVGhlICdtZXNzYWdl
JyBldmVudCBoYW5kbGVyLiAgVGhpcyBoYW5kbGVyIGlzIGZpcmVkIHdoZW4gdGhlIE5hQ2wgbW9k
dWxlCisgICAgLy8gcG9zdHMgYSBtZXNzYWdlIHRvIHRoZSBicm93c2VyIGJ5IGNhbGxpbmcgUFBC
X01lc3NhZ2luZy5Qb3N0TWVzc2FnZSgpCisgICAgLy8gKGluIEMpIG9yIHBwOjpJbnN0YW5jZS5Q
b3N0TWVzc2FnZSgpIChpbiBDKyspLiAgVGhpcyBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHNpbXBs
eSBkaXNwbGF5cyB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSBpbiBhbiBhbGVydCBwYW5lbC4K
KyAgICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKG1lc3NhZ2VfZXZlbnQpIHsKKyAgICAgIHZhciBy
YXcgPSBtZXNzYWdlX2V2ZW50LmRhdGE7CisgICAgICB2YXIgY29tcG9uZW50czsKKyAgICAgIGlm
IChyYXcuaW5kZXhPZigiZXJyb3IiKSA9PSAwKSB7CisgICAgICAgIGNvbXBvbmVudHMgPSByYXcu
c3BsaXQoIjoiLCAyKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1YnlFcnJvcihjb21wb25lbnRzWzFd
KTsKKyAgICAgIH0gZWxzZSBpZiAocmF3LmluZGV4T2YoInJldHVybiIpID09IDApIHsKKyAgICAg
ICAgY29tcG9uZW50cyA9IHJhdy5zcGxpdCgiOiIsIDIpOworICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVzdWx0IikudmFsdWUgPSBjb21wb25lbnRzWzFdOworICAgICAgfSBlbHNl
IGlmIChyYXcgPT0gInJ1YnlSZWFkeSIpIHsKKyAgICAgICAgcnVieVJlYWR5ID0gdHJ1ZTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBGYXRhbEVycm9yKHJhdyk7CisgICAgICB9
CisgICAgfQorCisgICAgLy8gSWYgdGhlIHBhZ2UgbG9hZHMgYmVmb3JlIHRoZSBOYXRpdmUgQ2xp
ZW50IG1vZHVsZSBsb2FkcywgdGhlbiBzZXQgdGhlCisgICAgLy8gc3RhdHVzIG1lc3NhZ2UgaW5k
aWNhdGluZyB0aGF0IHRoZSBtb2R1bGUgaXMgc3RpbGwgbG9hZGluZy4gIE90aGVyd2lzZSwKKyAg
ICAvLyBkbyBub3QgY2hhbmdlIHRoZSBzdGF0dXMgbWVzc2FnZS4KKyAgICBmdW5jdGlvbiBwYWdl
RGlkTG9hZCgpIHsKKyAgICAgIGlmIChSdWJ5TW9kdWxlID09IG51bGwpIHsKKyAgICAgICAgdXBk
YXRlU3RhdHVzKCdMT0FESU5HLi4uJyk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBJdCdz
IHBvc3NpYmxlIHRoYXQgdGhlIE5hdGl2ZSBDbGllbnQgbW9kdWxlIG9ubG9hZCBldmVudCBmaXJl
ZAorICAgICAgICAvLyBiZWZvcmUgdGhlIHBhZ2UncyBvbmxvYWQgZXZlbnQuICBJbiB0aGlzIGNh
c2UsIHRoZSBzdGF0dXMgbWVzc2FnZQorICAgICAgICAvLyB3aWxsIHJlZmxlY3QgJ1NVQ0NFU1Mn
LCBidXQgd29uJ3QgYmUgZGlzcGxheWVkLiAgVGhpcyBjYWxsIHdpbGwKKyAgICAgICAgLy8gZGlz
cGxheSB0aGUgY3VycmVudCBtZXNzYWdlLgorICAgICAgICB1cGRhdGVTdGF0dXMoKTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGdsb2JhbCBzdGF0dXMgbWVzc2FnZS4gIElmIHRo
ZSBlbGVtZW50IHdpdGggaWQgJ3N0YXR1c0ZpZWxkJworICAgIC8vIGV4aXN0cywgdGhlbiBzZXQg
aXRzIEhUTUwgdG8gdGhlIHN0YXR1cyBtZXNzYWdlIGFzIHdlbGwuCisgICAgLy8gb3B0X21lc3Nh
Z2UgVGhlIG1lc3NhZ2UgdGVzdC4gIElmIHRoaXMgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4K
KyAgICAvLyBhdHRlbXB0IHRvIHNldCB0aGUgZWxlbWVudCB3aXRoIGlkICdzdGF0dXNGaWVsZCcg
dG8gdGhlIHZhbHVlIG9mCisgICAgLy8gfHN0YXR1c1RleHR8LgorICAgIGZ1bmN0aW9uIHVwZGF0
ZVN0YXR1cyhvcHRfbWVzc2FnZSkgeworICAgICAgaWYgKG9wdF9tZXNzYWdlKQorICAgICAgICBz
dGF0dXNUZXh0ID0gb3B0X21lc3NhZ2U7CisgICAgICB2YXIgc3RhdHVzRmllbGQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnc3RhdHVzX2ZpZWxkJyk7CisgICAgICBpZiAoc3RhdHVzRmllbGQp
IHsKKyAgICAgICAgc3RhdHVzRmllbGQuaW5uZXJIVE1MID0gc3RhdHVzVGV4dDsKKyAgICAgIH0K
KyAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJwYWdlRGlkTG9hZCgp
Ij4KKworPGgxPk5hdGl2ZSBDbGllbnQgTW9kdWxlIFJ1Ynk8L2gxPgorPHA+CisgIDwhLS0gTG9h
ZCB0aGUgcHVibGlzaGVkIC5uZXhlLiAgVGhpcyBpbmNsdWRlcyB0aGUgJ25hY2wnIGF0dHJpYnV0
ZSB3aGljaAorICBzaG93cyBob3cgdG8gbG9hZCBtdWx0aS1hcmNoaXRlY3R1cmUgbW9kdWxlcy4g
IEVhY2ggZW50cnkgaW4gdGhlICJuZXhlcyIKKyAgb2JqZWN0IGluIHRoZSAubm1mIG1hbmlmZXN0
IGZpbGUgaXMgYSBrZXktdmFsdWUgcGFpcjogdGhlIGtleSBpcyB0aGUKKyAgaW5zdHJ1Y3Rpb24g
c2V0IGFyY2hpdGVjdHVyZSAoJ3g4Ni0zMicsICd4ODYtNjQnLCBldGMuKTsgdGhlIHZhbHVlIGlz
IGEgVVJMCisgIGZvciB0aGUgZGVzaXJlZCBOYUNsIG1vZHVsZS4KKyAgVG8gbG9hZCB0aGUgZGVi
dWcgdmVyc2lvbnMgb2YgeW91ciAubmV4ZXMsIHNldCB0aGUgJ25hY2wnIGF0dHJpYnV0ZSB0byB0
aGUKKyAgX2RiZy5ubWYgdmVyc2lvbiBvZiB0aGUgbWFuaWZlc3QgZmlsZS4KKworICBOb3RlOiBT
aW5jZSB0aGlzIE5hQ2wgbW9kdWxlIGRvZXMgbm90IHVzZSBhbnkgcmVhbC1lc3RhdGUgaW4gdGhl
IGJyb3dzZXIsCisgIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhcmUgc2V0IHRvIDAuCisKKyAgTm90
ZTogVGhlIDxFTUJFRD4gZWxlbWVudCBpcyB3cmFwcGVkIGluc2lkZSBhIDxESVY+LCB3aGljaCBo
YXMgYm90aCBhICdsb2FkJworICBhbmQgYSAnbWVzc2FnZScgZXZlbnQgbGlzdGVuZXIgYXR0YWNo
ZWQuICBUaGlzIHdyYXBwaW5nIG1ldGhvZCBpcyB1c2VkCisgIGluc3RlYWQgb2YgYXR0YWNoaW5n
IHRoZSBldmVudCBsaXN0ZW5lcnMgZGlyZWN0bHkgdG8gdGhlIDxFTUJFRD4gZWxlbWVudCB0bwor
ICBlbnN1cmUgdGhhdCB0aGUgbGlzdGVuZXJzIGFyZSBhY3RpdmUgYmVmb3JlIHRoZSBOYUNsIG1v
ZHVsZSAnbG9hZCcgZXZlbnQKKyAgZmlyZXMuICBUaGlzIGFsc28gYWxsb3dzIHlvdSB0byB1c2Ug
UFBCX01lc3NhZ2luZy5Qb3N0TWVzc2FnZSgpIChpbiBDKSBvcgorICBwcDo6SW5zdGFuY2UuUG9z
dE1lc3NhZ2UoKSAoaW4gQysrKSBmcm9tIHdpdGhpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBp
bgorICB5b3VyIE5hQ2wgbW9kdWxlLgorICAtLT4KKyAgPGRpdiBpZD0ibGlzdGVuZXIiPgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgIHZhciBsaXN0ZW5lciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaXN0ZW5lcicpOworICAgICAgbGlzdGVuZXIuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsIG1vZHVsZURpZExvYWQsIHRydWUpOworICAgICAgbGlzdGVuZXIu
YWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZU1lc3NhZ2UsIHRydWUpOworICAgIDwv
c2NyaXB0PgorCisgICAgPGVtYmVkIG5hbWU9Im5hY2xfbW9kdWxlIgorICAgICAgIGlkPSJydWJ5
IgorICAgICAgIHdpZHRoPSIwIiBoZWlnaHQ9IjAiCisgICAgICAgc3JjPSJydWJ5Lm5tZiIKKyAg
ICAgICB0eXBlPSJhcHBsaWNhdGlvbi94LW5hY2wiIC8+CisgICAgPGZvcm0gaWQ9InNvdXJjZS1m
b3JtIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6bm9uZSIKKyAgICAg
IG9uc3VibWl0PSJldmFsU291cmNlKCk7IHJldHVybiBmYWxzZSI+CisgICAgICA8dGFibGU+Cisg
ICAgICAgIDx0Ym9keT4KKyAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+U291cmNlPC90
aD4KKyAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9IjEwIiBj
b2xzPSI4MCIgaWQ9InNvdXJjZSI+PC90ZXh0YXJlYT4KKyAgICAgICAgICAgICAgPGlucHV0IHR5
cGU9InN1Ym1pdCIgLz4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAg
ICAgICA8dHI+CisgICAgICAgICAgICA8dGg+UmVzdWx0PC90aD4KKyAgICAgICAgICAgIDx0ZD4K
KyAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9IjEwIiBjb2xzPSI4MCIgaWQ9InJlc3VsdCI+
PC90ZXh0YXJlYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPC90cj4KKyAgICAgICAg
PC90Ym9keT4KKyAgICAgIDwvdGFibGU+CisgICAgPC9mb3JtPgorICA8L2Rpdj4KKzwvcD4KKwor
PGgyPlN0YXR1czwvaDI+Cis8ZGl2IGlkPSJzdGF0dXNfZmllbGQiPk5PLVNUQVRVUzwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbmFjbC9pb2N0bC5oIGIvbmFjbC9pb2N0bC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMThlZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9uYWNsL2lvY3RsLmgKQEAgLTAsMCArMSw3IEBACisvLyBDb3B5cmlnaHQgMjAxMiBH
b29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQXV0aG9yOiB5dWd1aUBnb29nbGUu
Y29tIChZdWd1aSBTb25vZGEpCisjaWZuZGVmIFJVQllfTkFDTF9JT0NUTF9ICisjZGVmaW5lIFJV
QllfTkFDTF9JT0NUTF9ICitpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCwgLi4uKTsKK3N0
cnVjdCBmbG9ja3t9OworI2VuZGlmCmRpZmYgLS1naXQgYS9uYWNsL25hY2wtY29uZmlnLnJiIGIv
bmFjbC9uYWNsLWNvbmZpZy5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
MzE2MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmFjbC9uYWNsLWNvbmZpZy5yYgpAQCAtMCwwICsx
LDMyIEBACisjIS91c3IvYmluL3J1YnkKKyMKKyMgQ29weXJpZ2h0OjogQ29weXJpZ2h0IDIwMTIg
R29vZ2xlIEluYy4KKyMgTGljZW5zZTo6IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIE9yaWdpbmFs
IEF1dGhvcjo6IFl1Z3VpIFNvbm9kYSAobWFpbHRvOnl1Z3VpQGdvb2dsZS5jb20pCisjCisjIENv
bnZlbmllbnQgZnVuY3Rpb25zL2NvbnN0YW50cyBmb3IgbmF0aXZlIGNsaWVudCBzcGVjaWZpYyBj
b25maWd1cmF0aW9ucy4KK3JlcXVpcmUgJ3JiY29uZmlnJworCittb2R1bGUgTmFDbENvbmZpZwor
ICBjb25maWcgPSBSYkNvbmZpZzo6Q09ORklHCisKKyAgQVJDSCA9IGNvbmZpZ1snaG9zdF9hbGlh
cyddLnN1YigvLWdudSR8LW5ld2xpYiQvLCAnJykuc3ViKC8tbmFjbCQvLCAnJykuCisgICAgc3Vi
KCd4ODZfNjQnLCAneDg2LTY0Jykuc3ViKC9pLjg2LywgJ3g4Ni0zMicpCisgIEhPU1QgPSBBUkNI
LnN1YigveDg2LS4uLywgJ3g4Nl82NCcpICsgJy1uYWNsJworCisgIGxpYl9zdWZmaXggPSBjb25m
aWdbJ2hvc3RfY3B1J11bL2kuODYvXSA/ICczMicgOiAnJworICBQWVRIT04gPSBjb25maWdbJ1BZ
VEhPTiddCisgIE9CSkRVTVAgPSBjb25maWdbJ09CSkRVTVAnXQorICBDUkVBVEVfTk1GID0gWwor
ICAgIEZpbGUuam9pbihjb25maWdbJ05BQ0xfU0RLX1JPT1QnXSwgJ2J1aWxkX3Rvb2xzJywgJ25h
Y2xfc2RrX3Njb25zJywgJ3NpdGVfdG9vbHMnLCAnY3JlYXRlX25tZi5weScpLAorICAgIEZpbGUu
am9pbihjb25maWdbJ05BQ0xfU0RLX1JPT1QnXSwgJ3Rvb2xzJywgJ2NyZWF0ZV9ubWYucHknKQor
ICBdLmZpbmR7fHBhdGh8IEZpbGUuZXhpc3Q/KHBhdGgpIH0KKyAgSE9TVF9MSUIgPSBGaWxlLmpv
aW4oY29uZmlnWydOQUNMX1NES19ST09UJ10sICd0b29sY2hhaW4nLCBjb25maWdbJ05BQ0xfVE9P
TENIQUlOJ10sIEhPU1QsICJsaWIje2xpYl9zdWZmaXh9IikKKworICBJTlNUQUxMX1BST0dSQU0g
PSBjb25maWdbJ0lOU1RBTExfUFJPR1JBTSddCisgIElOU1RBTExfTElCUkFSWSA9IGNvbmZpZ1sn
SU5TVEFMTF9EQVRBJ10KKworICBkZWYgbmV3bGliPworICAgIFJiQ29uZmlnOjpDT05GSUdbJ05B
Q0xfU0RLX1ZBUklBTlQnXSA9PSAnbmV3bGliJworICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvbmFj
bC9wYWNrYWdlLnJiIGIvbmFjbC9wYWNrYWdlLnJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY0ZjUwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9uYWNsL3BhY2thZ2UucmIKQEAg
LTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vcnVieQorIyBDb3B5cmlnaHQ6OiBDb3B5cmlnaHQg
MjAxMiBHb29nbGUgSW5jLgorIyBMaWNlbnNlOjogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgT3Jp
Z2luYWwgQXV0aG9yOjogWXVndWkgU29ub2RhIChtYWlsdG86eXVndWlAZ29vZ2xlLmNvbSkKKyMK
KyMgR2VuZXJhdGVzIGEgcnVubmFibGUgcGFja2FnZSBvZiB0aGUgcGVwcGVyIEFQSSBleGFtcGxl
LgorCityZXF1aXJlIEZpbGUuam9pbihGaWxlLmRpcm5hbWUoX19GSUxFX18pLCAnbmFjbC1jb25m
aWcnKQorcmVxdWlyZSAnanNvbicKK3JlcXVpcmUgJ2ZpbmQnCityZXF1aXJlICdmaWxldXRpbHMn
CisKK2luY2x1ZGUgTmFDbENvbmZpZworCitjbGFzcyBJbnN0YWxsYXRpb24KKyAgaW5jbHVkZSBO
YUNsQ29uZmlnCisKKyAgU1JDX0RJUlMgPSBbIERpci5wd2QsIEhPU1RfTElCIF0KKworICBkZWYg
aW5pdGlhbGl6ZShkZXN0ZGlyKQorICAgIEBkZXN0ZGlyID0gZGVzdGRpcgorICAgIEBtYW5pZmVz
dCA9IHsKKyAgICAgICJmaWxlcyIgPT4ge30KKyAgICB9CisgICAgcnVieV9saWJzLmVhY2ggZG8g
fHBhdGh8CisgICAgICByYWlzZSAiQ29sbGlzaW9uIG9mICN7cGF0aH0iIGlmIEBtYW5pZmVzdFsn
ZmlsZXMnXS5rZXk/IHBhdGgKKyAgICAgIEBtYW5pZmVzdFsnZmlsZXMnXVtwYXRoXSA9IHsKKyAg
ICAgICAgQVJDSCA9PiB7CisgICAgICAgICAgInVybCIgPT4gcGF0aAorICAgICAgICB9CisgICAg
ICB9CisgICAgICBpZiBwYXRoWy9cLnNvJC9dCisgICAgICAgIGFsdGVybmF0ZV9wYXRoID0gcGF0
aC5nc3ViKCcvJywgIl8iKQorICAgICAgICByYWlzZSAiQ29sbGlzaW9uIG9mICN7YWx0ZXJuYXRl
X3BhdGh9IiBpZiBAbWFuaWZlc3RbJ2ZpbGVzJ10ua2V5PyBhbHRlcm5hdGVfcGF0aAorICAgICAg
ICBAbWFuaWZlc3RbJ2ZpbGVzJ11bYWx0ZXJuYXRlX3BhdGhdID0geworICAgICAgICAgIEFSQ0gg
PT4geworICAgICAgICAgICAgInVybCIgPT4gcGF0aAorICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgZW5kCisgICAgZW5kCisgIGVuZAorCisgIGRlZiBtYW5pZmVzdAorICAgIEBtYW5pZmVz
dC5kdXAKKyAgZW5kCisKKyAgZGVmIGluc3RhbGxfcHJvZ3JhbShiYXNlbmFtZSkKKyAgICBkb19p
bnN0YWxsX2JpbmFyeShiYXNlbmFtZSwgRmlsZS5qb2luKEBkZXN0ZGlyLCAiYmluIiwgQVJDSCkp
CisgICAgQG1hbmlmZXN0WyJwcm9ncmFtIl0gPSB7CisgICAgICBBUkNIID0+IHsKKyAgICAgICAg
InVybCIgPT4gRmlsZS5qb2luKCJiaW4iLCBBUkNILCBiYXNlbmFtZSkKKyAgICAgIH0KKyAgICB9
CisgIGVuZAorCisgIGRlZiBpbnN0YWxsX2xpYnJhcnkobmFtZSwgYmFzZW5hbWUpCisgICAgZG9f
aW5zdGFsbF9iaW5hcnkoYmFzZW5hbWUsIEZpbGUuam9pbihAZGVzdGRpciwgImxpYiIsIEFSQ0gp
KQorICAgIEBtYW5pZmVzdFsiZmlsZXMiXVtuYW1lXSA9IHsKKyAgICAgIEFSQ0ggPT4geworICAg
ICAgICAidXJsIiA9PiBGaWxlLmpvaW4oImxpYiIsIEFSQ0gsIGJhc2VuYW1lKQorICAgICAgfQor
ICAgIH0KKyAgZW5kCisKKyAgcHJpdmF0ZQorICBkZWYgZG9faW5zdGFsbF9iaW5hcnkoYmFzZW5h
bWUsIGRlc3RfZGlyKQorICAgIGZ1bGxfcGF0aCA9IG5pbAorICAgIGNhdGNoKDpmb3VuZCkgewor
ICAgICAgU1JDX0RJUlMuZWFjaCBkbyB8cGF0aHwKKyAgICAgICAgZnVsbF9wYXRoID0gRmlsZS5q
b2luKHBhdGgsIGJhc2VuYW1lKQorICAgICAgICBpZiBGaWxlLmV4aXN0PyBmdWxsX3BhdGgKKyAg
ICAgICAgICB0aHJvdyA6Zm91bmQKKyAgICAgICAgZW5kCisgICAgICBlbmQKKyAgICAgIHJhaXNl
IEVycm5vOjpFTk9FTlQsICJObyBzdWNoIGZpbGUgdG8gaW5zdGFsbDogJXMiICUgYmFzZW5hbWUK
KyAgICB9CisgICAgRmlsZVV0aWxzLm1rZGlyX3AgZGVzdF9kaXIKKyAgICBzeXN0ZW0oIiN7SU5T
VEFMTF9QUk9HUkFNfSAje2Z1bGxfcGF0aH0gI3tkZXN0X2Rpcn0iKQorICBlbmQKKworICBkZWYg
cnVieV9saWJzCisgICAgRmluZC5maW5kKFJiQ29uZmlnOjpDT05GSUdbJ3J1YnlsaWJkaXInXSku
c2VsZWN0e3xwYXRofCBGaWxlLmZpbGU/KHBhdGgpIH0ubWFwe3xwYXRofCBwYXRoLnN1YigiI3tA
ZGVzdGRpcn0vIiwgIiIpIH0KKyAgZW5kCitlbmQKKworZGVmIGluc3RhbGwoZGVzdGRpcikKKyAg
aW5zdCA9IEluc3RhbGxhdGlvbi5uZXcoZGVzdGRpcikKKyAgbWFuaWZlc3QgPSBKU09OLnBhcnNl
KEZpbGUucmVhZCgicGVwcGVyLXJ1Ynkubm1mIikpCisKKyAgcHJvZ3JhbSA9IEZpbGUuYmFzZW5h
bWUobWFuaWZlc3RbJ3Byb2dyYW0nXVtBUkNIXVsndXJsJ10pCisgIGluc3QuaW5zdGFsbF9wcm9n
cmFtKHByb2dyYW0pCisKKyAgbWFuaWZlc3RbJ2ZpbGVzJ10uZWFjaCBkbyB8bmFtZSwgYXR0cnwK
KyAgICBpbnN0Lmluc3RhbGxfbGlicmFyeShuYW1lLCBGaWxlLmJhc2VuYW1lKGF0dHJbQVJDSF1b
InVybCJdKSkKKyAgZW5kCisKKyAgRmlsZS5vcGVuKEZpbGUuam9pbihkZXN0ZGlyLCAicnVieS5u
bWYiKSwgInciKSB7fGZ8CisgICAgZi5wdXRzIEpTT04ucHJldHR5X2dlbmVyYXRlKGluc3QubWFu
aWZlc3QpCisgIH0KK2VuZAorCitkZWYgbWFpbgorICBpbnN0YWxsKEFSR1ZbMF0pCitlbmQKKwor
aWYgX19GSUxFX18gPT0gJDAKKyAgbWFpbigpCitlbmQKZGlmZiAtLWdpdCBhL25hY2wvcGVwcGVy
X21haW4uYyBiL25hY2wvcGVwcGVyX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMDVhOTcyCi0tLSAvZGV2L251bGwKKysrIGIvbmFjbC9wZXBwZXJfbWFpbi5jCkBA
IC0wLDAgKzEsOTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgQ29weXJpZ2h0IDIwMTIg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyBBdXRob3I6IHl1Z3VpQGdvb2dsZS5j
b20gKFl1Z3VpIFNvbm9kYSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+
CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgInBwYXBpL2MvcHBfZXJyb3JzLmgiCisj
aW5jbHVkZSAicHBhcGkvYy9wcF9tb2R1bGUuaCIKKyNpbmNsdWRlICJwcGFwaS9jL3BwX3Zhci5o
IgorI2luY2x1ZGUgInBwYXBpL2MvcHBiLmgiCisjaW5jbHVkZSAicHBhcGkvYy9wcGJfY29yZS5o
IgorI2luY2x1ZGUgInBwYXBpL2MvcHBiX2ZpbGVfcmVmLmgiCisjaW5jbHVkZSAicHBhcGkvYy9w
cGJfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJwcGFwaS9jL3BwYl9tZXNzYWdpbmcuaCIKKyNpbmNs
dWRlICJwcGFwaS9jL3BwYl91cmxfbG9hZGVyLmgiCisjaW5jbHVkZSAicHBhcGkvYy9wcGJfdXJs
X3JlcXVlc3RfaW5mby5oIgorI2luY2x1ZGUgInBwYXBpL2MvcHBiX3VybF9yZXNwb25zZV9pbmZv
LmgiCisjaW5jbHVkZSAicHBhcGkvYy9wcGJfdmFyLmgiCisjaW5jbHVkZSAicHBhcGkvYy9wcHAu
aCIKKyNpbmNsdWRlICJwcGFwaS9jL3BwcF9pbnN0YW5jZS5oIgorI2luY2x1ZGUgInBwYXBpL2Mv
cHBwX21lc3NhZ2luZy5oIgorCisjaW5jbHVkZSAicnVieS9ydWJ5LmgiCisjaW5jbHVkZSAidm1f
Y29yZS5oIgorI2luY2x1ZGUgImV2YWxfaW50ZXJuLmgiCisjaW5jbHVkZSAiZ2MuaCIKKyNpbmNs
dWRlICJub2RlLmgiCisKK1JVQllfR0xPQkFMX1NFVFVQCisKKyNpZmRlZiBIQVZFX1NUUlVDVF9Q
UEJfQ09SRQordHlwZWRlZiBzdHJ1Y3QgUFBCX0NvcmUgUFBCX0NvcmU7CisjZW5kaWYKKyNpZmRl
ZiBIQVZFX1NUUlVDVF9QUEJfTUVTU0FHSU5HCit0eXBlZGVmIHN0cnVjdCBQUEJfTWVzc2FnaW5n
IFBQQl9NZXNzYWdpbmc7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUlVDVF9QUEJfVkFSCit0eXBl
ZGVmIHN0cnVjdCBQUEJfVmFyIFBQQl9WYXI7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUlVDVF9Q
UEJfVVJMTE9BREVSCit0eXBlZGVmIHN0cnVjdCBQUEJfVVJMTG9hZGVyIFBQQl9VUkxMb2FkZXI7
CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUlVDVF9QUEJfVVJMUkVRVUVTVElORk8KK3R5cGVkZWYg
c3RydWN0IFBQQl9VUkxSZXF1ZXN0SW5mbyBQUEJfVVJMUmVxdWVzdEluZm87CisjZW5kaWYKKyNp
ZmRlZiBIQVZFX1NUUlVDVF9QUEJfVVJMUkVTUE9OU0VJTkZPCit0eXBlZGVmIHN0cnVjdCBQUEJf
VVJMUmVzcG9uc2VJbmZvIFBQQl9VUkxSZXNwb25zZUluZm87CisjZW5kaWYKKyNpZmRlZiBIQVZF
X1NUUlVDVF9QUFBfSU5TVEFOQ0UKK3R5cGVkZWYgc3RydWN0IFBQUF9JbnN0YW5jZSBQUFBfSW5z
dGFuY2U7CisjZW5kaWYKKworc3RhdGljIFBQX01vZHVsZSBtb2R1bGVfaWQgPSAwOworc3RhdGlj
IFBQQl9Db3JlKiBjb3JlX2ludGVyZmFjZSA9IE5VTEw7CitzdGF0aWMgUFBCX01lc3NhZ2luZyog
bWVzc2FnaW5nX2ludGVyZmFjZSA9IE5VTEw7CitzdGF0aWMgUFBCX1ZhciogdmFyX2ludGVyZmFj
ZSA9IE5VTEw7CitzdGF0aWMgUFBCX1VSTExvYWRlciogbG9hZGVyX2ludGVyZmFjZSA9IE5VTEw7
CitzdGF0aWMgUFBCX1VSTFJlcXVlc3RJbmZvKiByZXF1ZXN0X2ludGVyZmFjZSA9IE5VTEw7Citz
dGF0aWMgUFBCX1VSTFJlc3BvbnNlSW5mbyogcmVzcG9uc2VfaW50ZXJmYWNlID0gTlVMTDsKK3N0
YXRpYyBQUEJfRmlsZVJlZiogZmlsZXJlZl9pbnRlcmZhY2UgPSBOVUxMOworc3RhdGljIHN0cnVj
dCBzdF90YWJsZSogaW5zdGFuY2VfZGF0YSA9IE5VTEw7CisKK3N0YXRpYyBWQUxVRSBpbnN0YW5j
ZV90YWJsZSA9IFF1bmRlZjsKKworc3RhdGljIFBQX0luc3RhbmNlIGN1cnJlbnRfaW5zdGFuY2Ug
PSAwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdGF0ZSBvZiBpbnN0YW5jZQorICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgaW5zdF9tYXJrKHZvaWQgKmNvbnN0
IHB0cik7CitzdGF0aWMgdm9pZCBpbnN0X2ZyZWUodm9pZCAqY29uc3QgcHRyKTsKK3N0YXRpYyBz
aXplX3QgaW5zdF9tZW1zaXplKHZvaWQgKmNvbnN0IHB0cik7CitzdGF0aWMgY29uc3QgcmJfZGF0
YV90eXBlX3QgcGVwcGVyX2luc3RhbmNlX2RhdGFfdHlwZSA9IHsKKyAgIlBlcHBlckluc3RhbmNl
IiwKKyAgeyBpbnN0X21hcmssIGluc3RfZnJlZSwgaW5zdF9tZW1zaXplIH0KK307CisKK3N0cnVj
dCBQZXBwZXJJbnN0YW5jZSB7CisgIFBQX0luc3RhbmNlIGluc3RhbmNlOworICBQUF9SZXNvdXJj
ZSB1cmxfbG9hZGVyOworICBWQUxVRSBzZWxmOworICB2b2lkKiBhc3luY19jYWxsX2FyZ3M7Cisg
IHVuaW9uIHsKKyAgICBpbnQzMl90IGFzX2ludDsKKyAgICBjb25zdCBjaGFyKiBhc19zdHI7Cisg
ICAgVkFMVUUgYXNfdmFsdWU7CisgIH0gYXN5bmNfY2FsbF9yZXN1bHQ7CisgIGNoYXIgYnVmWzEw
MDBdOworCisgIHB0aHJlYWRfdCB0aDsKKyAgcHRocmVhZF9tdXRleF90IG11dGV4OworICBwdGhy
ZWFkX2NvbmRfdCBjb25kOworfTsKKworc3RydWN0IFBlcHBlckluc3RhbmNlKgorcHJ1YnlfZ2V0
X2luc3RhbmNlKFBQX0luc3RhbmNlIGluc3RhbmNlKQoreworICBWQUxVRSBzZWxmID0gcmJfaGFz
aF9hcmVmKGluc3RhbmNlX3RhYmxlLCBJTlQyRklYKGluc3RhbmNlKSk7CisgIGlmIChSVEVTVChz
ZWxmKSkgeworICAgIHN0cnVjdCBQZXBwZXJJbnN0YW5jZSAqaW5zdDsKKyAgICBUeXBlZERhdGFf
R2V0X1N0cnVjdChzZWxmLCBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UsICZwZXBwZXJfaW5zdGFuY2Vf
ZGF0YV90eXBlLCBpbnN0KTsKKyAgICByZXR1cm4gaW5zdDsKKyAgfQorICBlbHNlIHsKKyAgICBy
ZXR1cm4gTlVMTDsKKyAgfQorfQorCisjZGVmaW5lIEdFVF9QRVBQRVJfSU5TVEFOQ0UoKSAocHJ1
YnlfZ2V0X2luc3RhbmNlKGN1cnJlbnRfaW5zdGFuY2UpKQorCitzdHJ1Y3QgUGVwcGVySW5zdGFu
Y2UqCitwcnVieV9yZWdpc3Rlcl9pbnN0YW5jZShQUF9JbnN0YW5jZSBpbnN0YW5jZSkKK3sKKyAg
VkFMVUUgb2JqOworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UgKmRhdGE7CisgIG9iaiA9IFR5cGVk
RGF0YV9NYWtlX1N0cnVjdChyYl9jRGF0YSwgc3RydWN0IFBlcHBlckluc3RhbmNlLCAmcGVwcGVy
X2luc3RhbmNlX2RhdGFfdHlwZSwgZGF0YSk7CisgIGRhdGEtPnNlbGYgPSBvYmo7CisgIGRhdGEt
Pmluc3RhbmNlID0gaW5zdGFuY2U7CisgIGRhdGEtPnVybF9sb2FkZXIgPSAwOworCisgIHB0aHJl
YWRfbXV0ZXhfaW5pdCgmZGF0YS0+bXV0ZXgsIE5VTEwpOworICBwdGhyZWFkX2NvbmRfaW5pdCgm
ZGF0YS0+Y29uZCwgTlVMTCk7CisKKyAgcmJfaGFzaF9hc2V0KGluc3RhbmNlX3RhYmxlLCBJTlQy
RklYKGluc3RhbmNlKSwgb2JqKTsKKyAgcmV0dXJuIGRhdGE7Cit9CisKK2ludAorcHJ1YnlfdW5y
ZWdpc3Rlcl9pbnN0YW5jZShQUF9JbnN0YW5jZSBpbnN0YW5jZSkKK3sKKyAgVkFMVUUgaW5zdCA9
IHJiX2hhc2hfZGVsZXRlKGluc3RhbmNlX3RhYmxlLCBJTlQyRklYKGluc3RhbmNlKSk7CisgIHJl
dHVybiBSVEVTVChpbnN0KTsKK30KKworc3RhdGljIHZvaWQKK2luc3RfbWFyayh2b2lkICpjb25z
dCBwdHIpCit7CisgIFJVQllfTUFSS19FTlRFUigiUGVwcGVySW5zdGFuY2UiMCk7CisgIGlmIChw
dHIpIHsKKyAgICBjb25zdCBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGluc3QgPSAoc3RydWN0IFBl
cHBlckluc3RhbmNlKilwdHI7CisgICAgUlVCWV9NQVJLX1VOTEVTU19OVUxMKGluc3QtPmFzeW5j
X2NhbGxfcmVzdWx0LmFzX3ZhbHVlKTsKKyAgfQorICBSVUJZX01BUktfTEVBVkUoIlBlcHBlcklu
c3RhbmNlIjApOworfQorCitzdGF0aWMgdm9pZAoraW5zdF9mcmVlKHZvaWQgKmNvbnN0IHB0cikK
K3sKKyAgcnVieV94ZnJlZShwdHIpOworfQorCitzdGF0aWMgc2l6ZV90CitpbnN0X21lbXNpemUo
dm9pZCAqY29uc3QgcHRyKQoreworICBpZiAocHRyKSB7CisgICAgY29uc3Qgc3RydWN0IFBlcHBl
ckluc3RhbmNlKiBpbnN0ID0gKHN0cnVjdCBQZXBwZXJJbnN0YW5jZSopcHRyOworICAgIHJldHVy
biBzaXplb2YoKmluc3QpOworICB9IGVsc2UgeworICAgIHJldHVybiAwOworICB9Cit9CisKK3Zv
aWQKK3BydWJ5X2FzeW5jX3JldHVybl9pbnQodm9pZCogZGF0YSwgaW50MzJfdCByZXN1bHQpCit7
CisgIC8qIFBQQVBJIG1haW4gdGhyZWFkICovCisgIHN0cnVjdCBQZXBwZXJJbnN0YW5jZSogY29u
c3QgaW5zdGFuY2UgPSAoc3RydWN0IFBlcHBlckluc3RhbmNlKilkYXRhOworICBpbnN0YW5jZS0+
YXN5bmNfY2FsbF9yZXN1bHQuYXNfaW50ID0gcmVzdWx0OworICBpZiAocHRocmVhZF9jb25kX3Np
Z25hbCgmaW5zdGFuY2UtPmNvbmQpKSB7CisgICAgcGVycm9yKCJwZXBwZXItcnVieTpwdGhyZWFk
X2NvbmRfc2lnbmFsIik7CisgIH0KK30KKwordm9pZAorcHJ1YnlfYXN5bmNfcmV0dXJuX3N0cih2
b2lkKiBkYXRhLCBjb25zdCBjaGFyICpyZXN1bHQpCit7CisgIC8qIFBQQVBJIG1haW4gdGhyZWFk
ICovCisgIHN0cnVjdCBQZXBwZXJJbnN0YW5jZSogY29uc3QgaW5zdGFuY2UgPSAoc3RydWN0IFBl
cHBlckluc3RhbmNlKilkYXRhOworICBpbnN0YW5jZS0+YXN5bmNfY2FsbF9yZXN1bHQuYXNfc3Ry
ID0gcmVzdWx0OworICBpZiAocHRocmVhZF9jb25kX3NpZ25hbCgmaW5zdGFuY2UtPmNvbmQpKSB7
CisgICAgcGVycm9yKCJwZXBwZXItcnVieTpwdGhyZWFkX2NvbmRfc2lnbmFsIik7CisgIH0KK30K
Kwordm9pZAorcHJ1YnlfYXN5bmNfcmV0dXJuX3ZhbHVlKHZvaWQqIGRhdGEsIFZBTFVFIHZhbHVl
KQoreworICAvKiBQUEFQSSBtYWluIHRocmVhZCAqLworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2Uq
IGNvbnN0IGluc3RhbmNlID0gKHN0cnVjdCBQZXBwZXJJbnN0YW5jZSopZGF0YTsKKyAgaW5zdGFu
Y2UtPmFzeW5jX2NhbGxfcmVzdWx0LmFzX3ZhbHVlID0gdmFsdWU7CisgIGlmIChwdGhyZWFkX2Nv
bmRfc2lnbmFsKCZpbnN0YW5jZS0+Y29uZCkpIHsKKyAgICBwZXJyb3IoInBlcHBlci1ydWJ5OnB0
aHJlYWRfY29uZF9zaWduYWwiKTsKKyAgfQorfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog
Q29udmVyc2lvbiBiZXR3ZWVuIFJ1YnkncyBWQUxVRSwgUGVwcGVyJ3MgVmFyIGFuZCBDIHN0cmlu
ZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IHN0cmlu
ZyBQUF9WYXIgZnJvbSBDIHN0cmluZy4gVGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSBhCisg
KiByZWZjb3VudGVkIHN0cmluZyBvYmplY3QuIEl0IHdpbGwgYmUgQWRkUmVmKCllZCBmb3IgdGhl
IGNhbGxlci4gV2hlbiB0aGUKKyAqIGNhbGxlciBpcyBkb25lIHdpdGggaXQsIGl0IHNob3VsZCBi
ZSBSZWxlYXNlKClkLgorICogQHBhcmFtW2luXSBzdHIgQyBzdHJpbmcgdG8gYmUgY29udmVydGVk
IHRvIFBQX1ZhcgorICogQHJldHVybiBQUF9WYXIgY29udGFpbmluZyBzdHJpbmcuCisgKi8KK3N0
YXRpYyBzdHJ1Y3QgUFBfVmFyCitwcnVieV9jc3RyX3RvX3Zhcihjb25zdCBjaGFyKiBzdHIpCit7
CisjaWZkZWYgUFBCX1ZBUl9JTlRFUkZBQ0VfMV8wCisgIGlmICh2YXJfaW50ZXJmYWNlICE9IE5V
TEwpCisgICAgcmV0dXJuIHZhcl9pbnRlcmZhY2UtPlZhckZyb21VdGY4KG1vZHVsZV9pZCwgc3Ry
LCBzdHJsZW4oc3RyKSk7CisgIHJldHVybiBQUF9NYWtlVW5kZWZpbmVkKCk7CisjZWxzZQorICBy
ZXR1cm4gdmFyX2ludGVyZmFjZS0+VmFyRnJvbVV0Zjgoc3RyLCBzdHJsZW4oc3RyKSk7CisjZW5k
aWYKK30KKworLyoqCisgKiBSZXR1cm5zIGEgbXV0YWJsZSBDIHN0cmluZyBjb250YWluZWQgaW4g
dGhlIEBhIHZhciBvciBOVUxMIGlmIEBhIHZhciBpcyBub3QKKyAqIHN0cmluZy4gIFRoaXMgbWFr
ZXMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgaW4gdGhlIEBhIHZhciBhbmQgYWRkcyBhIE5VTEwKKyAq
IHRlcm1pbmF0b3IuICBOb3RlIHRoYXQgVmFyVG9VdGY4KCkgZG9lcyBub3QgZ3VhcmFudGVlIHRo
ZSBOVUxMIHRlcm1pbmF0b3Igb24KKyAqIHRoZSByZXR1cm5lZCBzdHJpbmcuICBTZWUgdGhlIGNv
bW1lbnRzIGZvciBWYXJUb1V0ZjgoKSBpbiBwcGFwaS9jL3BwYl92YXIuaAorICogZm9yIG1vcmUg
aW5mby4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIHJldHVybmVk
IG1lbW9yeS4KKyAqIEBwYXJhbVtpbl0gdmFyIFBQX1ZhciBjb250YWluaW5nIHN0cmluZy4KKyAq
IEByZXR1cm4gYSBtdXRhYmxlIEMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEBhIHZhci4KKyAq
IEBub3RlIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIHJldHVybmVk
IHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIqCitwcnVieV92YXJfdG9fY3N0cihzdHJ1Y3QgUFBf
VmFyIHZhcikKK3sKKyAgdWludDMyX3QgbGVuID0gMDsKKyAgaWYgKHZhcl9pbnRlcmZhY2UgIT0g
TlVMTCkgeworICAgIGNvbnN0IGNoYXIqIHZhcl9jX3N0ciA9IHZhcl9pbnRlcmZhY2UtPlZhclRv
VXRmOCh2YXIsICZsZW4pOworICAgIGlmIChsZW4gPiAwKSB7CisgICAgICBjaGFyKiBjX3N0ciA9
IChjaGFyKiltYWxsb2MobGVuICsgMSk7CisgICAgICBtZW1jcHkoY19zdHIsIHZhcl9jX3N0ciwg
bGVuKTsKKyAgICAgIGNfc3RyW2xlbl0gPSAnXDAnOworICAgICAgcmV0dXJuIGNfc3RyOworICAg
IH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBQUF9WYXIKK3BydWJ5
X3N0cl90b192YXIodm9sYXRpbGUgVkFMVUUgc3RyKQoreworICBpZiAoIVJCX1RZUEVfUChzdHIs
IFRfU1RSSU5HKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiW0JVR10gVW5leHBlY3RlZCBvYmpl
Y3QgdHlwZTogJXhcbiIsIFRZUEUoc3RyKSk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9
CisjaWZkZWYgUFBCX1ZBUl9JTlRFUkZBQ0VfMV8wCisgIGlmICh2YXJfaW50ZXJmYWNlICE9IE5V
TEwpIHsKKyAgICByZXR1cm4gdmFyX2ludGVyZmFjZS0+VmFyRnJvbVV0ZjgobW9kdWxlX2lkLCBS
U1RSSU5HX1BUUihzdHIpLCBSU1RSSU5HX0xFTihzdHIpKTsKKyAgfQorI2Vsc2UKKyAgcmV0dXJu
IHZhcl9pbnRlcmZhY2UtPlZhckZyb21VdGY4KFJTVFJJTkdfUFRSKHN0ciksIFJTVFJJTkdfTEVO
KHN0cikpOworI2VuZGlmCisgIHJldHVybiBQUF9NYWtlVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRp
YyBzdHJ1Y3QgUFBfVmFyCitwcnVieV9vYmpfdG9fdmFyKHZvbGF0aWxlIFZBTFVFIG9iaikKK3sg
CisgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlcnJvciA9IAorICAgICAgInRocm93ICdGYWls
ZWQgdG8gY29udmVydCB0aGUgcmVzdWx0IHRvIGEgSmF2YVNjcmlwdCBvYmplY3QnOyI7CisgIGlu
dCBzdGF0ZTsKKyAgUFVTSF9UQUcoKTsKKyAgaWYgKChzdGF0ZSA9IEVYRUNfVEFHKCkpID09IDAp
IHsKKyAgICBvYmogPSByYl9vYmpfYXNfc3RyaW5nKG9iaik7CisgIH0KKyAgUE9QX1RBRygpOwor
CisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIDA6CisgICAgICByZXR1cm4gcHJ1Ynlfc3Ry
X3RvX3ZhcihvYmopOworICAgIGNhc2UgVEFHX1JBSVNFOgorICAgICAgcmJfc2V0X2VycmluZm8o
UW5pbCk7CisgICAgICByZXR1cm4gcHJ1YnlfY3N0cl90b192YXIoZXJyb3IpOworICAgIGRlZmF1
bHQ6CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIGVycm9yIHdoaXRlIGNvbnZlcnRpbmcg
dGhlIHJlc3VsdCB0byBhIHN0cmluZ1xuIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cisg
IH0KK30KKworaW50CitwcnVieV92YXJfZXF1YWxfdG9fY3N0cl9wKHN0cnVjdCBQUF9WYXIgbGhz
LCBjb25zdCBjaGFyKiByaHMpCit7CisgIHVpbnQzMl90IGxlbiA9IDA7CisgIGlmICh2YXJfaW50
ZXJmYWNlID09IE5VTEwpIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlIHsKKyAgICBjb25z
dCBjaGFyKiBjb25zdCBjc3RyID0gdmFyX2ludGVyZmFjZS0+VmFyVG9VdGY4KGxocywgJmxlbik7
CisgICAgcmV0dXJuIHN0cm5jbXAoY3N0ciwgcmhzLCBsZW4pID09IDA7CisgIH0KK30KKworaW50
CitwcnVieV92YXJfcHJlZml4ZWRfcChzdHJ1Y3QgUFBfVmFyIHZhciwgY29uc3QgY2hhciogcHJl
Zml4KQoreworICB1aW50MzJfdCBsZW4gPSAwOworICBpZiAodmFyX2ludGVyZmFjZSA9PSBOVUxM
KSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZSB7CisgICAgY29uc3QgY2hhciogY29uc3Qg
Y3N0ciA9IHZhcl9pbnRlcmZhY2UtPlZhclRvVXRmOCh2YXIsICZsZW4pOworICAgIGNvbnN0IHNp
emVfdCBwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisgICAgcmV0dXJuIGxlbiA+PSBwcmVm
aXhfbGVuICYmIG1lbWNtcChjc3RyLCBwcmVmaXgsIGxlbikgPT0gMDsKKyAgfQorfQorCisKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKyAqIE1lc3NhZ2luZworICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKworLyogUG9zdHMgdGhlIGdpdmVuIEMgc3RyaW5nIGFzIGEgbWVzc2FnZS4KKyAqIEBwYXJh
bSBkYXRhIHBvaW50ZXIgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCit2b2lkCitwcnVi
eV9wb3N0X2NzdHIodm9pZCogZGF0YSkKK3sKKyAgLyogUFBBUEkgbWFpbiB0aHJlYWQgKi8KKyAg
c3RydWN0IFBlcHBlckluc3RhbmNlKiBjb25zdCBpbnN0YW5jZSA9IChzdHJ1Y3QgUGVwcGVySW5z
dGFuY2UqKWRhdGE7CisgIGNvbnN0IGNoYXIqIGNvbnN0IG1zZyA9IChjb25zdCBjaGFyKilpbnN0
YW5jZS0+YXN5bmNfY2FsbF9hcmdzOworICBtZXNzYWdpbmdfaW50ZXJmYWNlLT5Qb3N0TWVzc2Fn
ZShpbnN0YW5jZS0+aW5zdGFuY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcnVieV9jc3RyX3RvX3Zhcihtc2cpKTsKK30KKworLyogUG9zdHMgdGhlIGdpdmVuIFJ1Ynkg
VkFMVUUgYXMgYSBtZXNzYWdlLgorICogQHBhcmFtIGRhdGEgYSBWQUxVRSBjYXN0ZWQgdG8gdm9p
ZCogKi8KK3ZvaWQKK3BydWJ5X3Bvc3RfdmFsdWUodm9pZCogZGF0YSkKK3sKKyAgLyogUFBBUEkg
bWFpbiB0aHJlYWQgKi8KKyAgc3RydWN0IFBlcHBlckluc3RhbmNlKiBjb25zdCBpbnN0YW5jZSA9
IChzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqKWRhdGE7CisgIHZvbGF0aWxlIFZBTFVFIHZhbHVlID0g
KFZBTFVFKWluc3RhbmNlLT5hc3luY19jYWxsX2FyZ3M7CisgIG1lc3NhZ2luZ19pbnRlcmZhY2Ut
PlBvc3RNZXNzYWdlKGluc3RhbmNlLT5pbnN0YW5jZSwgcHJ1Ynlfb2JqX3RvX3Zhcih2YWx1ZSkp
OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUnVieSBpbml0aWFsaXphdGlv
bgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2luaXRfbG9hZHBhdGgo
dm9pZCkKK3sKKyAgdm9sYXRpbGUgVkFMVUUgcGF0aDsKKyAgVkFMVUUgbG9hZF9wYXRoID0gR0VU
X1ZNKCktPmxvYWRfcGF0aDsKKworICBwYXRoID0gcmJfdXNhc2NpaV9zdHJfbmV3X2NzdHIoImxp
Yi9ydWJ5LzIuMC4wIik7CisgIHJiX2FyeV9wdXNoKGxvYWRfcGF0aCwgcGF0aCk7CisgIHBhdGgg
PSByYl91c2FzY2lpX3N0cl9uZXdfY3N0cigibGliL3J1YnkvMi4wLjAveDg2XzY0LW5hY2wiKTsK
KyAgcmJfYXJ5X3B1c2gobG9hZF9wYXRoLCBwYXRoKTsKKworICBwYXRoID0gcmJfdXNhc2NpaV9z
dHJfbmV3X2NzdHIoIi4iKTsKKyAgcmJfYXJ5X3B1c2gobG9hZF9wYXRoLCBwYXRoKTsKK30KKwor
c3RhdGljIHZvaWQqCitpbml0X2xpYnJhcmllcyh2b2lkKiBkYXRhKQoreworICBleHRlcm4gdm9p
ZCBJbml0X2VuYygpOworICBleHRlcm4gdm9pZCBJbml0X2V4dCgpOworCisgIGludCBzdGF0ZTsK
KyAgc3RydWN0IFBlcHBlckluc3RhbmNlKiBjb25zdCBpbnN0YW5jZSA9IChzdHJ1Y3QgUGVwcGVy
SW5zdGFuY2UqKWRhdGE7CisgIGN1cnJlbnRfaW5zdGFuY2UgPSBpbnN0YW5jZS0+aW5zdGFuY2U7
CisKKyAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygmaW5zdGFuY2UtPm11dGV4KSkgeworICAgIHBl
cnJvcigicGVwcGVyLXJ1Ynk6cHRocmVhZF9tdXRleF9sb2NrIik7CisgICAgcmV0dXJuIDA7Cisg
IH0KKworICBQVVNIX1RBRygpOworICBpZiAoKHN0YXRlID0gRVhFQ19UQUcoKSkgPT0gMCkgewor
ICAgIGluaXRfbG9hZHBhdGgoKTsKKyAgICBJbml0X2VuYygpOworICAgIEluaXRfZXh0KCk7Cisg
IH0KKyAgUE9QX1RBRygpOworCisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbnN0YW5jZS0+bXV0
ZXgpOworCisgIGlmIChzdGF0ZSkgeworICAgIHZvbGF0aWxlIFZBTFVFIGVyciA9IHJiX2Vycmlu
Zm8oKTsKKyAgICBlcnIgPSByYl9vYmpfYXNfc3RyaW5nKGVycik7CisgIH0gZWxzZSB7CisgICAg
aW5zdGFuY2UtPmFzeW5jX2NhbGxfYXJncyA9ICJydWJ5UmVhZHkiOworICAgIGNvcmVfaW50ZXJm
YWNlLT5DYWxsT25NYWluVGhyZWFkKAorICAgICAgICAwLCBQUF9NYWtlQ29tcGxldGlvbkNhbGxi
YWNrKHBydWJ5X3Bvc3RfY3N0ciwgaW5zdGFuY2UpLCAwKTsKKyAgfQorICByZXR1cm4gTlVMTDsK
K30KKworc3RhdGljIGludAoraW5pdF9saWJyYXJpZXNfaWZfbmVjZXNzYXJ5KHZvaWQpCit7Cisg
IHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAg
c3RydWN0IFBlcHBlckluc3RhbmNlKiBjb25zdCBpbnN0YW5jZSA9IEdFVF9QRVBQRVJfSU5TVEFO
Q0UoKTsKKyAgICBpbnQgZXJyOworICAgIGluaXRpYWxpemVkID0gMTsKKyAgICBlcnIgPSBwdGhy
ZWFkX2NyZWF0ZSgmaW5zdGFuY2UtPnRoLCBOVUxMLCAmaW5pdF9saWJyYXJpZXMsIGluc3RhbmNl
KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInBlcHBlcl9ydWJ5OnB0
aHJlYWRfY3JlYXRlOiAlc1xuIiwgc3RyZXJyb3IoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7CisgICAgfQorICAgIHB0aHJlYWRfZGV0YWNoKGluc3RhbmNlLT50aCk7CisgIH0KKyAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BydWJ5X2luaXQodm9pZCkKK3sKKyAgUlVCWV9J
TklUX1NUQUNLOworICBydWJ5X2luaXQoKTsKKworICBpbnN0YW5jZV90YWJsZSA9IHJiX2hhc2hf
bmV3KCk7CisgIHJiX2djX3JlZ2lzdGVyX21hcmtfb2JqZWN0KGluc3RhbmNlX3RhYmxlKTsKKwor
ICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSdWJ5IGV2YWx1
YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkKgorcHJ1YnlfZXZh
bCh2b2lkKiBkYXRhKQoreworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGNvbnN0IGluc3RhbmNl
ID0gKHN0cnVjdCBQZXBwZXJJbnN0YW5jZSopZGF0YTsKKyAgdm9sYXRpbGUgVkFMVUUgc3JjID0g
KFZBTFVFKWluc3RhbmNlLT5hc3luY19jYWxsX2FyZ3M7CisgIHZvbGF0aWxlIFZBTFVFIGlzZXEs
IHJlc3VsdCA9IFFuaWw7CisgIHZvbGF0aWxlIFZBTFVFIGZpbGVuYW1lOworICBOT0RFKiB0cmVl
OworICB2b2xhdGlsZSBpbnQgc3RhdGU7CisgIHJiX3RocmVhZF90ICp0aDsKKyAgcmJfZW52X3Qg
KmVudjsKKworICBSVUJZX0lOSVRfU1RBQ0s7CisgIFBVU0hfVEFHKCk7CisKKyAgaWYgKHB0aHJl
YWRfbXV0ZXhfbG9jaygmaW5zdGFuY2UtPm11dGV4KSkgeworICAgIHBlcnJvcigicGVwcGVyLXJ1
Ynk6cHRocmVhZF9tdXRleF9sb2NrIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAoKHN0
YXRlID0gRVhFQ19UQUcoKSkgPT0gMCkgeworICAgIHRoID0gR0VUX1RIUkVBRCgpOworICAgIFNB
VkVfUk9PVF9KTVBCVUYodGgsIHsKKyAgICAgIHRoLT5taWxkX2NvbXBpbGVfZXJyb3IrKzsKKyAg
ICAgIHRyZWUgPSByYl9jb21waWxlX3N0cmluZygiKHBlcHBlci1ydWJ5KSIsIHNyYywgMSk7Cisg
ICAgICB0aC0+bWlsZF9jb21waWxlX2Vycm9yLS07CisgICAgICBpZiAoUlRFU1QocmJfZXJyaW5m
bygpKSkgeworICAgICAgICByYl9leGNfcmFpc2UocmJfZXJyaW5mbygpKTsKKyAgICAgIH0KKwor
ICAgICAgeworICAgICAgICBWQUxVRSB0b3BsZXZlbF9iaW5kaW5nID0gcmJfY29uc3RfZ2V0KHJi
X2NPYmplY3QsIHJiX2ludGVybigiVE9QTEVWRUxfQklORElORyIpKTsKKyAgICAgICAgcmJfYmlu
ZGluZ190ICpiaW5kOworCisgICAgICAgIEdldEJpbmRpbmdQdHIodG9wbGV2ZWxfYmluZGluZywg
YmluZCk7CisgICAgICAgIEdldEVudlB0cihiaW5kLT5lbnYsIGVudik7CisgICAgICB9CisKKyAg
ICAgIGZpbGVuYW1lID0gcmJfdXNhc2NpaV9zdHJfbmV3KCIocGVwcGVyLXJ1YnkpIiwgc3RybGVu
KCIocGVwcGVyLXJ1YnkpIikpOworICAgICAgdGgtPnBhcnNlX2luX2V2YWwtLTsKKyAgICAgIHRo
LT5iYXNlX2Jsb2NrID0gJmVudi0+YmxvY2s7CisgICAgICBpc2VxID0gcmJfaXNlcV9uZXdfbWFp
bih0cmVlLCBmaWxlbmFtZSwgZmlsZW5hbWUpOworICAgICAgdGgtPnBhcnNlX2luX2V2YWwrKzsK
KyAgICAgIHRoLT5iYXNlX2Jsb2NrID0gMDsKKworICAgICAgcmVzdWx0ID0gcmJfaXNlcV9ldmFs
X21haW4oaXNlcSk7CisgICAgfSk7CisgIH0KKyAgUE9QX1RBRygpOworCisgIHB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCZpbnN0YW5jZS0+bXV0ZXgpOworCisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBj
YXNlIDA6CisgICAgICBpbnN0YW5jZS0+YXN5bmNfY2FsbF9hcmdzID0gCisgICAgICAgICAgcmJf
c3RyX2NvbmNhdChyYl91c2FzY2lpX3N0cl9uZXdfY3N0cigicmV0dXJuOiIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmJfb2JqX2FzX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIGNvcmVfaW50
ZXJmYWNlLT5DYWxsT25NYWluVGhyZWFkKAorICAgICAgICAgIDAsIFBQX01ha2VDb21wbGV0aW9u
Q2FsbGJhY2socHJ1YnlfcG9zdF92YWx1ZSwgaW5zdGFuY2UpLCAwKTsKKyAgICAgIHJldHVybiBO
VUxMOworICAgIGNhc2UgVEFHX1JBSVNFOiAKKyAgICAgIHJlc3VsdCA9IHJiX2VycmluZm8oKTsK
KyAgICAgIHJiX3NldF9lcnJpbmZvKFFuaWwpOworICAgICAgaW5zdGFuY2UtPmFzeW5jX2NhbGxf
YXJncyA9CisgICAgICAgICAgcmJfc3RyX2NvbmNhdChyYl91c2FzY2lpX3N0cl9uZXdfY3N0cigi
ZXJyb3I6IiksCisgICAgICAgICAgICAgICAgICAgICAgICByYl9vYmpfYXNfc3RyaW5nKHJlc3Vs
dCkpOworICAgICAgY29yZV9pbnRlcmZhY2UtPkNhbGxPbk1haW5UaHJlYWQoCisgICAgICAgICAg
MCwgUFBfTWFrZUNvbXBsZXRpb25DYWxsYmFjayhwcnVieV9wb3N0X3ZhbHVlLCBpbnN0YW5jZSks
IDApOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoKKyAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRmF0YWwgZXJyb3JcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9Cit9
CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGVwcGVyIE1vZHVsZSBjYWxsYmFja3MK
KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ2FsbGVkIHdoZW4gdGhlIE5hQ2wg
bW9kdWxlIGlzIGluc3RhbnRpYXRlZCBvbiB0aGUgd2ViIHBhZ2UuIFRoZSBpZGVudGlmaWVyCisg
KiBvZiB0aGUgbmV3IGluc3RhbmNlIHdpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBmaXJzdCBhcmd1
bWVudCAodGhpcyB2YWx1ZSBpcworICogZ2VuZXJhdGVkIGJ5IHRoZSBicm93c2VyIGFuZCBpcyBh
biBvcGFxdWUgaGFuZGxlKS4gIFRoaXMgaXMgY2FsbGVkIGZvciBlYWNoCisgKiBpbnN0YW50aWF0
aW9uIG9mIHRoZSBOYUNsIG1vZHVsZSwgd2hpY2ggaXMgZWFjaCB0aW1lIHRoZSA8ZW1iZWQ+IHRh
ZyBmb3IKKyAqIHRoaXMgbW9kdWxlIGlzIGVuY291bnRlcmVkLgorICoKKyAqIElmIHRoaXMgZnVu
Y3Rpb24gcmVwb3J0cyBhIGZhaWx1cmUgKGJ5IHJldHVybmluZyBAYSBQUF9GQUxTRSksIHRoZSBO
YUNsCisgKiBtb2R1bGUgd2lsbCBiZSBkZWxldGVkIGFuZCBEaWREZXN0cm95IHdpbGwgYmUgY2Fs
bGVkLgorICogQHBhcmFtW2luXSBpbnN0YW5jZSBUaGUgaWRlbnRpZmllciBvZiB0aGUgbmV3IGlu
c3RhbmNlIHJlcHJlc2VudGluZyB0aGlzCisgKiAgICAgTmFDbCBtb2R1bGUuCisgKiBAcGFyYW1b
aW5dIGFyZ2MgVGhlIG51bWJlciBvZiBhcmd1bWVudHMgY29udGFpbmVkIGluIEBhIGFyZ24gYW5k
IEBhIGFyZ3YuCisgKiBAcGFyYW1baW5dIGFyZ24gQW4gYXJyYXkgb2YgYXJndW1lbnQgbmFtZXMu
ICBUaGVzZSBhcmd1bWVudCBuYW1lcyBhcmUKKyAqICAgICBzdXBwbGllZCBpbiB0aGUgPGVtYmVk
PiB0YWcsIGZvciBleGFtcGxlOgorICogICAgICAgPGVtYmVkIGlkPSJuYWNsX21vZHVsZSIgZGlt
ZW5zaW9ucz0iMiI+CisgKiAgICAgd2lsbCBwcm9kdWNlIHR3byBhcmd1bWVudHMsIG9uZSBuYW1l
ZCAiaWQiIGFuZCBvbmUgbmFtZWQgImRpbWVuc2lvbnMiLgorICogQHBhcmFtW2luXSBhcmd2IEFu
IGFycmF5IG9mIGFyZ3VtZW50IHZhbHVlcy4gIFRoZXNlIGFyZSB0aGUgdmFsdWVzIG9mIHRoZQor
ICogICAgIGFyZ3VtZW50cyBsaXN0ZWQgaW4gdGhlIDxlbWJlZD4gdGFnLiAgSW4gdGhlIGFib3Zl
IGV4YW1wbGUsIHRoZXJlIHdpbGwKKyAqICAgICBiZSB0d28gZWxlbWVudHMgaW4gdGhpcyBhcnJh
eSwgIm5hY2xfbW9kdWxlIiBhbmQgIjIiLiAgVGhlIGluZGljZXMgb2YKKyAqICAgICB0aGVzZSB2
YWx1ZXMgbWF0Y2ggdGhlIGluZGljZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXMgaW4gQGEg
YXJnbi4KKyAqIEByZXR1cm4gQGEgUFBfVFJVRSBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgUFBf
Qm9vbAorSW5zdGFuY2VfRGlkQ3JlYXRlKFBQX0luc3RhbmNlIGluc3RhbmNlLAorICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ25bXSwgY29uc3QgY2hhciog
YXJndltdKQoreworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGRhdGEgPSBwcnVieV9yZWdpc3Rl
cl9pbnN0YW5jZShpbnN0YW5jZSk7CisgIGN1cnJlbnRfaW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAg
cmV0dXJuIGluaXRfbGlicmFyaWVzX2lmX25lY2Vzc2FyeSgpID8gUFBfRkFMU0UgOiBQUF9UUlVF
OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHRoZSBOYUNsIG1vZHVsZSBpcyBkZXN0cm95ZWQu
IFRoaXMgd2lsbCBhbHdheXMgYmUgY2FsbGVkLAorICogZXZlbiBpZiBEaWRDcmVhdGUgcmV0dXJu
ZWQgZmFpbHVyZS4gVGhpcyByb3V0aW5lIHNob3VsZCBkZWFsbG9jYXRlIGFueSBkYXRhCisgKiBh
c3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlLgorICogQHBhcmFtW2luXSBpbnN0YW5jZSBUaGUg
aWRlbnRpZmllciBvZiB0aGUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoaXMgTmFDbAorICogICAg
IG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQgSW5zdGFuY2VfRGlkRGVzdHJveShQUF9JbnN0YW5j
ZSBpbnN0YW5jZSkgeworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGRhdGEgPSBwcnVieV9nZXRf
aW5zdGFuY2UoaW5zdGFuY2UpOworICBjb3JlX2ludGVyZmFjZS0+UmVsZWFzZVJlc291cmNlKGRh
dGEtPnVybF9sb2FkZXIpOworICBwcnVieV91bnJlZ2lzdGVyX2luc3RhbmNlKGluc3RhbmNlKTsK
K30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB0aGUgcG9zaXRpb24sIHRoZSBzaXplLCBvciB0aGUg
Y2xpcCByZWN0IG9mIHRoZSBlbGVtZW50IGluIHRoZQorICogYnJvd3NlciB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoaXMgTmFDbCBtb2R1bGUgaGFzIGNoYW5nZWQuCisgKiBAcGFyYW1baW5dIGluc3Rh
bmNlIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhpcyBOYUNs
CisgKiAgICAgbW9kdWxlLgorICogQHBhcmFtW2luXSBwb3NpdGlvbiBUaGUgbG9jYXRpb24gb24g
dGhlIHBhZ2Ugb2YgdGhpcyBOYUNsIG1vZHVsZS4gVGhpcyBpcworICogICAgIHJlbGF0aXZlIHRv
IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHZpZXdwb3J0LCB3aGljaCBjaGFuZ2VzIGFzIHRo
ZQorICogICAgIHBhZ2UgaXMgc2Nyb2xsZWQuCisgKiBAcGFyYW1baW5dIGNsaXAgVGhlIHZpc2li
bGUgcmVnaW9uIG9mIHRoZSBOYUNsIG1vZHVsZS4gVGhpcyBpcyByZWxhdGl2ZSB0bworICogICAg
IHRoZSB0b3AgbGVmdCBvZiB0aGUgcGx1Z2luJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gKG5vdCB0aGUg
cGFnZSkuICBJZiB0aGUKKyAqICAgICBwbHVnaW4gaXMgaW52aXNpYmxlLCBAYSBjbGlwIHdpbGwg
YmUgKDAsIDAsIDAsIDApLgorICovCisjaWZkZWYgUFBQX0lOU1RBTkNFX0lOVEVSRkFDRV8xXzAK
K3N0YXRpYyB2b2lkCitJbnN0YW5jZV9EaWRDaGFuZ2VWaWV3KFBQX0luc3RhbmNlIGluc3RhbmNl
LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgUFBfUmVjdCogcG9zaXRpb24s
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBQUF9SZWN0KiBjbGlwKQorewor
fQorI2Vsc2UKK3N0YXRpYyB2b2lkCitJbnN0YW5jZV9EaWRDaGFuZ2VWaWV3KFBQX0luc3RhbmNl
IGluc3RhbmNlLCBQUF9SZXNvdXJjZSB2aWV3X3Jlc291cmNlKQoreworfQorI2VuZGlmCisKKy8q
KgorICogTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIE5hQ2wgbW9kdWxlIGhhcyBnYWluZWQg
b3IgbG9zdCBmb2N1cy4KKyAqIEhhdmluZyBmb2N1cyBtZWFucyB0aGF0IGtleWJvYXJkIGV2ZW50
cyB3aWxsIGJlIHNlbnQgdG8gdGhlIE5hQ2wgbW9kdWxlCisgKiByZXByZXNlbnRlZCBieSBAYSBp
bnN0YW5jZS4gQSBOYUNsIG1vZHVsZSdzIGRlZmF1bHQgY29uZGl0aW9uIGlzIHRoYXQgaXQKKyAq
IHdpbGwgbm90IGhhdmUgZm9jdXMuCisgKgorICogTm90ZTogY2xpY2tzIG9uIE5hQ2wgbW9kdWxl
cyB3aWxsIGdpdmUgZm9jdXMgb25seSBpZiB5b3UgaGFuZGxlIHRoZQorICogY2xpY2sgZXZlbnQu
IFlvdSBzaWduYWwgaWYgeW91IGhhbmRsZWQgaXQgYnkgcmV0dXJuaW5nIEBhIHRydWUgZnJvbQor
ICogSGFuZGxlSW5wdXRFdmVudC4gT3RoZXJ3aXNlIHRoZSBicm93c2VyIHdpbGwgYnViYmxlIHRo
ZSBldmVudCBhbmQgZ2l2ZQorICogZm9jdXMgdG8gdGhlIGVsZW1lbnQgb24gdGhlIHBhZ2UgdGhh
dCBhY3R1YWxseSBkaWQgZW5kIHVwIGNvbnN1bWluZyBpdC4KKyAqIElmIHlvdSdyZSBub3QgZ2V0
dGluZyBmb2N1cywgY2hlY2sgdG8gbWFrZSBzdXJlIHlvdSdyZSByZXR1cm5pbmcgdHJ1ZSBmcm9t
CisgKiB0aGUgbW91c2UgY2xpY2sgaW4gSGFuZGxlSW5wdXRFdmVudC4KKyAqIEBwYXJhbVtpbl0g
aW5zdGFuY2UgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGlz
IE5hQ2wKKyAqICAgICBtb2R1bGUuCisgKiBAcGFyYW1baW5dIGhhc19mb2N1cyBJbmRpY2F0ZXMg
d2hldGhlciB0aGlzIE5hQ2wgbW9kdWxlIGdhaW5lZCBvciBsb3N0CisgKiAgICAgZXZlbnQgZm9j
dXMuCisgKi8KK3N0YXRpYyB2b2lkCitJbnN0YW5jZV9EaWRDaGFuZ2VGb2N1cyhQUF9JbnN0YW5j
ZSBpbnN0YW5jZSwgUFBfQm9vbCBoYXNfZm9jdXMpCit7Cit9CisKKy8qKgorICogSGFuZGxlciB0
aGF0IGdldHMgY2FsbGVkIGFmdGVyIGEgZnVsbC1mcmFtZSBtb2R1bGUgaXMgaW5zdGFudGlhdGVk
IGJhc2VkIG9uCisgKiByZWdpc3RlcmVkIE1JTUUgdHlwZXMuICBUaGlzIGZ1bmN0aW9uIGlzIG5v
dCBjYWxsZWQgb24gTmFDbCBtb2R1bGVzLiAgVGhpcworICogZnVuY3Rpb24gaXMgZXNzZW50aWFs
bHkgYSBwbGFjZS1ob2xkZXIgZm9yIHRoZSByZXF1aXJlZCBmdW5jdGlvbiBwb2ludGVyIGluCisg
KiB0aGUgUFBQX0luc3RhbmNlIHN0cnVjdHVyZS4KKyAqIEBwYXJhbVtpbl0gaW5zdGFuY2UgVGhl
IGlkZW50aWZpZXIgb2YgdGhlIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGlzIE5hQ2wKKyAqICAg
ICBtb2R1bGUuCisgKiBAcGFyYW1baW5dIHVybF9sb2FkZXIgQSBQUF9SZXNvdXJjZSBhbiBvcGVu
IFBQQl9VUkxMb2FkZXIgaW5zdGFuY2UuCisgKiBAcmV0dXJuIFBQX0ZBTFNFLgorICovCitzdGF0
aWMgUFBfQm9vbAorSW5zdGFuY2VfSGFuZGxlRG9jdW1lbnRMb2FkKFBQX0luc3RhbmNlIGluc3Rh
bmNlLCBQUF9SZXNvdXJjZSB1cmxfbG9hZGVyKQoreworICAvKiBOYUNsIG1vZHVsZXMgZG8gbm90
IG5lZWQgdG8gaGFuZGxlIHRoZSBkb2N1bWVudCBsb2FkIGZ1bmN0aW9uLiAqLworICByZXR1cm4g
UFBfRkFMU0U7Cit9CisKKworLyoqCisgKiBIYW5kbGVyIGZvciBtZXNzYWdlcyBjb21pbmcgaW4g
ZnJvbSB0aGUgYnJvd3NlciB2aWEgcG9zdE1lc3NhZ2UuICBUaGUKKyAqIEBhIHZhcl9tZXNzYWdl
IGNhbiBjb250YWluIGFueXRoaW5nOiBhIEpTT04gc3RyaW5nOyBhIHN0cmluZyB0aGF0IGVuY29k
ZXMKKyAqIG1ldGhvZCBuYW1lcyBhbmQgYXJndW1lbnRzOyBldGMuICBGb3IgZXhhbXBsZSwgeW91
IGNvdWxkIHVzZSBKU09OLnN0cmluZ2lmeQorICogaW4gdGhlIGJyb3dzZXIgdG8gY3JlYXRlIGEg
bWVzc2FnZSB0aGF0IGNvbnRhaW5zIGEgbWV0aG9kIG5hbWUgYW5kIHNvbWUKKyAqIHBhcmFtZXRl
cnMsIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKiAgIHZhciBqc29uX21lc3NhZ2UgPSBKU09OLnN0
cmluZ2lmeSh7ICJteU1ldGhvZCIgOiAiMy4xNDE1OSIgfSk7CisgKiAgIG5hY2xfbW9kdWxlLnBv
c3RNZXNzYWdlKGpzb25fbWVzc2FnZSk7CisgKiBPbiByZWNlaXB0IG9mIHRoaXMgbWVzc2FnZSBp
biBAYSB2YXJfbWVzc2FnZSwgeW91IGNvdWxkIHBhcnNlIHRoZSBKU09OIHRvCisgKiByZXRyaWV2
ZSB0aGUgbWV0aG9kIG5hbWUsIG1hdGNoIGl0IHRvIGEgZnVuY3Rpb24gY2FsbCwgYW5kIHRoZW4g
Y2FsbCBpdCB3aXRoCisgKiB0aGUgcGFyYW1ldGVyLgorICogQHBhcmFtW2luXSBpbnN0YW5jZSBU
aGUgaW5zdGFuY2UgSUQuCisgKiBAcGFyYW1baW5dIG1lc3NhZ2UgVGhlIGNvbnRlbnRzLCBjb3Bp
ZWQgYnkgdmFsdWUsIG9mIHRoZSBtZXNzYWdlIHNlbnQgZnJvbQorICogICAgIGJyb3dzZXIgdmlh
IHBvc3RNZXNzYWdlLgorICovCit2b2lkCitNZXNzYWdpbmdfSGFuZGxlTWVzc2FnZShQUF9JbnN0
YW5jZSBpbnN0YW5jZSwgc3RydWN0IFBQX1ZhciB2YXJfbWVzc2FnZSkKK3sKKyAgY2hhciogY29u
c3QgbWVzc2FnZSA9IHBydWJ5X3Zhcl90b19jc3RyKHZhcl9tZXNzYWdlKTsKKyAgc2l6ZV90IG1l
c3NhZ2VfbGVuID0gc3RybGVuKG1lc3NhZ2UpOworICBjdXJyZW50X2luc3RhbmNlID0gaW5zdGFu
Y2U7CisKKyAgaWYgKHN0cnN0cihtZXNzYWdlLCAiZXZhbDoiKSAhPSBOVUxMKSB7CisgICAgdm9s
YXRpbGUgVkFMVUUgc3JjOworICAgIHN0cnVjdCBQZXBwZXJJbnN0YW5jZSogY29uc3QgaW5zdGFu
Y2VfZGF0YSA9IEdFVF9QRVBQRVJfSU5TVEFOQ0UoKTsKKyAgICBpbnQgZXJyOworI2RlZmluZSBF
VkFMX1BSRUZJWF9MRU4gNQorICAgIHNyYyA9IHJiX3N0cl9uZXcobWVzc2FnZSArIEVWQUxfUFJF
RklYX0xFTiwgbWVzc2FnZV9sZW4gLSBFVkFMX1BSRUZJWF9MRU4pOworICAgIGluc3RhbmNlX2Rh
dGEtPmFzeW5jX2NhbGxfYXJncyA9ICh2b2lkKilzcmM7CisgICAgZXJyID0gcHRocmVhZF9jcmVh
dGUoJmluc3RhbmNlX2RhdGEtPnRoLCBOVUxMLCAmcHJ1YnlfZXZhbCwgaW5zdGFuY2VfZGF0YSk7
CisgICAgaWYgKGVycikgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwZXBwZXJfcnVieTpwdGhy
ZWFkX2NyZWF0ZTogJXNcbiIsIHN0cmVycm9yKGVycikpOworICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOworICAgIH0KKyAgICBwdGhyZWFkX2RldGFjaChpbnN0YW5jZV9kYXRhLT50aCk7CisgIH0K
KyAgZnJlZShtZXNzYWdlKTsKK30KKworLyoqCisgKiBFbnRyeSBwb2ludHMgZm9yIHRoZSBtb2R1
bGUuCisgKiBJbml0aWFsaXplIGluc3RhbmNlIGludGVyZmFjZSBhbmQgc2NyaXB0YWJsZSBvYmpl
Y3QgY2xhc3MuCisgKiBAcGFyYW1baW5dIGFfbW9kdWxlX2lkIE1vZHVsZSBJRAorICogQHBhcmFt
W2luXSBnZXRfYnJvd3Nlcl9pbnRlcmZhY2UgUG9pbnRlciB0byBQUEJfR2V0SW50ZXJmYWNlCisg
KiBAcmV0dXJuIFBQX09LIG9uIHN1Y2Nlc3MsIGFueSBvdGhlciB2YWx1ZSBvbiBmYWlsdXJlLgor
ICovCitQUF9FWFBPUlQgaW50MzJfdAorUFBQX0luaXRpYWxpemVNb2R1bGUoUFBfTW9kdWxlIGFf
bW9kdWxlX2lkLCBQUEJfR2V0SW50ZXJmYWNlIGdldF9icm93c2VyX2ludGVyZmFjZSkKK3sKKyAg
bW9kdWxlX2lkID0gYV9tb2R1bGVfaWQ7CisgIGNvcmVfaW50ZXJmYWNlID0gKFBQQl9Db3JlKiko
Z2V0X2Jyb3dzZXJfaW50ZXJmYWNlKFBQQl9DT1JFX0lOVEVSRkFDRSkpOworICBpZiAoY29yZV9p
bnRlcmZhY2UgPT0gTlVMTCkgcmV0dXJuIFBQX0VSUk9SX05PSU5URVJGQUNFOworCisgIHZhcl9p
bnRlcmZhY2UgPSAoUFBCX1ZhciopKGdldF9icm93c2VyX2ludGVyZmFjZShQUEJfVkFSX0lOVEVS
RkFDRSkpOworICBpZiAodmFyX2ludGVyZmFjZSA9PSBOVUxMKSByZXR1cm4gUFBfRVJST1JfTk9J
TlRFUkZBQ0U7CisKKyAgbWVzc2FnaW5nX2ludGVyZmFjZSA9IChQUEJfTWVzc2FnaW5nKikoZ2V0
X2Jyb3dzZXJfaW50ZXJmYWNlKFBQQl9NRVNTQUdJTkdfSU5URVJGQUNFKSk7CisgIGlmIChtZXNz
YWdpbmdfaW50ZXJmYWNlID09IE5VTEwpIHJldHVybiBQUF9FUlJPUl9OT0lOVEVSRkFDRTsKKwor
ICBsb2FkZXJfaW50ZXJmYWNlID0gKFBQQl9VUkxMb2FkZXIqKShnZXRfYnJvd3Nlcl9pbnRlcmZh
Y2UoUFBCX1VSTExPQURFUl9JTlRFUkZBQ0UpKTsKKyAgaWYgKGxvYWRlcl9pbnRlcmZhY2UgPT0g
TlVMTCkgcmV0dXJuIFBQX0VSUk9SX05PSU5URVJGQUNFOworCisgIHJlcXVlc3RfaW50ZXJmYWNl
ID0gKFBQQl9VUkxSZXF1ZXN0SW5mbyopKGdldF9icm93c2VyX2ludGVyZmFjZShQUEJfVVJMUkVR
VUVTVElORk9fSU5URVJGQUNFKSk7CisgIGlmIChyZXF1ZXN0X2ludGVyZmFjZSA9PSBOVUxMKSBy
ZXR1cm4gUFBfRVJST1JfTk9JTlRFUkZBQ0U7CisKKyAgcmVzcG9uc2VfaW50ZXJmYWNlID0gKFBQ
Ql9VUkxSZXNwb25zZUluZm8qKShnZXRfYnJvd3Nlcl9pbnRlcmZhY2UoUFBCX1VSTFJFU1BPTlNF
SU5GT19JTlRFUkZBQ0UpKTsKKyAgaWYgKHJlc3BvbnNlX2ludGVyZmFjZSA9PSBOVUxMKSByZXR1
cm4gUFBfRVJST1JfTk9JTlRFUkZBQ0U7CisKKyAgZmlsZXJlZl9pbnRlcmZhY2UgPSAoUFBCX0Zp
bGVSZWYqKShnZXRfYnJvd3Nlcl9pbnRlcmZhY2UoUFBCX0ZJTEVSRUZfSU5URVJGQUNFKSk7Cisg
IGlmIChmaWxlcmVmX2ludGVyZmFjZSA9PSBOVUxMKSByZXR1cm4gUFBfRVJST1JfTk9JTlRFUkZB
Q0U7CisKKyAgcmV0dXJuIHBydWJ5X2luaXQoKSA/IFBQX0VSUk9SX0ZBSUxFRCA6IFBQX09LOwor
fQorCisvKioKKyAqIFJldHVybnMgYW4gaW50ZXJmYWNlIHBvaW50ZXIgZm9yIHRoZSBpbnRlcmZh
Y2Ugb2YgdGhlIGdpdmVuIG5hbWUsIG9yIE5VTEwKKyAqIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90
IHN1cHBvcnRlZC4KKyAqIEBwYXJhbVtpbl0gaW50ZXJmYWNlX25hbWUgbmFtZSBvZiB0aGUgaW50
ZXJmYWNlCisgKiBAcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZQorICovCitQUF9FWFBP
UlQgY29uc3Qgdm9pZCoKK1BQUF9HZXRJbnRlcmZhY2UoY29uc3QgY2hhciogaW50ZXJmYWNlX25h
bWUpCit7CisgIGlmIChzdHJjbXAoaW50ZXJmYWNlX25hbWUsIFBQUF9JTlNUQU5DRV9JTlRFUkZB
Q0UpID09IDApIHsKKyAgICBzdGF0aWMgUFBQX0luc3RhbmNlIGluc3RhbmNlX2ludGVyZmFjZSA9
IHsKKyAgICAgICZJbnN0YW5jZV9EaWRDcmVhdGUsCisgICAgICAmSW5zdGFuY2VfRGlkRGVzdHJv
eSwKKyAgICAgICZJbnN0YW5jZV9EaWRDaGFuZ2VWaWV3LAorICAgICAgJkluc3RhbmNlX0RpZENo
YW5nZUZvY3VzLAorICAgICAgJkluc3RhbmNlX0hhbmRsZURvY3VtZW50TG9hZAorICAgIH07Cisg
ICAgcmV0dXJuICZpbnN0YW5jZV9pbnRlcmZhY2U7CisgIH0gZWxzZSBpZiAoc3RyY21wKGludGVy
ZmFjZV9uYW1lLCBQUFBfTUVTU0FHSU5HX0lOVEVSRkFDRSkgPT0gMCkgeworICAgIHN0YXRpYyBQ
UFBfTWVzc2FnaW5nIG1lc3NhZ2luZ19pbnRlcmZhY2UgPSB7CisgICAgICAmTWVzc2FnaW5nX0hh
bmRsZU1lc3NhZ2UKKyAgICB9OworICAgIHJldHVybiAmbWVzc2FnaW5nX2ludGVyZmFjZTsKKyAg
fQorICByZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBDYWxsZWQgYmVmb3JlIHRoZSBwbHVnaW4g
bW9kdWxlIGlzIHVubG9hZGVkLgorICovCitQUF9FWFBPUlQgdm9pZAorUFBQX1NodXRkb3duTW9k
dWxlKCkKK3sKKyAgcnVieV9jbGVhbnVwKDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CisgKiBPdmVyd3JpdGVzIHJiX2ZpbGVfbG9hZF9vaworICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
Kworc3RhdGljIHZvaWQKK2xvYWRfb2tfaW50ZXJuYWwodm9pZCogZGF0YSwgaW50MzJfdCB1bnVz
ZWQpCit7CisgIC8qIFBQQVBJIG1haW4gdGhyZWFkICovCisgIHN0cnVjdCBQZXBwZXJJbnN0YW5j
ZSogY29uc3QgaW5zdGFuY2UgPSAoc3RydWN0IFBlcHBlckluc3RhbmNlKilkYXRhOworICBjb25z
dCBjaGFyICpjb25zdCBwYXRoID0gKGNvbnN0IGNoYXIqKWluc3RhbmNlLT5hc3luY19jYWxsX2Fy
Z3M7CisgIFBQX1Jlc291cmNlIHJlcTsKKyAgaW50IHJlc3VsdDsKKworICBpbnN0YW5jZS0+dXJs
X2xvYWRlciA9IGxvYWRlcl9pbnRlcmZhY2UtPkNyZWF0ZShpbnN0YW5jZS0+aW5zdGFuY2UpOwor
ICByZXEgPSByZXF1ZXN0X2ludGVyZmFjZS0+Q3JlYXRlKGluc3RhbmNlLT5pbnN0YW5jZSk7Cisg
IHJlcXVlc3RfaW50ZXJmYWNlLT5TZXRQcm9wZXJ0eSgKKyAgICAgIHJlcSwgUFBfVVJMUkVRVUVT
VFBST1BFUlRZX01FVEhPRCwgcHJ1YnlfY3N0cl90b192YXIoIkhFQUQiKSk7CisgIHJlcXVlc3Rf
aW50ZXJmYWNlLT5TZXRQcm9wZXJ0eSgKKyAgICAgIHJlcSwgUFBfVVJMUkVRVUVTVFBST1BFUlRZ
X1VSTCwgcHJ1YnlfY3N0cl90b192YXIocGF0aCkpOworCisgIHJlc3VsdCA9IGxvYWRlcl9pbnRl
cmZhY2UtPk9wZW4oCisgICAgICBpbnN0YW5jZS0+dXJsX2xvYWRlciwgcmVxLAorICAgICAgUFBf
TWFrZUNvbXBsZXRpb25DYWxsYmFjayhwcnVieV9hc3luY19yZXR1cm5faW50LCBpbnN0YW5jZSkp
OworICBpZiAocmVzdWx0ICE9IFBQX09LX0NPTVBMRVRJT05QRU5ESU5HKSB7CisgICAgcHJ1Ynlf
YXN5bmNfcmV0dXJuX2ludChpbnN0YW5jZSwgcmVzdWx0KTsKKyAgfQorfQorCitzdGF0aWMgdm9p
ZAorcHJ1YnlfZmlsZV9mZXRjaF9jaGVja19yZXNwb25zZSh2b2lkKiBkYXRhLCBpbnQzMl90IHVu
dXNlZCkKK3sKKyAgLyogUFBBUEkgbWFpbiB0aHJlYWQgKi8KKyAgUFBfUmVzb3VyY2UgcmVzOwor
ICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGNvbnN0IGluc3RhbmNlID0gKHN0cnVjdCBQZXBwZXJJ
bnN0YW5jZSopZGF0YTsKKworICByZXMgPSBsb2FkZXJfaW50ZXJmYWNlLT5HZXRSZXNwb25zZUlu
Zm8oaW5zdGFuY2UtPnVybF9sb2FkZXIpOworICBpZiAocmVzKSB7CisgICAgc3RydWN0IFBQX1Zh
ciBzdGF0dXMgPQorICAgICAgICByZXNwb25zZV9pbnRlcmZhY2UtPkdldFByb3BlcnR5KHJlcywg
UFBfVVJMUkVTUE9OU0VQUk9QRVJUWV9TVEFUVVNDT0RFKTsKKyAgICBpZiAoc3RhdHVzLnR5cGUg
PT0gUFBfVkFSVFlQRV9JTlQzMikgeworICAgICAgcHJ1YnlfYXN5bmNfcmV0dXJuX2ludChpbnN0
YW5jZSwgc3RhdHVzLnZhbHVlLmFzX2ludCAvIDEwMCA9PSAyID8gUFBfT0sgOiBQUF9FUlJPUl9G
QUlMRUQpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG1lc3NhZ2lu
Z19pbnRlcmZhY2UtPlBvc3RNZXNzYWdlKAorICAgICAgICAgIGluc3RhbmNlLT5pbnN0YW5jZSwg
cHJ1YnlfY3N0cl90b192YXIoIlVuZXhwZWN0ZWQgdHlwZTogUmVzcG9uc2VJbmZvSW50ZXJmYWNl
OjpHZXRQcm9wZXJ0eSIpKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgbWVzc2FnaW5nX2lu
dGVyZmFjZS0+UG9zdE1lc3NhZ2UoCisgICAgICAgIGluc3RhbmNlLT5pbnN0YW5jZSwgcHJ1Ynlf
Y3N0cl90b192YXIoIkZhaWxlZCB0byBvcGVuIFVSTDogVVJMTG9hZGVySW50ZXJmYWNlOjpHZXRS
ZXNwb25zZUluZm8iKSk7CisgIH0KKyAgcHJ1YnlfYXN5bmNfcmV0dXJuX2ludChpbnN0YW5jZSwg
UFBfRVJST1JfRkFJTEVEKTsKK30KKworCitpbnQKK3JiX2ZpbGVfbG9hZF9vayhjb25zdCBjaGFy
ICpwYXRoKQoreworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGNvbnN0IGluc3RhbmNlID0gR0VU
X1BFUFBFUl9JTlNUQU5DRSgpOworICBpZiAocGF0aFswXSA9PSAnLicgJiYgcGF0aFsxXSA9PSAn
LycpIHBhdGggKz0gMjsKKworICBpbnN0YW5jZS0+YXN5bmNfY2FsbF9hcmdzID0gKHZvaWQqKXBh
dGg7CisgIGNvcmVfaW50ZXJmYWNlLT5DYWxsT25NYWluVGhyZWFkKAorICAgICAgMCwgUFBfTWFr
ZUNvbXBsZXRpb25DYWxsYmFjayhsb2FkX29rX2ludGVybmFsLCBpbnN0YW5jZSksIDApOworICBp
ZiAocHRocmVhZF9jb25kX3dhaXQoJmluc3RhbmNlLT5jb25kLCAmaW5zdGFuY2UtPm11dGV4KSkg
eworICAgIHBlcnJvcigicGVwcGVyLXJ1Ynk6cHRocmVhZF9jb25kX3dhaXQiKTsKKyAgICByZXR1
cm4gMDsKKyAgfQorICBpZiAoaW5zdGFuY2UtPmFzeW5jX2NhbGxfcmVzdWx0LmFzX2ludCAhPSBQ
UF9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gVVJMOiAlZDogJXNc
biIsCisgICAgICAgICAgICBpbnN0YW5jZS0+YXN5bmNfY2FsbF9yZXN1bHQuYXNfaW50LCBwYXRo
KTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGNvcmVfaW50ZXJmYWNlLT5DYWxsT25NYWluVGhy
ZWFkKAorICAgICAgMCwgUFBfTWFrZUNvbXBsZXRpb25DYWxsYmFjayhwcnVieV9maWxlX2ZldGNo
X2NoZWNrX3Jlc3BvbnNlLCBpbnN0YW5jZSksIDApOworICBpZiAocHRocmVhZF9jb25kX3dhaXQo
Jmluc3RhbmNlLT5jb25kLCAmaW5zdGFuY2UtPm11dGV4KSkgeworICAgIHBlcnJvcigicGVwcGVy
LXJ1Ynk6cHRocmVhZF9jb25kX3dhaXQiKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4g
aW5zdGFuY2UtPmFzeW5jX2NhbGxfcmVzdWx0LmFzX2ludCA9PSBQUF9PSzsKK30KKworLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorICogT3ZlcndyaXRlcyByYl9sb2FkX2ZpbGUKKyAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitsb2FkX2ZpbGVfaW50ZXJuYWwodm9pZCogZGF0
YSwgaW50MzJfdCB1bnVzZWQpCit7CisgIC8qIFBQQVBJIG1haW4gdGhyZWFkICovCisgIHN0cnVj
dCBQZXBwZXJJbnN0YW5jZSogY29uc3QgaW5zdGFuY2UgPSAoc3RydWN0IFBlcHBlckluc3RhbmNl
KilkYXRhOworICBjb25zdCBjaGFyICpjb25zdCBwYXRoID0gKGNvbnN0IGNoYXIqKWluc3RhbmNl
LT5hc3luY19jYWxsX2FyZ3M7CisgIFBQX1Jlc291cmNlIHJlcTsKKyAgaW50IHJlc3VsdDsKKwor
ICBpbnN0YW5jZS0+dXJsX2xvYWRlciA9IGxvYWRlcl9pbnRlcmZhY2UtPkNyZWF0ZShpbnN0YW5j
ZS0+aW5zdGFuY2UpOworICByZXEgPSByZXF1ZXN0X2ludGVyZmFjZS0+Q3JlYXRlKGluc3RhbmNl
LT5pbnN0YW5jZSk7CisgIHJlcXVlc3RfaW50ZXJmYWNlLT5TZXRQcm9wZXJ0eSgKKyAgICAgIHJl
cSwgUFBfVVJMUkVRVUVTVFBST1BFUlRZX01FVEhPRCwgcHJ1YnlfY3N0cl90b192YXIoIkdFVCIp
KTsKKyAgcmVxdWVzdF9pbnRlcmZhY2UtPlNldFByb3BlcnR5KAorICAgICAgcmVxLCBQUF9VUkxS
RVFVRVNUUFJPUEVSVFlfVVJMLCBwcnVieV9jc3RyX3RvX3ZhcihwYXRoKSk7CisKKyAgcmVzdWx0
ID0gbG9hZGVyX2ludGVyZmFjZS0+T3BlbigKKyAgICAgIGluc3RhbmNlLT51cmxfbG9hZGVyLCBy
ZXEsCisgICAgICBQUF9NYWtlQ29tcGxldGlvbkNhbGxiYWNrKHBydWJ5X2FzeW5jX3JldHVybl9p
bnQsIGluc3RhbmNlKSk7CisgIGlmIChyZXN1bHQgIT0gUFBfT0tfQ09NUExFVElPTlBFTkRJTkcp
IHsKKyAgICBwcnVieV9hc3luY19yZXR1cm5faW50KGluc3RhbmNlLCByZXN1bHQpOworICB9Cit9
CisKK3N0YXRpYyB2b2lkCitsb2FkX2ZpbGVfcmVhZF9jb250ZW50c19jYWxsYmFjayh2b2lkICpk
YXRhLCBpbnQgcmVzdWx0KQoreworICBzdHJ1Y3QgUGVwcGVySW5zdGFuY2UqIGNvbnN0IGluc3Rh
bmNlID0gKHN0cnVjdCBQZXBwZXJJbnN0YW5jZSopZGF0YTsKKyAgaWYgKHJlc3VsdCA+IDApIHsK
KyAgICByYl9zdHJfYnVmX2NhdChpbnN0YW5jZS0+YXN5bmNfY2FsbF9yZXN1bHQuYXNfdmFsdWUs
IAorICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLT5idWYsIHJlc3VsdCk7CisgICAgbG9hZGVy
X2ludGVyZmFjZS0+UmVhZFJlc3BvbnNlQm9keSgKKyAgICAgICAgaW5zdGFuY2UtPnVybF9sb2Fk
ZXIsIGluc3RhbmNlLT5idWYsIDEwMDAsIFBQX01ha2VDb21wbGV0aW9uQ2FsbGJhY2sobG9hZF9m
aWxlX3JlYWRfY29udGVudHNfY2FsbGJhY2ssIGluc3RhbmNlKSk7CisgIH0KKyAgZWxzZSBpZiAo
cmVzdWx0ID09IDApIHsKKyAgICBwcnVieV9hc3luY19yZXR1cm5fdmFsdWUoZGF0YSwgaW5zdGFu
Y2UtPmFzeW5jX2NhbGxfcmVzdWx0LmFzX3ZhbHVlKTsKKyAgfQorICBlbHNlIHsKKyAgICBwcnVi
eV9hc3luY19yZXR1cm5fdmFsdWUoZGF0YSwgSU5UMkZJWChyZXN1bHQpKTsKKyAgfQorfQorCitz
dGF0aWMgdm9pZAorbG9hZF9maWxlX3JlYWRfY29udGVudHModm9pZCAqZGF0YSwgaW50IHJlc3Vs
dCkKK3sKKyAgc3RydWN0IFBlcHBlckluc3RhbmNlKiBjb25zdCBpbnN0YW5jZSA9IChzdHJ1Y3Qg
UGVwcGVySW5zdGFuY2UqKWRhdGE7CisgIGluc3RhbmNlLT5hc3luY19jYWxsX3Jlc3VsdC5hc192
YWx1ZSA9IHJiX3N0cl9uZXcoMCwgMCk7CisgIGxvYWRlcl9pbnRlcmZhY2UtPlJlYWRSZXNwb25z
ZUJvZHkoCisgICAgICBpbnN0YW5jZS0+dXJsX2xvYWRlciwgaW5zdGFuY2UtPmJ1ZiwgMTAwMCwg
UFBfTWFrZUNvbXBsZXRpb25DYWxsYmFjayhsb2FkX2ZpbGVfcmVhZF9jb250ZW50c19jYWxsYmFj
aywgaW5zdGFuY2UpKTsKK30KKwordm9pZCoKK3JiX2xvYWRfZmlsZShjb25zdCBjaGFyICpwYXRo
KQoreworICBjb25zdCBjaGFyICpyZWFsX3BhdGg7CisgIHN0cnVjdCBQZXBwZXJJbnN0YW5jZSog
aW5zdGFuY2U7CisgIGlmIChwYXRoWzBdICE9ICcuJyB8fCBwYXRoWzFdICE9ICcvJykgcGF0aCAr
PSAyOworCisgIGluc3RhbmNlID0gR0VUX1BFUFBFUl9JTlNUQU5DRSgpOworCisgIGluc3RhbmNl
LT5hc3luY19jYWxsX2FyZ3MgPSAodm9pZCopcGF0aDsKKyAgY29yZV9pbnRlcmZhY2UtPkNhbGxP
bk1haW5UaHJlYWQoCisgICAgICAwLCBQUF9NYWtlQ29tcGxldGlvbkNhbGxiYWNrKGxvYWRfZmls
ZV9pbnRlcm5hbCwgaW5zdGFuY2UpLCAwKTsKKyAgaWYgKHB0aHJlYWRfY29uZF93YWl0KCZpbnN0
YW5jZS0+Y29uZCwgJmluc3RhbmNlLT5tdXRleCkpIHsKKyAgICBwZXJyb3IoInBlcHBlci1ydWJ5
OnB0aHJlYWRfY29uZF93YWl0Iik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKGluc3RhbmNl
LT5hc3luY19jYWxsX3Jlc3VsdC5hc19pbnQgIT0gUFBfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZhaWxlZCB0byBvcGVuIFVSTDogJWQ6ICVzXG4iLAorICAgICAgICAgICAgaW5zdGFuY2Ut
PmFzeW5jX2NhbGxfcmVzdWx0LmFzX2ludCwgcGF0aCk7CisgICAgcmV0dXJuIDA7CisgIH0KKwor
ICBjb3JlX2ludGVyZmFjZS0+Q2FsbE9uTWFpblRocmVhZCgKKyAgICAgIDAsIFBQX01ha2VDb21w
bGV0aW9uQ2FsbGJhY2socHJ1YnlfZmlsZV9mZXRjaF9jaGVja19yZXNwb25zZSwgaW5zdGFuY2Up
LCAwKTsKKyAgaWYgKHB0aHJlYWRfY29uZF93YWl0KCZpbnN0YW5jZS0+Y29uZCwgJmluc3RhbmNl
LT5tdXRleCkpIHsKKyAgICBwZXJyb3IoInBlcHBlci1ydWJ5OnB0aHJlYWRfY29uZF93YWl0Iik7
CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKGluc3RhbmNlLT5hc3luY19jYWxsX3Jlc3VsdC5h
c19pbnQgIT0gUFBfT0spIHJldHVybiAwOworCisgIGNvcmVfaW50ZXJmYWNlLT5DYWxsT25NYWlu
VGhyZWFkKAorICAgICAgMCwgUFBfTWFrZUNvbXBsZXRpb25DYWxsYmFjayhsb2FkX2ZpbGVfcmVh
ZF9jb250ZW50cywgaW5zdGFuY2UpLCAwKTsKKyAgaWYgKHB0aHJlYWRfY29uZF93YWl0KCZpbnN0
YW5jZS0+Y29uZCwgJmluc3RhbmNlLT5tdXRleCkpIHsKKyAgICBwZXJyb3IoInBlcHBlci1ydWJ5
OnB0aHJlYWRfY29uZF93YWl0Iik7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKEZJWE5VTV9Q
KGluc3RhbmNlLT5hc3luY19jYWxsX3Jlc3VsdC5hc192YWx1ZSkpIHsKKyAgICByZXR1cm4gMDsK
KyAgfQorICBlbHNlIGlmIChSQl9UWVBFX1AoaW5zdGFuY2UtPmFzeW5jX2NhbGxfcmVzdWx0LmFz
X3ZhbHVlLCBUX1NUUklORykpIHsKKyAgICBWQUxVRSBzdHIgPSBpbnN0YW5jZS0+YXN5bmNfY2Fs
bF9yZXN1bHQuYXNfdmFsdWU7CisgICAgcmV0dXJuIHJiX2NvbXBpbGVfY3N0cihwYXRoLCBSU1RS
SU5HX1BUUihzdHIpLCBSU1RSSU5HX0xFTihzdHIpLCAwKTsKKyAgfQorICBlbHNlIHsKKyAgICBy
ZXR1cm4gMDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbmFjbC9yZXNvdXJjZS5oIGIvbmFjbC9yZXNv
dXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Y2E1M2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9uYWNsL3Jlc291cmNlLmgKQEAgLTAsMCArMSw4IEBACisvKgorICogQ29w
eXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEF1dGhvcjog
eXVndWlAZ29vZ2xlLmNvbSAoWXVndWkgU29ub2RhKQorICogKi8KKyNpZm5kZWYgUlVCWV9OQUNM
X1JFU09VUkNFX0gKKyNkZWZpbmUgUlVCWV9OQUNMX1JFU09VUkNFX0gKK2ludCBnZXRydXNhZ2Uo
aW50IHdobywgc3RydWN0IHJ1c2FnZSAqdXNhZ2UpOworI2VuZGlmCmRpZmYgLS1naXQgYS9uYWNs
L3NlbGVjdC5oIGIvbmFjbC9zZWxlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45MjE3MjFhCi0tLSAvZGV2L251bGwKKysrIGIvbmFjbC9zZWxlY3QuaApAQCAtMCwwICsx
LDcgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisvLyBBdXRob3I6IHl1Z3VpQGdvb2dsZS5jb20gKFl1Z3VpIFNvbm9kYSkKKyNpZm5kZWYgUlVC
WV9OQUNMX1NFTEVDVF9ICisjZGVmaW5lIFJVQllfTkFDTF9TRUxFQ1RfSAoraW50IHNlbGVjdChp
bnQgbnVtX2ZkcywgZmRfc2V0ICppbl9mZHMsIGZkX3NldCAqb3V0X2ZkcywKKyAgICAgICAgICAg
ZmRfc2V0ICpleF9mZHMsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0KTsKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvbmFjbC9zaWduYWwuaCBiL25hY2wvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTQ4MzJkZQotLS0gL2Rldi9udWxsCisrKyBiL25hY2wvc2lnbmFsLmgK
QEAgLTAsMCArMSw2IEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorLy8gQXV0aG9yOiB5dWd1aUBnb29nbGUuY29tIChZdWd1aSBTb25vZGEpCisj
aWZuZGVmIFJVQllfTkFDTF9TSUdOQUxfSAorI2RlZmluZSBSVUJZX05BQ0xfU0lHTkFMX0gKK2lu
dCBraWxsKHBpZF90IHBpZCwgaW50IHNpZ25hbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL25hY2wv
c3RhdC5oIGIvbmFjbC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2JlNDBhZAotLS0gL2Rldi9udWxsCisrKyBiL25hY2wvc3RhdC5oCkBAIC0wLDAgKzEsMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogQXV0aG9yOiB5dWd1aUBnb29nbGUuY29tIChZdWd1aSBTb25vZGEpCisgKiAqLworI2lmbmRl
ZiBSVUJZX05BQ0xfU1RBVF9ICisjZGVmaW5lIFJVQllfTkFDTF9TVEFUX0gKK21vZGVfdCB1bWFz
ayhtb2RlX3QgbWFzayk7CitzdHJ1Y3Qgc3RhdDsKK2ludCBsc3RhdChjb25zdCBjaGFyKiBwYXRo
LCBzdHJ1Y3Qgc3RhdCogcmVzdWx0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmFjbC91bmlzdGQu
aCBiL25hY2wvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5
NzM5MAotLS0gL2Rldi9udWxsCisrKyBiL25hY2wvdW5pc3RkLmgKQEAgLTAsMCArMSw5IEBACisv
LyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gQXV0
aG9yOiB5dWd1aUBnb29nbGUuY29tIChZdWd1aSBTb25vZGEpCisjaWZuZGVmIFJVQllfTkFDTF9V
TklTVERfSAorI2RlZmluZSBSVUJZX05BQ0xfVU5JU1REX0gKK2ludCBzZXRldWlkKHBpZF90IHBp
ZCk7CitpbnQgc2V0ZWdpZChwaWRfdCBwaWQpOworaW50IHRydW5jYXRlKGNvbnN0IGNoYXIqIHBh
dGgsIG9mZl90IG5ld19zaXplKTsKK2ludCBmdHJ1bmNhdGUoaW50IGZkLCBvZmZfdCBuZXdfc2l6
ZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL25hY2wvdXRpbWUuaCBiL25hY2wvdXRpbWUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjkxMDA1Ci0tLSAvZGV2L251bGwKKysr
IGIvbmFjbC91dGltZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBH
b29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQXV0aG9yOiB5dWd1aUBnb29nbGUu
Y29tIChZdWd1aSBTb25vZGEpCisgKi8KKworI2lmbmRlZiBSVUJZX05BQ0xfVVRJTUVfSAorI2Rl
ZmluZSBSVUJZX05BQ0xfVVRJTUVfSAorI2luY2x1ZGUgPHV0aW1lLmg+CitpbnQgdXRpbWUoY29u
c3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcyk7CitpbnQgdXRp
bWVzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXSk7
CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Byb2Nlc3MuYyBiL3Byb2Nlc3MuYwppbmRleCBjNWU2ZWI3
Li5jZjkxNDRmIDEwMDY0NAotLS0gYS9wcm9jZXNzLmMKKysrIGIvcHJvY2Vzcy5jCkBAIC02Miw2
ICs2MiwxMSBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmIGRlZmluZWQo
X19uYXRpdmVfY2xpZW50X18pICYmIGRlZmluZWQoTkFDTF9ORVdMSUIpCisjIGluY2x1ZGUgIm5h
Y2wvc3RhdC5oIgorIyBpbmNsdWRlICJuYWNsL3VuaXN0ZC5oIgorI2VuZGlmCisKIAogI2lmZGVm
IEhBVkVfU1lTX1RJTUVTX0gKICNpbmNsdWRlIDxzeXMvdGltZXMuaD4KQEAgLTEwNDIsNyArMTA0
Nyw3IEBAIHNlY3VyaXR5KGNvbnN0IGNoYXIgKnN0cikKICAgICB9CiB9CiAKLSNpZmRlZiBIQVZF
X0ZPUksKKyNpZiBkZWZpbmVkKEhBVkVfRk9SSykgJiYgIWRlZmluZWQoX19uYXRpdmVfY2xpZW50
X18pCiAjZGVmaW5lIHRyeV93aXRoX3NoKHByb2csIGFyZ3YpICgoc2F2ZWRfZXJybm8gPT0gRU5P
RVhFQykgPyBleGVjX3dpdGhfc2goKHByb2cpLCAoYXJndikpIDogKHZvaWQpMCkKIHN0YXRpYyB2
b2lkCiBleGVjX3dpdGhfc2goY29uc3QgY2hhciAqcHJvZywgY2hhciAqKmFyZ3YpCkBAIC0xMDYx
LDEzICsxMDY2LDIwIEBAIGV4ZWNfd2l0aF9zaChjb25zdCBjaGFyICpwcm9nLCBjaGFyICoqYXJn
dikKICNkZWZpbmUgQUxMT0NfQVJHVl9XSVRIX1NUUihuLCB2LCBzLCBsKSBcCiAgICAgKGNoYXIg
KiopKCgocykgPSBBTExPQ1ZfTihjaGFyLCAodiksIEFSR1ZfU0laRShuKSArIChsKSkgKyBBUkdW
X1NJWkUobikpIC0gQVJHVl9TSVpFKG4pKQogCisjaWZkZWYgX19uYXRpdmVfY2xpZW50X18KK3N0
YXRpYyBpbnQKK3Byb2NfZXhlY192KGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcm9nKQorewor
ICByYl9ub3RpbXBsZW1lbnQoKTsKK30KKyNlbHNlCiBzdGF0aWMgaW50CiBwcm9jX2V4ZWNfdihj
aGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJvZykKIHsKICAgICBjaGFyIGZidWZbTUFYUEFUSExF
Tl07Ci0jaWYgZGVmaW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKE9TMikKKyMgaWYgZGVmaW5lZChf
X0VNWF9fKSB8fCBkZWZpbmVkKE9TMikKICAgICBjaGFyICoqbmV3X2FyZ3YgPSBOVUxMOwotI2Vu
ZGlmCisjIGVuZGlmCiAKICAgICBpZiAoIXByb2cpCiAJcHJvZyA9IGFyZ3ZbMF07CkBAIC0xMDc3
LDkgKzEwODksOSBAQCBwcm9jX2V4ZWNfdihjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJvZykK
IAlyZXR1cm4gLTE7CiAgICAgfQogCi0jaWYgZGVmaW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKE9T
MikKKyMgaWYgZGVmaW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKE9TMikKICAgICB7Ci0jZGVmaW5l
IENPTU1BTkQgImNtZC5leGUiCisjICBkZWZpbmUgQ09NTUFORCAiY21kLmV4ZSIKIAljaGFyICpl
eHRlbnNpb247CiAKIAlpZiAoKGV4dGVuc2lvbiA9IHN0cnJjaHIocHJvZywgJy4nKSkgIT0gTlVM
TCAmJiBTVFJDQVNFQ01QKGV4dGVuc2lvbiwgIi5iYXQiKSA9PSAwKSB7CkBAIC0xMTA0LDE4ICsx
MTE2LDE5IEBAIHByb2NfZXhlY192KGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcm9nKQogCSAg
ICB9CiAJfQogICAgIH0KLSNlbmRpZiAvKiBfX0VNWF9fICovCisjIGVuZGlmIC8qIF9fRU1YX18g
Ki8KICAgICBiZWZvcmVfZXhlYygpOwogICAgIGV4ZWN2KHByb2csIGFyZ3YpOwogICAgIHByZXNl
cnZpbmdfZXJybm8odHJ5X3dpdGhfc2gocHJvZywgYXJndik7IGFmdGVyX2V4ZWMoKSk7Ci0jaWYg
ZGVmaW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKE9TMikKKyMgaWYgZGVmaW5lZChfX0VNWF9fKSB8
fCBkZWZpbmVkKE9TMikKICAgICBpZiAobmV3X2FyZ3YpIHsKIAl4ZnJlZShuZXdfYXJndlswXSk7
CiAJeGZyZWUobmV3X2FyZ3YpOwogICAgIH0KLSNlbmRpZgorIyBlbmRpZgogICAgIHJldHVybiAt
MTsKIH0KKyNlbmRpZgogCiBpbnQKIHJiX3Byb2NfZXhlY19uKGludCBhcmdjLCBWQUxVRSAqYXJn
diwgY29uc3QgY2hhciAqcHJvZykKQEAgLTExMzcsNiArMTE1MCwxMyBAQCByYl9wcm9jX2V4ZWNf
bihpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIGNvbnN0IGNoYXIgKnByb2cpCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAorI2lmZGVmIF9fbmF0aXZlX2NsaWVudF9fCitpbnQKK3JiX3Byb2NfZXhlYyhjb25z
dCBjaGFyICpzdHIpCit7CisgIHJiX25vdGltcGxlbWVudCgpOworfQorI2Vsc2UKIGludAogcmJf
cHJvY19leGVjKGNvbnN0IGNoYXIgKnN0cikKIHsKQEAgLTEyMDYsNiArMTIyNiw3IEBAIHJiX3By
b2NfZXhlYyhjb25zdCBjaGFyICpzdHIpCiAgICAgcmV0dXJuIHJldDsKICNlbmRpZgkvKiBfV0lO
MzIgKi8KIH0KKyNlbmRpZgogCiBlbnVtIHsKICAgICBFWEVDX09QVElPTl9QR1JPVVAsCmRpZmYg
LS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jCmluZGV4IGUxYjc1N2UuLmU5NDYzMzcgMTAwNjQ0
Ci0tLSBhL3NpZ25hbC5jCisrKyBiL3NpZ25hbC5jCkBAIC0xOCw2ICsxOCwxMCBAQAogI2luY2x1
ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSAiYXRvbWljLmgiCiAKKyNpZiBkZWZpbmVkKF9fbmF0aXZl
X2NsaWVudF9fKSAmJiBkZWZpbmVkKE5BQ0xfTkVXTElCKQorIyBpbmNsdWRlICJuYWNsL3NpZ25h
bC5oIgorI2VuZGlmCisKICNpZmRlZiBORUVEX1JVQllfQVRPTUlDX0VYQ0hBTkdFCiByYl9hdG9t
aWNfdAogcnVieV9hdG9taWNfZXhjaGFuZ2UocmJfYXRvbWljX3QgKnB0ciwgcmJfYXRvbWljX3Qg
dmFsKQpAQCAtNDE3LDggKzQyMSw2IEBAIHR5cGVkZWYgUkVUU0lHVFlQRSBydWJ5X3NpZ2FjdGlv
bl90KGludCk7CiAjZGVmaW5lIFNJR0lORk9fQVJHCiAjZW5kaWYKIAotI2lmZGVmIFBPU0lYX1NJ
R05BTAotCiAjaWZkZWYgVVNFX1NJR0FMVFNUQUNLCiAvKiBhbHRlcm5hdGUgc3RhY2sgZm9yIFNJ
R1NFR1YgKi8KIHZvaWQKQEAgLTQzNyw2ICs0MzksNyBAQCByYl9yZWdpc3Rlcl9zaWdhbHRzdGFj
ayhyYl90aHJlYWRfdCAqdGgpCiB9CiAjZW5kaWYgLyogVVNFX1NJR0FMVFNUQUNLICovCiAKKyNp
ZmRlZiBQT1NJWF9TSUdOQUwKIHN0YXRpYyBzaWdoYW5kbGVyX3QKIHJ1Ynlfc2lnbmFsKGludCBz
aWdudW0sIHNpZ2hhbmRsZXJfdCBoYW5kbGVyKQogewpkaWZmIC0tZ2l0IGEvdGhyZWFkLmMgYi90
aHJlYWQuYwppbmRleCAyNzUwNGU1Li5jY2YzNTBlIDEwMDY0NAotLS0gYS90aHJlYWQuYworKysg
Yi90aHJlYWQuYwpAQCAtMjQyMCw2ICsyNDIwLDExIEBAIHJiX2ZkX2R1cChyYl9mZHNldF90ICpk
c3QsIGNvbnN0IHJiX2Zkc2V0X3QgKnNyYykKICAgICBtZW1jcHkoZHN0LT5mZHNldCwgc3JjLT5m
ZHNldCwgc2l6ZSk7CiB9CiAKKyNpZmRlZiBfX25hdGl2ZV9jbGllbnRfXworaW50IHNlbGVjdChp
bnQgbmZkcywgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICBm
ZF9zZXQgKmV4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQpOworI2VuZGlmCisKIGlu
dAogcmJfZmRfc2VsZWN0KGludCBuLCByYl9mZHNldF90ICpyZWFkZmRzLCByYl9mZHNldF90ICp3
cml0ZWZkcywgcmJfZmRzZXRfdCAqZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCkK
IHsKQEAgLTMyOTgsNyArMzMwMyw5IEBAIG11dGV4X2ZyZWUodm9pZCAqcHRyKQogCSAgICBpZiAo
ZXJyKSByYl9idWcoIiVzIiwgZXJyKTsKIAl9CiAJbmF0aXZlX211dGV4X2Rlc3Ryb3koJm11dGV4
LT5sb2NrKTsKKyNpZmRlZiBIQVZFX1BUSFJFQURfQ09ORF9JTklUSUFMSVpFCiAJbmF0aXZlX2Nv
bmRfZGVzdHJveSgmbXV0ZXgtPmNvbmQpOworI2VuZGlmCiAgICAgfQogICAgIHJ1YnlfeGZyZWUo
cHRyKTsKIH0KQEAgLTMzMzMsNyArMzM0MCw5IEBAIG11dGV4X2FsbG9jKFZBTFVFIGtsYXNzKQog
CiAgICAgb2JqID0gVHlwZWREYXRhX01ha2VfU3RydWN0KGtsYXNzLCByYl9tdXRleF90LCAmbXV0
ZXhfZGF0YV90eXBlLCBtdXRleCk7CiAgICAgbmF0aXZlX211dGV4X2luaXRpYWxpemUoJm11dGV4
LT5sb2NrKTsKKyNpZmRlZiBIQVZFX1BUSFJFQURfQ09ORF9JTklUSUFMSVpFCiAgICAgbmF0aXZl
X2NvbmRfaW5pdGlhbGl6ZSgmbXV0ZXgtPmNvbmQsIFJCX0NPTkRBVFRSX0NMT0NLX01PTk9UT05J
Qyk7CisjZW5kaWYKICAgICByZXR1cm4gb2JqOwogfQogCkBAIC00NzgxLDQgKzQ3OTAsMyBAQCBy
Yl9yZXNldF9jb3ZlcmFnZXModm9pZCkKICAgICBHRVRfVk0oKS0+Y292ZXJhZ2VzID0gUWZhbHNl
OwogICAgIHJiX3JlbW92ZV9ldmVudF9ob29rKHVwZGF0ZV9jb3ZlcmFnZSk7CiB9Ci0KZGlmZiAt
LWdpdCBhL3RocmVhZF9wdGhyZWFkLmMgYi90aHJlYWRfcHRocmVhZC5jCmluZGV4IGRlODMyNWUu
LjYxYjkzZTEgMTAwNjQ0Ci0tLSBhL3RocmVhZF9wdGhyZWFkLmMKKysrIGIvdGhyZWFkX3B0aHJl
YWQuYwpAQCAtMjcsNiArMjcsOSBAQAogI2lmIEhBVkVfU1lTX1BSQ1RMX0gKICNpbmNsdWRlIDxz
eXMvcHJjdGwuaD4KICNlbmRpZgorI2lmIGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pICYmIGRl
ZmluZWQoTkFDTF9ORVdMSUIpCisjIGluY2x1ZGUgIm5hY2wvc2VsZWN0LmgiCisjZW5kaWYKIAog
c3RhdGljIHZvaWQgbmF0aXZlX211dGV4X2xvY2socHRocmVhZF9tdXRleF90ICpsb2NrKTsKIHN0
YXRpYyB2b2lkIG5hdGl2ZV9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90ICpsb2NrKTsKQEAg
LTEzNyw5ICsxNDAsMTEgQEAgc3RhdGljIHZvaWQKIGd2bF9pbml0KHJiX3ZtX3QgKnZtKQogewog
ICAgIG5hdGl2ZV9tdXRleF9pbml0aWFsaXplKCZ2bS0+Z3ZsLmxvY2spOworI2lmZGVmIEhBVkVf
UFRIUkVBRF9DT05EQVRUUl9JTklUCiAgICAgbmF0aXZlX2NvbmRfaW5pdGlhbGl6ZSgmdm0tPmd2
bC5jb25kLCBSQl9DT05EQVRUUl9DTE9DS19NT05PVE9OSUMpOwogICAgIG5hdGl2ZV9jb25kX2lu
aXRpYWxpemUoJnZtLT5ndmwuc3dpdGNoX2NvbmQsIFJCX0NPTkRBVFRSX0NMT0NLX01PTk9UT05J
Qyk7CiAgICAgbmF0aXZlX2NvbmRfaW5pdGlhbGl6ZSgmdm0tPmd2bC5zd2l0Y2hfd2FpdF9jb25k
LCBSQl9DT05EQVRUUl9DTE9DS19NT05PVE9OSUMpOworI2VuZGlmCiAgICAgdm0tPmd2bC5hY3F1
aXJlZCA9IDA7CiAgICAgdm0tPmd2bC53YWl0aW5nID0gMDsKICAgICB2bS0+Z3ZsLm5lZWRfeWll
bGQgPSAwOwpAQCAtMTQ4LDkgKzE1MywxMSBAQCBndmxfaW5pdChyYl92bV90ICp2bSkKIHN0YXRp
YyB2b2lkCiBndmxfZGVzdHJveShyYl92bV90ICp2bSkKIHsKKyNpZmRlZiBIQVZFX1BUSFJFQURf
Q09OREFUVFJfSU5JVAogICAgIG5hdGl2ZV9jb25kX2Rlc3Ryb3koJnZtLT5ndmwuc3dpdGNoX3dh
aXRfY29uZCk7CiAgICAgbmF0aXZlX2NvbmRfZGVzdHJveSgmdm0tPmd2bC5zd2l0Y2hfY29uZCk7
CiAgICAgbmF0aXZlX2NvbmRfZGVzdHJveSgmdm0tPmd2bC5jb25kKTsKKyNlbmRpZgogICAgIG5h
dGl2ZV9tdXRleF9kZXN0cm95KCZ2bS0+Z3ZsLmxvY2spOwogfQogCkBAIC0yMzIsNiArMjM5LDkg
QEAgbmF0aXZlX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90ICpsb2NrKQogICAgIH0KIH0K
IAorI2lmZGVmIEhBVkVfUFRIUkVBRF9DT05EQVRUUl9JTklUCitpbnQgcHRocmVhZF9jb25kYXR0
cl9pbml0KHB0aHJlYWRfY29uZGF0dHJfdCAqYXR0cik7CisKIHN0YXRpYyB2b2lkCiBuYXRpdmVf
Y29uZF9pbml0aWFsaXplKHJiX3RocmVhZF9jb25kX3QgKmNvbmQsIGludCBmbGFncykKIHsKQEAg
LTI2Niw2ICsyNzYsNyBAQCBuYXRpdmVfY29uZF9kZXN0cm95KHJiX3RocmVhZF9jb25kX3QgKmNv
bmQpCiAJcmJfYnVnX2Vycm5vKCJwdGhyZWFkX2NvbmRfZGVzdHJveSIsIHIpOwogICAgIH0KIH0K
KyNlbmRpZgogCiAvKgogICogSW4gT1MgWCAxMC43IChMaW9uKSwgcHRocmVhZF9jb25kX3NpZ25h
bCBhbmQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCByZXR1cm4KQEAgLTQzOSwyMCArNDUwLDI2IEBA
IEluaXRfbmF0aXZlX3RocmVhZCh2b2lkKQogI2lmZGVmIFVTRV9TSUdOQUxfVEhSRUFEX0xJU1QK
ICAgICBuYXRpdmVfbXV0ZXhfaW5pdGlhbGl6ZSgmc2lnbmFsX3RocmVhZF9saXN0X2xvY2spOwog
I2VuZGlmCisjaWZuZGVmIF9fbmF0aXZlX2NsaWVudF9fCiAgICAgcG9zaXhfc2lnbmFsKFNJR1ZU
QUxSTSwgbnVsbF9mdW5jKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZAogbmF0aXZlX3RocmVh
ZF9pbml0KHJiX3RocmVhZF90ICp0aCkKIHsKKyNpZmRlZiBIQVZFX1BUSFJFQURfQ09OREFUVFJf
SU5JVAogICAgIG5hdGl2ZV9jb25kX2luaXRpYWxpemUoJnRoLT5uYXRpdmVfdGhyZWFkX2RhdGEu
c2xlZXBfY29uZCwgUkJfQ09OREFUVFJfQ0xPQ0tfTU9OT1RPTklDKTsKKyNlbmRpZgogICAgIHJ1
YnlfdGhyZWFkX3NldF9uYXRpdmUodGgpOwogfQogCiBzdGF0aWMgdm9pZAogbmF0aXZlX3RocmVh
ZF9kZXN0cm95KHJiX3RocmVhZF90ICp0aCkKIHsKKyNpZmRlZiBIQVZFX1BUSFJFQURfQ09OREFU
VFJfSU5JVAogICAgIG5hdGl2ZV9jb25kX2Rlc3Ryb3koJnRoLT5uYXRpdmVfdGhyZWFkX2RhdGEu
c2xlZXBfY29uZCk7CisjZW5kaWYKIH0KIAogI2RlZmluZSBVU0VfVEhSRUFEX0NBQ0hFIDAKQEAg
LTExOTcsNiArMTIxNCw3IEBAIHRocmVhZF90aW1lcih2b2lkICpwKQogc3RhdGljIHZvaWQKIHJi
X3RocmVhZF9jcmVhdGVfdGltZXJfdGhyZWFkKHZvaWQpCiB7CisjaWZuZGVmIF9fbmF0aXZlX2Ns
aWVudF9fCiAgICAgaWYgKCF0aW1lcl90aHJlYWRfaWQpIHsKIAlwdGhyZWFkX2F0dHJfdCBhdHRy
OwogCWludCBlcnI7CkBAIC0xMjU2LDYgKzEyNzQsNyBAQCByYl90aHJlYWRfY3JlYXRlX3RpbWVy
X3RocmVhZCh2b2lkKQogCX0KIAlwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7CiAgICAgfQor
I2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYwppbmRl
eCBmY2E5ZTY3Li43MzMwNDVkIDEwMDY0NAotLS0gYS91dGlsLmMKKysrIGIvdXRpbC5jCkBAIC00
NjIsNiArNDYyLDE1IEBAIHJ1Ynlfc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKICAgICByZXR1cm4g
dG1wOwogfQogCisjaWZkZWYgX19uYXRpdmVfY2xpZW50X18KK2NoYXIgKgorcnVieV9nZXRjd2Qo
dm9pZCkKK3sKKyAgICBjaGFyICpidWYgPSB4bWFsbG9jKDIpOworICAgIHN0cmNweShidWYsICIu
Iik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKyNlbHNlCiBjaGFyICoKIHJ1YnlfZ2V0Y3dkKHZvaWQp
CiB7CkBAIC00OTAsNiArNDk5LDcgQEAgcnVieV9nZXRjd2Qodm9pZCkKICNlbmRpZgogICAgIHJl
dHVybiBidWY7CiB9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS92bV9jb3Jl
LmggYi92bV9jb3JlLmgKaW5kZXggNWE5ZTZiYy4uZTg3ZDVhZSAxMDA2NDQKLS0tIGEvdm1fY29y
ZS5oCisrKyBiL3ZtX2NvcmUuaApAQCAtOTIsNiArOTIsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAK
KyNpZmRlZiBfX25hdGl2ZV9jbGllbnRfXworI3VuZGVmIE9QVF9ESVJFQ1RfVEhSRUFERURfQ09E
RQorI2VuZGlmCisKIC8qIGNhbGwgdGhyZWFkZWQgY29kZSAqLwogI2lmICAgIE9QVF9DQUxMX1RI
UkVBREVEX0NPREUKICNpZiAgICBPUFRfRElSRUNUX1RIUkVBREVEX0NPREUK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggYmFlMGNlMS4uNzIx
ZGMyYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTE2LDYg
KzE2LDcgQEAgUExBVEZPUk1fRElSID0gQFBMQVRGT1JNX0RJUkAKIAogQ0MgPSBAQ0NACiBDUFAg
PSBAQ1BQQAorTEQgPSBATERACiBZQUNDID0gYmlzb24KIFBVUklGWSA9CiBBVVRPQ09ORiA9IGF1
dG9jb25mCkBAIC03MCw2ICs3MSw4IEBAIERMREZMQUdTID0gQExJQlJVQllfRExERkxBR1NAICQo
WExERkxBR1MpICQoQVJDSF9GTEFHKQogU09MSUJTID0gQFNPTElCU0AKIE1BSU5MSUJTID0gQE1B
SU5MSUJTQAogQVJDSE1JTklPQkpTID0gQE1JTklPQkpTQAorRU5DT0JKUyA9IEBFTkNPQkpTQAor
RVhUT0JKUyA9IEBFWFRPQkpTQAogQlVJTFRJTl9FTkNPQkpTID0gQEJVSUxUSU5fRU5DT0JKU0AK
IEJVSUxUSU5fVFJBTlNTUkNTID0gQEJVSUxUSU5fVFJBTlNTUkNTQAogQlVJTFRJTl9UUkFOU09C
SlMgPSBAQlVJTFRJTl9UUkFOU09CSlNACkBAIC0xNzUsNyArMTc4LDcgQEAgbWluaXJ1YnkkKEVY
RUVYVCk6CiAkKFBST0dSQU0pOgogCQlAJChSTSkgJEAKIAkJJChFQ0hPKSBsaW5raW5nICRACi0J
CSQoUSkgJChQVVJJRlkpICQoQ0MpICQoTERGTEFHUykgJChYTERGTEFHUykgJChNQUlOTElCUykg
JChNQUlOT0JKKSAkKEVYVE9CSlMpICQoTElCUlVCWUFSRykgJChMSUJTKSAkKE9VVEZMQUcpJEAK
KwkJJChRKSAkKFBVUklGWSkgJChDQykgJChMREZMQUdTKSAkKFhMREZMQUdTKSAkKE1BSU5MSUJT
KSAkKE1BSU5PQkopICQoRVhUT0JKUykgJChFTkNPQkpTKSAkKExJQlJVQllBUkcpICQoTElCUykg
JChFWFRMSUJTKSAkKE9VVEZMQUcpJEAKIAkJJChRKSAkKFBPU1RMSU5LKQogCiAjIFdlIG11c3Qg
YHJtJyB0aGUgbGlicmFyeSBlYWNoIHRpbWUgdGhpcyBydWxlIGlzIGludm9rZWQgYmVjYXVzZSAi
dXBkYXRpbmciIGEKQEAgLTE4Niw4ICsxODksOSBAQCAkKExJQlJVQllfQSk6CiAJCSQoRUNITykg
bGlua2luZyBzdGF0aWMtbGlicmFyeSAkQAogCQkkKFEpICQoQVIpICQoQVJGTEFHUykgJEAgJChP
QkpTKSAkKERNWUVYVCkKIAkJQC0kKFJBTkxJQikgJEAgMj4gL2Rldi9udWxsIHx8IHRydWUKKwkJ
JChFQ0hPKSB2ZXJpZnlpbmcgc3RhdGljLWxpYnJhcnkgJEAKIAkJQCQoUFVSSUZZKSAkKENDKSAk
KFhMREZMQUdTKSAkKE1BSU5PQkopICQoTElCUlVCWV9BKSAkKE1BSU5MSUJTKSAkKEVYVExJQlMp
ICQoTElCUykgJChPVVRGTEFHKWNvbmZ0ZXN0JChFWEVFWFQpICQoTERGTEFHUykKLQkJQCQoUk0p
IGNvbmZ0ZXN0JChFWEVFWFQpCisJCUAkKFJNKSBjb25mdHNldCQoRVhFRVhUKSBjb25mdGVzdC5j
CiAKICQoTElCUlVCWV9TTyk6CiAJCUAtJChQUkVfTElCUlVCWV9VUERBVEUpCkBAIC0zMTEsNyAr
MzE1LDggQEAgZW5jL3VuaWNvZGUvbmFtZTJjdHlwZS5oOiBlbmMvdW5pY29kZS9uYW1lMmN0eXBl
Lmt3ZAogCSQoUSkgJChDUFApICQoWENGTEFHUykgJChDUFBGTEFHUykgJChDT1VURkxBRykkQCAt
RSAkPCA+ICRACiAKIGNsZWFuLWxvY2FsOjoKLQkkKFEpJChSTSkgZXh0L2V4dGluaXQuYyBleHQv
ZXh0aW5pdC4kKE9CSkVYVCkgZXh0L3JpcHBlci95Lm91dHB1dAorCSQoUSkkKFJNKSBleHQvZXh0
aW5pdC5jIGV4dC9leHRpbml0LiQoT0JKRVhUKSBleHQvcmlwcGVyL3kub3V0cHV0IFwKKwkJZW5j
L2VuY2luaXQuYyBlbmMvZW5jaW5pdC4kKE9CSkVYVCkKIAktJChRKSQoUk0pICQocGtnY29uZmln
X0RBVEEpCiAKIGRpc3RjbGVhbi1sb2NhbDo6CkBAIC0zMzUsOCArMzQwLDEwIEBAIGNsZWFuLWV4
dCBkaXN0Y2xlYW4tZXh0IHJlYWxjbGVhbi1leHQ6OgogCQkkKFJNRElSUykgImV4dC8kJGRpciIg
Mj4gL2Rldi9udWxsIHx8IHRydWU7OyBcCiAJICAgIGVzYWM7IFwKIAlkb25lCisJLSQoUSkkKFJN
KSBleHQvZXh0aW5pdC4kKE9CSkVYVCkKIAogZGlzdGNsZWFuLWV4dCByZWFsY2xlYW4tZXh0OjoK
KwktJChRKSQoUk0pIGV4dC9leHRpbml0LmMKIAktJChRKSQoUk1ESVIpIGV4dCAyPiAvZGV2L251
bGwgfHwgdHJ1ZQogCiBjbGVhbi1leHRvdXQ6CkBAIC0zNjIsNiArMzY5LDggQEAgZXh0L2V4dGlu
aXQuJChPQkpFWFQpOiBleHQvZXh0aW5pdC5jICQoU0VUVVApCiAJJChFQ0hPKSBjb21waWxpbmcg
JEAKIAkkKFEpICQoQ0MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ09VVEZM
QUcpJEAgLWMgZXh0L2V4dGluaXQuYwogCitlbmMvZW5jaW5pdC4kKE9CSkVYVCk6IGVuYy9lbmNp
bml0LmMgJChTRVRVUCkKKwogdXA6OgogCUAkKENIRElSKSAiJChzcmNkaXIpIiAmJiBMQ19USU1F
PUMgZXhlYyAkKFZDU1VQKQogCmRpZmYgLS1naXQgYS9jb21tb24ubWsgYi9jb21tb24ubWsKaW5k
ZXggODhkZTllOS4uMjg4MTMyOSAxMDA2NDQKLS0tIGEvY29tbW9uLm1rCisrKyBiL2NvbW1vbi5t
awpAQCAtMzIsNyArMzIsNiBAQCBJRF9IX1RBUkdFVCAgID0gLWlkLmgtCiBETVlFWFQJICAgICAg
PSBkbXlleHQuJChPQkpFWFQpCiBOT1JNQUxNQUlOT0JKID0gbWFpbi4kKE9CSkVYVCkKIE1BSU5P
QkogICAgICAgPSAkKE5PUk1BTE1BSU5PQkopCi1FWFRPQkpTCSAgICAgID0gCiBETERPQkpTCSAg
ICAgID0gJChETVlFWFQpCiBNSU5JT0JKUyAgICAgID0gJChBUkNITUlOSU9CSlMpIGRteWVuY29k
aW5nLiQoT0JKRVhUKSBkbXl2ZXJzaW9uLiQoT0JKRVhUKSBtaW5pcHJlbHVkZS4kKE9CSkVYVCkK
IEVOQ19NSyAgICAgICAgPSBlbmMubWsKQEAgLTE0MSw3ICsxNDAsNyBAQCBDT01QSUxFX1BSRUxV
REUgPSAkKE1JTklSVUJZKSAtSSQoc3JjZGlyKSAkKHNyY2RpcikvdG9vbC9jb21waWxlX3ByZWx1
ZGUucmIKIAogYWxsOiBzaG93ZmxhZ3MgbWFpbiBkb2NzCiAKLW1haW46IHNob3dmbGFncyBlbmNz
IGV4dHMKK21haW46IHNob3dmbGFncyAkKEVYVFNUQVRJQzpzdGF0aWM9bGliKWVuY3MgZXh0cwog
CUAkKE5VTExDTUQpCiAKIC5QSE9OWTogc2hvd2ZsYWdzCkBAIC0xNjgsMTIgKzE2NywxMyBAQCBl
eHRzOiBidWlsZC1leHQKIAogRVhUU19NSyA9IGV4dHMubWsKICQoRVhUU19NSyk6ICQoTUtGSUxF
UykgaW5jcyAkKFBSRVApICQoUkJDT05GSUcpICQoTElCUlVCWSkKKwkkKEVDSE8pIGdlbmVyYXRp
bmcgbWFrZWZpbGUgJEAKIAkkKFEpJChNSU5JUlVCWSkgJChzcmNkaXIpL2V4dC9leHRtay5yYiAt
LW1ha2U9IiQoTUFLRSkiIC0tY29tbWFuZC1vdXRwdXQ9JChFWFRTX01LKSAkKEVYVE1LX0FSR1Mp
IGNvbmZpZ3VyZQogCiBjb25maWd1cmUtZXh0OiAkKEVYVFNfTUspCiAKIGJ1aWxkLWV4dDogJChF
WFRTX01LKQotCSQoUSkkKE1BS0UpIC1mICQoRVhUU19NSykgJChNRkxBR1MpCisJJChRKSQoTUFL
RSkgLWYgJChFWFRTX01LKSAkKE1GTEFHUykgJChFWFRTVEFUSUMpCiAKICQoTUtNQUlOX0NNRCk6
ICQoTUtGSUxFUykgaW5jcyAkKFBSRVApICQoUkJDT05GSUcpICQoTElCUlVCWSkKIAkkKFEpJChN
SU5JUlVCWSkgJChzcmNkaXIpL2V4dC9leHRtay5yYiAtLW1ha2U9IiQoTUFLRSkiIC0tY29tbWFu
ZC1vdXRwdXQ9JEAgJChFWFRNS19BUkdTKQpAQCAtMjA2LDcgKzIwNiw3IEBAIERveHlmaWxlOiAk
KHNyY2RpcikvdGVtcGxhdGUvRG94eWZpbGUudG1wbCAkKFBSRVApICQoc3JjZGlyKS90b29sL2dl
bmVyaWNfZXJiLnJiCiBwcm9ncmFtOiBzaG93ZmxhZ3MgJChQUk9HUkFNKQogd3Byb2dyYW06IHNo
b3dmbGFncyAkKFdQUk9HUkFNKQogCi0kKFBST0dSQU0pOiAkKExJQlJVQlkpICQoTUFJTk9CSikg
JChPQkpTKSAkKEVYVE9CSlMpICQoU0VUVVApICQoUFJFUCkKKyQoUFJPR1JBTSk6ICQoTElCUlVC
WSkgJChNQUlOT0JKKSAkKE9CSlMpICQoRVhUT0JKUykgJChFTkNPQkpTKSAkKFNFVFVQKSAkKFBS
RVApCiAKICQoTElCUlVCWV9BKToJJChPQkpTKSAkKE1BSU5PQkopICQoRE1ZRVhUKSAkKEFSQ0hG
SUxFKQogCkBAIC01MTksMTcgKzUxOSwyMSBAQCB0ZXN0LXJ1YnlzcGVjOiB0ZXN0LXJ1YnlzcGVj
LXByZWNoZWNrCiAJJChSVU5SVUJZKSAkKHNyY2Rpcikvc3BlYy9tc3BlYy9iaW4vbXNwZWMgcnVu
IC1CICQoc3JjZGlyKS9zcGVjL2RlZmF1bHQubXNwZWMgJChNU1BFQ09QVCkKIAogZW5jczogZW5j
IHRyYW5zCi1lbmNzIGVuYyB0cmFuczogc2hvd2ZsYWdzICQoRU5DX01LKSAkKExJQlJVQlkpICQo
UFJFUCkKK2xpYmVuY3M6IGxpYmVuYyBsaWJ0cmFucworZW5jcyBlbmMgdHJhbnMgbGliZW5jcyBs
aWJlbmMgbGlidHJhbnM6IHNob3dmbGFncyAkKEVOQ19NSykgJChMSUJSVUJZKSAkKFBSRVApCiAJ
JChFQ0hPKSBtYWtpbmcgJEAKLQkkKFEpICQoTUFLRSkgLWYgJChFTkNfTUspIFJVQlk9IiQoTUlO
SVJVQlkpIiBNSU5JUlVCWT0iJChNSU5JUlVCWSkiICQoTUZMQUdTKSAkQAorCSQoUSkgJChNQUtF
KSAtZiAkKEVOQ19NSykgVj0iJChWKSIgXAorCQlSVUJZPSIkKE1JTklSVUJZKSIgTUlOSVJVQlk9
IiQoTUlOSVJVQlkpIiBcCisJCSQoTUZMQUdTKSAkQAogCi1lbmM6IHskKFZQQVRIKX1lbmNkYi5o
Ci10cmFuczogeyQoVlBBVEgpfXRyYW5zZGIuaAorCitsaWJlbmMgZW5jOiB7JChWUEFUSCl9ZW5j
ZGIuaAorbGlidHJhbnMgdHJhbnM6IHskKFZQQVRIKX10cmFuc2RiLmgKIAogJChFTkNfTUspOiAk
KHNyY2RpcikvZW5jL21ha2VfZW5jbWFrZS5yYiAkKHNyY2RpcikvZW5jL01ha2VmaWxlLmluICQo
c3JjZGlyKS9lbmMvZGVwZW5kIFwKLQkkKHNyY2RpcikvbGliL21rbWYucmIgJChSQkNPTkZJRykK
KwkkKHNyY2RpcikvZW5jL2VuY2luaXQuYy5lcmIgJChzcmNkaXIpL2xpYi9ta21mLnJiICQoUkJD
T05GSUcpCiAJJChFQ0hPKSBnZW5lcmF0aW5nICRACi0JJChRKSAkKE1JTklSVUJZKSAkKHNyY2Rp
cikvZW5jL21ha2VfZW5jbWFrZS5yYiAtLWJ1aWx0aW4tZW5jcz0iJChCVUlMVElOX0VOQ09CSlMp
IiAtLWJ1aWx0aW4tdHJhbnNlcz0iJChCVUlMVElOX1RSQU5TT0JKUykiICRAICQoRU5DUykKKwkk
KFEpICQoTUlOSVJVQlkpICQoc3JjZGlyKS9lbmMvbWFrZV9lbmNtYWtlLnJiIC0tYnVpbHRpbi1l
bmNzPSIkKEJVSUxUSU5fRU5DT0JKUykiIC0tYnVpbHRpbi10cmFuc2VzPSIkKEJVSUxUSU5fVFJB
TlNPQkpTKSIgLS1tb2R1bGUkKEVYVFNUQVRJQykgJEAgJChFTkNTKQogCiAuUFJFQ0lPVVM6ICQo
TUtGSUxFUykKIApAQCAtODMzLDYgKzgzNyw4IEBAIHRyYW5zZGIuaDogJChQUkVQKSBzcmNzLWVu
YyAkKHNyY2RpcikvdG9vbC9nZW5lcmljX2VyYi5yYiAkKHNyY2RpcikvdGVtcGxhdGUvdHJhCiAJ
JChFQ0hPKSBnZW5lcmF0aW5nICRACiAJJChRKSAkKE1JTklSVUJZKSAkKHNyY2RpcikvdG9vbC9n
ZW5lcmljX2VyYi5yYiAtYyAtbyAkQCAkKHNyY2RpcikvdGVtcGxhdGUvdHJhbnNkYi5oLnRtcGwg
JChzcmNkaXIpL2VuYy90cmFucyBlbmMvdHJhbnMKIAorZW5jL2VuY2luaXQuYzogJChFTkNfTUsp
ICQoc3JjZGlyKS9lbmMvZW5jaW5pdC5jLmVyYgorCiBrbm93bl9lcnJvcnMuaW5jOiAkKHNyY2Rp
cikvdGVtcGxhdGUva25vd25fZXJyb3JzLmluYy50bXBsICQoc3JjZGlyKS9kZWZzL2tub3duX2Vy
cm9ycy5kZWYKIAkkKEVDSE8pIGdlbmVyYXRpbmcgJEAKIAkkKFEpICQoQkFTRVJVQlkpICQoc3Jj
ZGlyKS90b29sL2dlbmVyaWNfZXJiLnJiIC1jIC1vICRAICQoc3JjZGlyKS90ZW1wbGF0ZS9rbm93
bl9lcnJvcnMuaW5jLnRtcGwgJChzcmNkaXIpL2RlZnMva25vd25fZXJyb3JzLmRlZgpkaWZmIC0t
Z2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmluZGV4IGQwMDQzYjguLmVlN2JiMDUg
MTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5pbgorKysgYi9jb25maWd1cmUuaW4KQEAgLTI5MSw2ICsy
OTEsOCBAQCBBQ19QUk9HX0NDCiBBQ19QUk9HX0NYWAogQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwK
IEFDX1NVQlNUKEdDQykKK0FDX0NIRUNLX1RPT0woW0xEXSwgW2xkXSwgW2xkXSkKK0FDX1NVQlNU
KExEKQogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgICBsaW5rZXJfZmxhZz0tV2wsCiAg
ICAgOiAke29wdGZsYWdzPS1PM30KQEAgLTIwOTUsNyArMjA5Nyw3IEBAIGlmIHRlc3QgIiR3aXRo
X2Rsbl9hX291dCIgIT0geWVzOyB0aGVuCiAKICAgQVNfQ0FTRShbIiR0YXJnZXRfb3MiXSwKIAlb
aHB1eCpdLCBbCURMREZMQUdTPSIkRExERkxBR1MgLUUiCi0JCQk6ICR7TERTSEFSRUQ9J2xkIC1i
J30KKwkJCTogJHtMRFNIQVJFRD0iJChMRCkgLWIifQogCQkJWExERkxBR1M9IiRYTERGTEFHUyAt
V2wsLUUiCiAJCQk6ICR7TElCUEFUSEVOVj1TSExJQl9QQVRIfQogCQkJaWYgdGVzdCAiJHJiX2N2
X3Byb2dfZ251X2xkIiA9IG5vOyB0aGVuCkBAIC0yMTE0LDE3ICsyMTE2LDE3IEBAIGlmIHRlc3Qg
IiR3aXRoX2Rsbl9hX291dCIgIT0geWVzOyB0aGVuCiAJCQkgICAgOiAke0xJQlBBVEhFTlY9TERf
TElCUkFSWV9QQVRIXzY0fQogCQkJZmkKIAkJCXJiX2N2X2Rsb3Blbj15ZXNdLAotCVtzdW5vcypd
LCBbCTogJHtMRFNIQVJFRD0nbGQgLWFzc2VydCBub2RlZmluaXRpb25zJ30KKwlbc3Vub3MqXSwg
Wwk6ICR7TERTSEFSRUQ9IiQoTEQpIC1hc3NlcnQgbm9kZWZpbml0aW9ucyJ9CiAJCQlyYl9jdl9k
bG9wZW49eWVzXSwKLQlbaXJpeCpdLCBbCTogJHtMRFNIQVJFRD0nbGQgLXNoYXJlZCd9CisJW2ly
aXgqXSwgWwk6ICR7TERTSEFSRUQ9IiQoTEQpIC1zaGFyZWQifQogCQkJcmJfY3ZfZGxvcGVuPXll
c10sCi0JW3N5c3Y0Kl0sIFsJOiAke0xEU0hBUkVEPSdsZCAtRyd9CisJW3N5c3Y0Kl0sIFsJOiAk
e0xEU0hBUkVEPSIkKExEKSAtRyJ9CiAJCQlyYl9jdl9kbG9wZW49eWVzXSwKIAlbbnRvLXFueCpd
LCBbCTogJHtMRFNIQVJFRD0nJChDQykgLXNoYXJlZCd9CiAJCQlyYl9jdl9kbG9wZW49eWVzXSwK
LQlbZXNpeCp8dXhwZHMqXSwgWyA6ICR7TERTSEFSRUQ9ImxkIC1HIn0KKwlbZXNpeCp8dXhwZHMq
XSwgWyA6ICR7TERTSEFSRUQ9IiQoTEQpIC1HIn0KIAkJCXJiX2N2X2Rsb3Blbj15ZXNdLAotCVtv
c2YqXSwgWwk6ICR7TERTSEFSRUQ9ImxkIC1zaGFyZWQgLWV4cGVjdF91bnJlc29sdmVkIFwiKlwi
In0KKwlbb3NmKl0sIFsJOiAke0xEU0hBUkVEPSIkKExEKSAtc2hhcmVkIC1leHBlY3RfdW5yZXNv
bHZlZCBcIipcIiJ9CiAJCQlyYl9jdl9kbG9wZW49eWVzXSwKIAlbYnNkaTMqXSwgWwlBU19DQVNF
KFsiJENDIl0sCiAJCQlbKnNobGljYypdLCBbCTogJHtMRFNIQVJFRD0nJChDQykgLXInfQpAQCAt
MjE0NSw3ICsyMTQ3LDcgQEAgaWYgdGVzdCAiJHdpdGhfZGxuX2Ffb3V0IiAhPSB5ZXM7IHRoZW4K
IAkJCSAgICBMREZMQUdTPSIkTERGTEFHUyAtcmR5bmFtaWMiCiAJCQkgICAgRExERkxBR1M9IiRE
TERGTEFHUyAiJy1XbCwtc29uYW1lLCQoLlRBUkdFVCknCiAJCQllbHNlCi0JCQkgIHRlc3QgIiRH
Q0MiID0geWVzICYmIHRlc3QgIiRyYl9jdl9wcm9nX2dudV9sZCIgPSB5ZXMgfHwgTERTSEFSRUQ9
ImxkIC1Cc2hhcmVhYmxlIgorCQkJICB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkcmJfY3Zf
cHJvZ19nbnVfbGQiID0geWVzIHx8IExEU0hBUkVEPSIkKExEKSAtQnNoYXJlYWJsZSIKIAkJCWZp
CiAJCQlyYl9jdl9kbG9wZW49eWVzXSwKIAlbb3BlbmJzZCpdLCBbCTogJHtMRFNIQVJFRD0nJChD
QykgLXNoYXJlZCAke0NDRExGTEFHU30nfQpAQCAtMjE3OSwxMiArMjE4MSwxMiBAQCBpZiB0ZXN0
ICIkd2l0aF9kbG5fYV9vdXQiICE9IHllczsgdGhlbgogCQkJcmJfY3ZfZGxvcGVuPXllc10sCiAJ
W2Jlb3MqXSwgWwlBU19DQVNFKFsiJHRhcmdldF9jcHUiXSwKIAkJCSAgW3Bvd2VycGMqXSwgWwot
CQkJICAgIDogJHtMRFNIQVJFRD0ibGQgLXhtcyJ9CisJCQkgICAgOiAke0xEU0hBUkVEPSIkKExE
KSAteG1zIn0KIAkJCSAgICBETERGTEFHUz0iJERMREZMQUdTICInLWV4cG9ydCBJbml0XyQoVEFS
R0VUKSAtbGJlIC1scm9vdCBnbHVlLW5vaW5pdC5hIGluaXRfdGVybV9keW4ubyBzdGFydF9keW4u
bycKIAkJCSAgICBMREZMQUdTPSIkTERGTEFHUyAtTC9ib290L2hvbWUvY29uZmlnL2xpYiAtbGJl
IC1scm9vdCIKIAkJCSAgICBdLAogCQkJICBbaTU4NipdLCBbCi0JCQkgICAgOiAke0xEU0hBUkVE
PSJsZCAtc2hhcmVkIn0KKwkJCSAgICA6ICR7TERTSEFSRUQ9IiQoTEQpIC1zaGFyZWQifQogCQkJ
ICAgIERMREZMQUdTPSIkRExERkxBR1MgLUwvYm9vdC9kZXZlbG9wL2xpYi94ODYgLUwvYm9vdC9o
b21lL2NvbmZpZy9saWIgXCQodG9wZGlyKS9fQVBQXyAtbGJlIC1scm9vdCIKIAkJCSAgICBMREZM
QUdTPSIkTERGTEFHUyAtTC9ib290L2RldmVsb3AvbGliL3g4NiAtTC9ib290L2hvbWUvY29uZmln
L2xpYiAtbGJlIC1scm9vdCIKIAkJCSAgICBdKQpAQCAtMjE5MiwxNyArMjE5NCwxNyBAQCBpZiB0
ZXN0ICIkd2l0aF9kbG5fYV9vdXQiICE9IHllczsgdGhlbgogCQkJcmJfY3ZfZGxvcGVuPXllc10s
CiAJW2hhaWt1Kl0sIFsJQVNfQ0FTRShbIiR0YXJnZXRfY3B1Il0sCiAJCQkgIFtwb3dlcnBjKl0s
IFsKLQkJCSAgICA6ICR7TERTSEFSRUQ9ImxkIC14bXMifQorCQkJICAgIDogJHtMRFNIQVJFRD0i
JChMRCkgLXhtcyJ9CiAJCQkgICAgRExERkxBR1M9IiRETERGTEFHUyAiJy1leHBvcnQgSW5pdF8k
KFRBUkdFVCkgLWxiZSAtbHJvb3QgZ2x1ZS1ub2luaXQuYSBpbml0X3Rlcm1fZHluLm8gc3RhcnRf
ZHluLm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKIAkJCSAgW2k1ODYqXSwgWwot
CQkJICAgIDogJHtMRFNIQVJFRD0ibGQgLXNoYXJlZCJ9CisJCQkgICAgOiAke0xEU0hBUkVEPSIk
KExEKSAtc2hhcmVkIn0KIAkJCSAgICBETERGTEFHUz0iJERMREZMQUdTIC1ML2Jvb3QvZGV2ZWxv
cC9saWIveDg2IC1sYmUgLWxyb290IgogCQkJICAgIF0pCiAJCQk6ICR7TElCUEFUSEVOVj1MSUJS
QVJZX1BBVEh9CiAJCQlyYl9jdl9kbG9wZW49eWVzIF0sCiAJW250by1xbngqXSwgWwlETERGTEFH
Uz0iJERMREZMQUdTIC1ML2xpYiAtTC91c3IvbGliIC1ML3Vzci9sb2NhbC9saWIiCi0JCQk6ICR7
TERTSEFSRUQ9J2xkIC1Cc2hhcmVhYmxlIC14J30KKwkJCTogJHtMRFNIQVJFRD0iJChMRCkgLUJz
aGFyZWFibGUgLXgifQogCQkJTERGTEFHUz0iJExERkxBR1MgLUwvbGliIC1ML3Vzci9saWIgLUwv
dXNyL2xvY2FsL2xpYiIKIAkJCXJiX2N2X2Rsb3Blbj15ZXNdLAogCVtjeWd3aW4qfG1pbmd3Kl0s
IFsKQEAgLTIyMTEsMTIgKzIyMTMsMTIgQEAgaWYgdGVzdCAiJHdpdGhfZGxuX2Ffb3V0IiAhPSB5
ZXM7IHRoZW4KIAkJCURMREZMQUdTPSIke0RMREZMQUdTfSAtV2wsLS1lbmFibGUtYXV0by1pbWFn
ZS1iYXNlLC0tZW5hYmxlLWF1dG8taW1wb3J0IgogCQkJOiAke0xJQlBBVEhFTlY9IiJ9CiAJCQly
Yl9jdl9kbG9wZW49eWVzXSwKLQlbaGl1eG1wcF0sIFsJOiAke0xEU0hBUkVEPSdsZCAtcid9XSwK
KwlbaGl1eG1wcF0sIFsJOiAke0xEU0hBUkVEPSIkKExEKSAtciJ9XSwKIAlbYXRoZW9zKl0sIFsJ
OiAke0xEU0hBUkVEPSckKENDKSAtc2hhcmVkJ30KIAkJCXJiX2N2X2Rsb3Blbj15ZXNdLAogCVtv
czItZW14Kl0sIFsJTERGTEFHUz0iJExERkxBR1MgLVpvbWYiCiAJCQldLAotCVsgCTogJHtMRFNI
QVJFRD0nbGQnfV0pCisJWyAJOiAke0xEU0hBUkVEPSIkKExEKSJ9XSkKICAgQUNfTVNHX1JFU1VM
VCgkcmJfY3ZfZGxvcGVuKQogZmkKIGlmIHRlc3QgIiR7TERTSEFSRURYWH0iID0gIiI7IHRoZW4K
QEAgLTIzMjQsNiArMjMyNiwxMyBAQCBBQ19TVUJTVChFWFRTVEFUSUMpZG5sCiBBQ19BUkdfV0lU
SChzdGF0aWMtbGlua2VkLWV4dCwKIAkgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zdGF0aWMt
bGlua2VkLWV4dF0sIFtsaW5rIGV4dGVybmFsIG1vZHVsZXMgc3RhdGljYWxseV0pLAogICAgICAg
ICAgICAgW0FTX0NBU0UoWyR3aXRodmFsXSxbeWVzXSxbU1RBVElDPTtFWFRTVEFUSUM9c3RhdGlj
XSldKQoraWYgdGVzdCB4IiRFWFRTVEFUSUMiID0geHN0YXRpYzsgdGhlbgorICBFTkNPQkpTPSdl
bmMvZW5jaW5pdC4kKE9CSkVYVCkgZW5jL2xpYmVuYy5hIGVuYy9saWJ0cmFucy5hJworICBFWFRP
QkpTPSdleHQvZXh0aW5pdC4kKE9CSkVYVCkgZXh0L2xpYmV4dC5hJworICBBQ19ERUZJTkVfVU5R
VU9URUQoRVhUU1RBVElDLCAxKQorZmkKK0FDX1NVQlNUKEVOQ09CSlMpCitBQ19TVUJTVChFWFRP
QkpTKQogCiBBU19DQVNFKFsiJHRhcmdldF9vcyJdLAogICBkbmwgT1MvMiBlbnZpcm9ubWVudCB3
LyBBdXRvY29uZiAyLjF4IGZvciBFTVgKQEAgLTI1MDcsNyArMjUxNiw3IEBAIEFTX0NBU0UoIiRl
bmFibGVfc2hhcmVkIiwgW3llc10sIFsKICAgTElCUlVCWUFSR19TSEFSRUQ9CiAKICAgIyBlbmFi
bGUgUElFIGlmIHBvc3NpYmxlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGlmIHRl
c3QgIiRHQ0MiID0geWVzIGFuZCAteiAiJEVYVFNUQVRJQyI7IHRoZW4KICAgICBSVUJZX1RSWV9D
RkxBR1MoLWZQSUUsIFtwaWU9eWVzXSwgW3BpZT1ub10pCiAgICAgaWYgdGVzdCAiJHBpZSIgPSB5
ZXM7IHRoZW4KICAgICAgIFJVQllfQVBQRU5EX09QVElPTihYQ0ZMQUdTLCAtZlBJRSkKZGlmZiAt
LWdpdCBhL2RteWV4dC5jIGIvZG15ZXh0LmMKaW5kZXggNGQyNzNmNy4uNzQxZGM1OSAxMDA2NDQK
LS0tIGEvZG15ZXh0LmMKKysrIGIvZG15ZXh0LmMKQEAgLTIsMyArMiw4IEBAIHZvaWQKIEluaXRf
ZXh0KHZvaWQpCiB7CiB9CisKK3ZvaWQKK0luaXRfZW5jKCkKK3sKK30KZGlmZiAtLWdpdCBhL2Vu
Yy9NYWtlZmlsZS5pbiBiL2VuYy9NYWtlZmlsZS5pbgppbmRleCAyMDNhODNkLi40NGU3MTRhIDEw
MDY0NAotLS0gYS9lbmMvTWFrZWZpbGUuaW4KKysrIGIvZW5jL01ha2VmaWxlLmluCkBAIC0yMCw2
ICsyMCw3IEBAIEVOQ1NPRElSID0gJChFWFRPVVQpLyQoYXJjaCkvZW5jCiBUUkFOU1NPRElSID0g
JChFTkNTT0RJUikvdHJhbnMKIERMRVhUID0gQERMRVhUQAogT0JKRVhUID0gQE9CSkVYVEAKK0xJ
QkVYVCA9IEBMSUJFWFRACiAKIEJVSUxUSU5fRU5DUwk9IGFzY2lpLmMgdXNfYXNjaWkuY1wKIAkJ
ICB1bmljb2RlLmMgdXRmXzguYwpAQCAtMzIsNyArMzMsOSBAQCBMSUJSVUJZQVJHX1NIQVJFRCA9
IEBMSUJSVUJZQVJHX1NIQVJFREAKIExJQlJVQllBUkdfU1RBVElDID0gJChMSUJSVUJZQVJHX1NI
QVJFRCkKIAogZW1wdHkgPQorQVIgPSBAQVJACiBDQyA9IEBDQ0AKK1JBTkxJQiA9IEBSQU5MSUJA
CiBPVVRGTEFHID0gQE9VVEZMQUdAJChlbXB0eSkKIENPVVRGTEFHID0gQENPVVRGTEFHQCQoZW1w
dHkpCiBDRkxBR1MgPSAkKENDRExGTEFHUykgQENGTEFHU0AgQEFSQ0hfRkxBR0AKZGlmZiAtLWdp
dCBhL2VuYy9kZXBlbmQgYi9lbmMvZGVwZW5kCmluZGV4IGNhNjA4NWQuLmQ2MDA2MTYgMTAwNjQ0
Ci0tLSBhL2VuYy9kZXBlbmQKKysrIGIvZW5jL2RlcGVuZApAQCAtNSwzNCArNSw3IEBACiAlIGRs
ZGZsYWdzID0gJDIKICUgZW5hYmxlX3NoYXJlZCA9IENPTkZJR1snRU5BQkxFX1NIQVJFRCddID09
ICd5ZXMnCiAlIGRlZmZpbGUgPSAodHJ1ZSBpZiAvXCRcKERFRkZJTEVcKS8gPX4gQ09ORklHWyJM
SU5LX1NPIl0pCi0lIGVuY3MgPSBEaXIub3Blbigkc3JjZGlyKSB7fGR8IGQuZ3JlcCgvLitcLmNc
ei8pfSAtIEJVSUxUSU5fRU5DUyAtIFsibWt0YWJsZS5jIl0KLSUgZW5jcy5lYWNoIHt8ZXwgZS5j
aG9tcCEoIi5jIil9Ci0lIGVuY3MucmVqZWN0ISB7fGV8ICFFTkNfUEFUVEVSTlMuYW55PyB7fHB8
IEZpbGUuZm5tYXRjaD8ocCwgZSl9fSBpZiAhRU5DX1BBVFRFUk5TLmVtcHR5PwotJSBlbmNzLnJl
amVjdCEge3xlfCBOT0VOQ19QQVRURVJOUy5hbnk/IHt8cHwgRmlsZS5mbm1hdGNoPyhwLCBlKX19
Ci0lIGFscGhhbnVtZXJpY19vcmRlciA9IHByb2Mge3xlfCBlLnNjYW4oLyhcZCspfChcRCspLyku
bWFwIHt8bixhfCBhfHxbbi5zaXplLG4udG9faV19LmZsYXR0ZW59Ci0lIGVuY3MgPSBlbmNzLnNv
cnRfYnkoJmFscGhhbnVtZXJpY19vcmRlcikKLSUgZW5jcy51bnNoaWZ0KGVuY3MuZGVsZXRlKCJl
bmNkYiIpKQotJSBhdHJhbnMgPSBbXQotJSB0cmFucyA9IERpci5vcGVuKCRzcmNkaXIrIi90cmFu
cyIpIHt8ZHwKLSUgICBkLnNlbGVjdCB7fGV8Ci0lICAgICBpZiBlLmNob21wISgnLnRyYW5zJykK
LSUgICAgICAgYXRyYW5zIDw8IGUKLSUgICAgICAgdHJ1ZQotJSAgICAgZWxzaWYgZS5jaG9tcCEo
Jy5jJykKLSUgICAgICAgdHJ1ZQotJSAgICAgZW5kCi0lICAgfQotJSB9Ci0lIHRyYW5zIC09IEJV
SUxUSU5fVFJBTlNFUwotJSBhdHJhbnMgLT0gQlVJTFRJTl9UUkFOU0VTCi0lIHRyYW5zLnVuaXEh
Ci0lIGF0cmFucyA9IGF0cmFucy5zb3J0X2J5KCZhbHBoYW51bWVyaWNfb3JkZXIpCi0lIHRyYW5z
ID0gdHJhbnMuc29ydF9ieSgmYWxwaGFudW1lcmljX29yZGVyKQotJSB0cmFucy51bnNoaWZ0KHRy
YW5zLmRlbGV0ZSgidHJhbnNkYiIpKQotJSB0cmFucy5jb21wYWN0IQotJSB0cmFucyB8PSBhdHJh
bnMKLSUgdHJhbnMubWFwISB7fGV8ICJ0cmFucy8je2V9In0KLSUgZGVwZW5kZW5jaWVzID0gZW5j
cyArIHRyYW5zCislIGRlcGVuZGVuY2llcyA9IEVOQ1MgKyBUUkFOUwogJSBjbGVhbmxpYnMgPSBT
aGVsbHdvcmRzLnNoZWxsd29yZHMoQ09ORklHWyJjbGVhbmxpYnMiXSB8fCAiIikKICUgY2xlYW5v
YmpzID0gU2hlbGx3b3Jkcy5zaGVsbHdvcmRzKENPTkZJR1siY2xlYW5vYmpzIl0gfHwgIiIpCiAl
IGNsZWFub2JqcyA8PCAiJCouZGVmIiBpZiBkZWZmaWxlCkBAIC01NCwzMSArMjcsNTEgQEAgZWxz
ZQogICAnJwogZW5kICU+IDwlPUNPTkZJR1snTElCUyddJT4gJChFWFRMSUJTKQogCi1FTkNPQkpT
ID0gPCU9ZW5jcy5tYXAge3xlfCJlbmMvI3tlfS4kKE9CSkVYVCkifS5qb2luKCIgXFxcblx0ICAi
KSU+PCU9IlxuIiBpZiBlbmNzLnNpemU+MSU+Ci1FTkNTT1MgPSA8JT1lbmNzLm1hcCB7fGV8IiQo
RU5DU09ESVIpLyN7ZX0uJChETEVYVCkifS5qb2luKCIgXFxcblx0ICIpJT48JT0iXG4iIGlmIGVu
Y3Muc2l6ZT4xJT4KK0VOQ09CSlMgPSA8JT1FTkNTLm1hcCB7fGV8ImVuYy8je2V9LiQoT0JKRVhU
KSJ9LmpvaW4oIiBcXFxuXHQgICIpJT48JT0iXG4iIGlmIEVOQ1Muc2l6ZT4xJT4KK0VOQ1NPUyA9
IDwlPUVOQ1MubWFwIHt8ZXwiJChFTkNTT0RJUikvI3tlfS4kKERMRVhUKSJ9LmpvaW4oIiBcXFxu
XHQgIiklPjwlPSJcbiIgaWYgRU5DUy5zaXplPjElPgogRU5DQ0xFQU5MSUJTID0gPCU9Y2xlYW5s
aWJzLm1hcCB7fGNsZWFufAogICBjbGVhbi5nc3ViKC9cJFwqKFwuXHcrKT8vKSB7IiQoRU5DT0JK
UyN7JDEgPyAiOi4je0NPTkZJR1siT0JKRVhUIl19PSN7JDF9IiA6ICIifSkifQogfS5qb2luKCIg
IiklPgogRU5DQ0xFQU5PQkpTID0gPCU9Y2xlYW5vYmpzLm1hcCB7fGNsZWFufAogICBjbGVhbi5n
c3ViKC9cJFwqKFwuXHcrKT8vKSB7IiQoRU5DT0JKUyN7JDEgPyAiOi4je0NPTkZJR1siT0JKRVhU
Il19PSN7JDF9IiA6ICIifSkifQogfS5qb2luKCIgIiklPgorTElCRU5DPWVuYy9saWJlbmMuJChM
SUJFWFQpCiAKIFRSQU5TVlBBVEggPSAkKHNyY2RpcikvZW5jL3RyYW5zCiAKLVRSQU5TQ1NSQ1Mg
PSA8JT1hdHJhbnMubWFwIHt8ZXwgdHJhbnN2cGF0aCAlICIje2V9LmMifS5qb2luKCIgXFxcblx0
ICAgICAiKSU+PCU9IlxuIiBpZiB0cmFucy5zaXplPjElPgotVFJBTlNPQkpTID0gPCU9dHJhbnMu
bWFwIHt8ZXwiZW5jLyN7ZX0uJChPQkpFWFQpIn0uam9pbigiIFxcXG5cdCAgICAiKSU+PCU9Ilxu
IiBpZiB0cmFucy5zaXplPjElPgotVFJBTlNTT1MgPSA8JT10cmFucy5tYXAge3xlfCIkKEVOQ1NP
RElSKS8je2V9LiQoRExFWFQpIn0uam9pbigiIFxcXG5cdCAgICIpJT48JT0iXG4iIGlmIHRyYW5z
LnNpemU+MSU+CitUUkFOU0NTUkNTID0gPCU9QVRSQU5TLm1hcCB7fGV8IHRyYW5zdnBhdGggJSAi
I3tlfS5jIn0uam9pbigiIFxcXG5cdCAgICAgIiklPjwlPSJcbiIgaWYgVFJBTlMuc2l6ZT4xJT4K
K1RSQU5TT0JKUyA9IDwlPVRSQU5TLm1hcCB7fGV8ImVuYy8je2V9LiQoT0JKRVhUKSJ9LmpvaW4o
IiBcXFxuXHQgICAgIiklPjwlPSJcbiIgaWYgVFJBTlMuc2l6ZT4xJT4KK1RSQU5TU09TID0gPCU9
VFJBTlMubWFwIHt8ZXwiJChFTkNTT0RJUikvI3tlfS4kKERMRVhUKSJ9LmpvaW4oIiBcXFxuXHQg
ICAiKSU+PCU9IlxuIiBpZiBUUkFOUy5zaXplPjElPgogVFJBTlNDTEVBTkxJQlMgPSA8JT1jbGVh
bmxpYnMubWFwIHt8Y2xlYW58CiAgIGNsZWFuLmdzdWIoL1wkXCooXC5cdyspPy8pIHsiJChUUkFO
U09CSlMjeyQxID8gIjouI3tDT05GSUdbIk9CSkVYVCJdfT0jeyQxfSIgOiAiIn0pIn0KIH0uam9p
bigiICIpJT4KIFRSQU5TQ0xFQU5PQkpTID0gPCU9Y2xlYW5vYmpzLm1hcCB7fGNsZWFufAogICBj
bGVhbi5nc3ViKC9cJFwqKFwuXHcrKT8vKSB7IiQoVFJBTlNPQkpTI3skMSA/ICI6LiN7Q09ORklH
WyJPQkpFWFQiXX09I3skMX0iIDogIiJ9KSJ9CiB9LmpvaW4oIiAiKSU+CitMSUJUUkFOUz1lbmMv
bGlidHJhbnMuJChMSUJFWFQpCiAKIGVuY3M6IGFsbAorJSBpZiBNT0RVTEVfVFlQRSA9PSA6c3Rh
dGljCithbGw6IGxpYmVuYyBsaWJ0cmFucworJSBlbHNlCiBhbGw6IGVuYyB0cmFucworJWVuZAor
bGliZW5jczogbGliZW5jIGxpYnRyYW5zCiBlbmM6ICQoRU5DU09TKQorbGliZW5jOiAkKExJQkVO
QykKIHRyYW5zOiAkKFRSQU5TU09TKQorbGlidHJhbnM6ICQoTElCVFJBTlMpCisKKyQoTElCRU5D
KTogJChFTkNPQkpTKQorCUAkKFJNKSAkQAorCSQoRUNITykgbGlua2luZyBzdGF0aWNhbGx5LWxp
bmtlZCBlbmNvZGluZyBsaWJyYXJ5ICRACisJJChRKSAkKEFSKSA8JT1DT05GSUdbJ0FSRkxBR1Mn
XSB8fCAncmN1JyAlPiAkQCAkKEVOQ09CSlMpCisJQC0kKFJBTkxJQikgJEAgMj4gL2Rldi9udWxs
IHx8IHRydWUKKyQoTElCVFJBTlMpOiAkKFRSQU5TT0JKUykKKwlAJChSTSkgJEAKKwkkKEVDSE8p
IGxpbmtpbmcgc3RhdGljYWxseS1saW5rZWQgdHJhbnNjb2RlciBsaWJyYXJ5ICRACisJJChRKSAk
KEFSKSA8JT1DT05GSUdbJ0FSRkxBR1MnXSB8fCAncmN1JyAlPiAkQCAkKFRSQU5TT0JKUykKKwlA
LSQoUkFOTElCKSAkQCAyPiAvZGV2L251bGwgfHwgdHJ1ZQogCiBzcmNzOiAkKFRSQU5TQ1NSQ1Mp
CiAKQEAgLTg2LDE1ICs3OSwxNSBAQCBzcmNzOiAkKFRSQU5TQ1NSQ1MpCiAJJChFQ0hPKSBnZW5l
cmF0aW5nIHRhYmxlIGZyb20gJEAKIAkkKFEpJChNSU5JUlVCWSkgIiQoc3JjZGlyKS90b29sL3Ry
YW5zY29kZS10YmxnZW4ucmIiIC12byAiJEAiICIkPCIKIAotJSB1bmxlc3MgZW5jcy5lbXB0eT8g
b3IgdHJhbnMuZW1wdHk/CislIHVubGVzcyBFTkNTLmVtcHR5PyBvciBUUkFOUy5lbXB0eT8KIAot
JSAgIHVubGVzcyBlbmNzLmVtcHR5PworJSAgIHVubGVzcyBFTkNTLmVtcHR5PwogJChFTkNPQkpT
KTogcmVnZW5jLmggb25pZ3VydW1hLmggY29uZmlnLmggZGVmaW5lcy5oCiAlICAgZW5kCi0lICAg
dW5sZXNzIHRyYW5zLmVtcHR5PworJSAgIHVubGVzcyBUUkFOUy5lbXB0eT8KICQoVFJBTlNPQkpT
KTogcnVieS5oIGludGVybi5oIGNvbmZpZy5oIGRlZmluZXMuaCBtaXNzaW5nLmggZW5jb2Rpbmcu
aCBvbmlndXJ1bWEuaCBzdC5oIHRyYW5zY29kZV9kYXRhLmgKICUgICBlbmQKLSUgICBhdHJhbnMu
ZWFjaCBkbyB8ZXwKKyUgICBBVFJBTlMuZWFjaCBkbyB8ZXwKICUgICAgIHNyYyA9ICIje2V9LnRy
YW5zIgogCiA8JT10cmFuc3ZwYXRoICUgIiN7ZX0uYyIlPjogPCU9IHRyYW5zdnBhdGggJSAiI3tl
fS50cmFucyIlPgpAQCAtMTQyLDcgKzEzNSw3IEBAIGVuYy9lbmNkYi4kKE9CSkVYVCk6IGVuY2Ri
LmgKIGVuYy90cmFucy90cmFuc2RiLiQoT0JKRVhUKTogdHJhbnNkYi5oCiAKIGNsZWFuOgotJSAl
d1skKEVOQ1NPUykgJChFTkNPQkpTKSAkKEVOQ0NMRUFOT0JKUykgJChFTkNDTEVBTkxJQlMpICQo
VFJBTlNTT1MpICQoVFJBTlNPQkpTKSAkKFRSQU5TQ0xFQU5PQkpTKSAkKFRSQU5TQ0xFQU5MSUJT
KV0uZWFjaCBkbyB8Y2xlYW58CislICV3WyQoRU5DU09TKSAkKExJQkVOQykgJChFTkNPQkpTKSAk
KEVOQ0NMRUFOT0JKUykgJChFTkNDTEVBTkxJQlMpICQoVFJBTlNTT1MpICQoTElCVFJBTlMpICQo
VFJBTlNPQkpTKSAkKFRSQU5TQ0xFQU5PQkpTKSAkKFRSQU5TQ0xFQU5MSUJTKV0uZWFjaCBkbyB8
Y2xlYW58CiAJJChRKSQoUk0pIDwlPXBhdGhyZXBbY2xlYW5dJT4KICUgZW5kCiAlIEBpZ25vcmVf
ZXJyb3IgPSAkbm1ha2UgPyAnJyA6ICcgMj4gL2Rldi9udWxsIHx8IHRydWUnCkBAIC0xNjAsMyAr
MTUzLDUgQEAgY2xlYW4tc3JjczoKIAkkKFEpJChSTSkgZW5jL3VuaWNvZGUvbmFtZTJjdHlwZS5o
CiAJLSQoUSkkKFJNRElSKSA8JT1wYXRocmVwWydlbmMvdW5pY29kZSddJT48JT1AaWdub3JlX2Vy
cm9yJT4KIAktJChRKSQoUk1ESVIpIDwlPXBhdGhyZXBbJ2VuYyddJT48JT1AaWdub3JlX2Vycm9y
JT4KKworPCUjIHZpbTogc2V0IGZ0PWVydWJ5IG5vZXhwYW5kdGFiIHRzPTggc3c9MiA6IC0lPgpk
aWZmIC0tZ2l0IGEvZW5jL2VuY2luaXQuYy5lcmIgYi9lbmMvZW5jaW5pdC5jLmVyYgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2I5NDAyCi0tLSAvZGV2L251bGwKKysrIGIv
ZW5jL2VuY2luaXQuYy5lcmIKQEAgLTAsMCArMSwyNiBAQAorPCUjIC0qLSBlbmNvZGluZzogVVRG
LTggLSotJT4KKy8qIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIFNvbWUgUmlnaHRzIFJlc2Vy
dmVkLgorICogQXV0aG9yOiB5dWd1aUBnb29nbGUuY29tIChZdWd1aSBTb25vZGEpCisgKi8KKyNp
bmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIGluaXQoZnVuYywgbmFtZSkgewlcCisgICAgZXh0
ZXJuIHZvaWQgZnVuYyh2b2lkKTsJXAorICAgIHJ1YnlfaW5pdF9leHQobmFtZSwgZnVuYyk7CVwK
K30KKwordm9pZCBydWJ5X2luaXRfZXh0KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKCppbml0KSh2
b2lkKSk7CisKK3ZvaWQgSW5pdF9lbmMoKQoreworICA8JSBFTkNTLmVhY2ggZG8gfGVuY3wgLSU+
CisgICAgaW5pdChJbml0XzwlPSBlbmMgJT4sICJlbmMvPCU9IGVuYyAlPi5zbyIpOworICA8JSBl
bmQgLSU+CisKKyAgaW5pdChJbml0X3RyYW5zZGIsICJlbmMvdHJhbnMvdHJhbnNkYi5zbyIpOwor
ICA8JSBUUkFOUy5lYWNoIGRvIHx0cmFuc3wgLSU+CisgICAgPCUgbmV4dCBpZiB0cmFucyA9PSAn
dHJhbnMvdHJhbnNkYicgLSU+CisgICAgaW5pdChJbml0X3RyYW5zXzwlPSBGaWxlLmJhc2VuYW1l
IHRyYW5zICU+LCAiZW5jLzwlPSB0cmFucyAlPi5zbyIpOworICA8JSBlbmQgLSU+Cit9Cis8JSMg
dmltOiBzZXQgZmVuYz11dGYtOCBmdD1lcnVieSBzdz0yIDogLSU+CmRpZmYgLS1naXQgYS9lbmMv
bWFrZV9lbmNtYWtlLnJiIGIvZW5jL21ha2VfZW5jbWFrZS5yYgppbmRleCBlZDM2ODAzLi4yOTE3
NzRlIDEwMDc1NQotLS0gYS9lbmMvbWFrZV9lbmNtYWtlLnJiCisrKyBiL2VuYy9tYWtlX2VuY21h
a2UucmIKQEAgLTE1LDYgKzE1LDcgQEAgQlVJTFRJTl9FTkNTID0gW10KIEJVSUxUSU5fVFJBTlNF
UyA9IFtdCiBFTkNfUEFUVEVSTlMgPSBbXQogTk9FTkNfUEFUVEVSTlMgPSBbXQorbW9kdWxlX3R5
cGUgPSA6ZHluYW1pYwogCiB1bnRpbCBBUkdWLmVtcHR5PwogICBjYXNlIEFSR1ZbMF0KQEAgLTMw
LDExICszMSw1NyBAQCB1bnRpbCBBUkdWLmVtcHR5PwogICB3aGVuIC9cQS0tbm8tZW5jcz0vCiAg
ICAgTk9FTkNfUEFUVEVSTlMuY29uY2F0ICQnLnNwbGl0CiAgICAgQVJHVi5zaGlmdAorICB3aGVu
IC9cQS0tbW9kdWxlJC8KKyAgICBBUkdWLnNoaWZ0CisgIHdoZW4gL1xBLS1tb2R1bGVzdGF0aWMk
LworICAgIG1vZHVsZV90eXBlID0gOnN0YXRpYworICAgIEFSR1Yuc2hpZnQKICAgZWxzZQogICAg
IGJyZWFrCiAgIGVuZAogZW5kCiAKK0FMUEhBTlVNRVJJQ19PUkRFUiA9IHByb2Mge3xlfCBlLnNj
YW4oLyhcZCspfChcRCspLykubWFwIHt8bixhfCBhfHxbbi5zaXplLG4udG9faV19LmZsYXR0ZW59
CitkZWYgdGFyZ2V0X2VuY29kaW5ncworICBlbmNzID0gRGlyLm9wZW4oJHNyY2Rpcikge3xkfCBk
LmdyZXAoLy4rXC5jXHovKX0gLSBCVUlMVElOX0VOQ1MgLSBbIm1rdGFibGUuYyJdCisgIGVuY3Mu
ZWFjaCB7fGV8IGUuY2hvbXAhKCIuYyIpfQorICBlbmNzLnJlamVjdCEge3xlfCAhRU5DX1BBVFRF
Uk5TLmFueT8ge3xwfCBGaWxlLmZubWF0Y2g/KHAsIGUpfX0gaWYgIUVOQ19QQVRURVJOUy5lbXB0
eT8KKyAgZW5jcy5yZWplY3QhIHt8ZXwgTk9FTkNfUEFUVEVSTlMuYW55PyB7fHB8IEZpbGUuZm5t
YXRjaD8ocCwgZSl9fQorICBlbmNzID0gZW5jcy5zb3J0X2J5KCZBTFBIQU5VTUVSSUNfT1JERVIp
CisgIGVuY3MudW5zaGlmdChlbmNzLmRlbGV0ZSgiZW5jZGIiKSkKKyAgcmV0dXJuIGVuY3MKK2Vu
ZAorCitkZWYgdGFyZ2V0X3RyYW5zY29kZXJzCisgIGF0cmFucyA9IFtdCisgIHRyYW5zID0gRGly
Lm9wZW4oJHNyY2RpcisiL3RyYW5zIikge3xkfAorICAgIGQuc2VsZWN0IHt8ZXwKKyAgICAgIGlm
IGUuY2hvbXAhKCcudHJhbnMnKQorICAgICAgICBhdHJhbnMgPDwgZQorICAgICAgICB0cnVlCisg
ICAgICBlbHNpZiBlLmNob21wISgnLmMnKQorICAgICAgICB0cnVlCisgICAgICBlbmQKKyAgICB9
CisgIH0KKyAgdHJhbnMgLT0gQlVJTFRJTl9UUkFOU0VTCisgIGF0cmFucyAtPSBCVUlMVElOX1RS
QU5TRVMKKyAgdHJhbnMudW5pcSEKKyAgYXRyYW5zID0gYXRyYW5zLnNvcnRfYnkoJkFMUEhBTlVN
RVJJQ19PUkRFUikKKyAgdHJhbnMgPSB0cmFucy5zb3J0X2J5KCZBTFBIQU5VTUVSSUNfT1JERVIp
CisgIHRyYW5zLnVuc2hpZnQodHJhbnMuZGVsZXRlKCJ0cmFuc2RiIikpCisgIHRyYW5zLmNvbXBh
Y3QhCisgIHRyYW5zIHw9IGF0cmFucworICB0cmFucy5tYXAhIHt8ZXwgInRyYW5zLyN7ZX0ifQor
CisgIHJldHVybiBhdHJhbnMsIHRyYW5zCitlbmQKKworIyBDb25zdGFudHMgdGhhdCAiZGVwZW5k
IiBuZWVkcy4KK01PRFVMRV9UWVBFID0gbW9kdWxlX3R5cGUKK0VOQ1MgPSB0YXJnZXRfZW5jb2Rp
bmdzCitBVFJBTlMsIFRSQU5TID0gdGFyZ2V0X3RyYW5zY29kZXJzCisKIGlmIEZpbGUuZXhpc3Q/
KGRlcGVuZCA9IEZpbGUuam9pbigkc3JjZGlyLCAiZGVwZW5kIikpCiAgIGVyYiA9IEVSQi5uZXco
RmlsZS5yZWFkKGRlcGVuZCksIG5pbCwgJyUnKQogICBlcmIuZmlsZW5hbWUgPSBkZXBlbmQKQEAg
LTQ4LDMgKzk1LDE4IEBAIG1raW4uZ3N1YiEoL0AoI3tDT05GSUcua2V5cy5qb2luKCd8Jyl9KUAv
KSB7Q09ORklHWyQxXX0KIG9wZW4oQVJHVlswXSwgJ3diJykge3xmfAogICBmLnB1dHMgbWtpbiwg
ZGVwCiB9CitpZiBNT0RVTEVfVFlQRSA9PSA6c3RhdGljCisgIGVyYiA9IEVSQi5uZXcoRmlsZS5y
ZWFkKEZpbGUuam9pbigkc3JjZGlyLCAiZW5jaW5pdC5jLmVyYiIpKSwgbmlsLCAnJS0nKQorICBl
cmIuZmlsZW5hbWUgPSAiZW5jL2VuY2luaXQuYy5jZXJiIgorICB0bXAgPSBlcmIucmVzdWx0KGJp
bmRpbmcpCisgIGJlZ2luCisgICAgRGlyLm1rZGlyICdlbmMnCisgIHJlc2N1ZSBFcnJubzo6RUVY
SVNUCisgIGVuZAorICBGaWxlLm9wZW4oImVuYy9lbmNpbml0LmMiLCAidyIpIHt8ZnwKKyAgICBm
LnB1dHMgIi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW5jL2VuY2luaXQuYy5lcmIi
CisgICAgZi5wdXRzICIgKiBEbyBub3QgZWRpdC4iCisgICAgZi5wdXRzICIgKi8iCisgICAgZi5w
dXRzIHRtcAorICB9CitlbmQKZGlmZiAtLWdpdCBhL2VuYy90cmFucy9iaWc1LnRyYW5zIGIvZW5j
L3RyYW5zL2JpZzUudHJhbnMKaW5kZXggOWRhY2ZkMS4uYzg1YWRhMyAxMDA2NDQKLS0tIGEvZW5j
L3RyYW5zL2JpZzUudHJhbnMKKysrIGIvZW5jL3RyYW5zL2JpZzUudHJhbnMKQEAgLTI2LDggKzI2
LDcgQEAKIAogPCU9IHRyYW5zY29kZV9nZW5lcmF0ZWRfY29kZSAlPgogCi12b2lkCi1Jbml0X2Jp
ZzUodm9pZCkKK1RSQU5TX0lOSVQoYmlnNSkKIHsKIDwlPSB0cmFuc2NvZGVfcmVnaXN0ZXJfY29k
ZSAlPgogfQpkaWZmIC0tZ2l0IGEvZW5jL3RyYW5zL2NoaW5lc2UudHJhbnMgYi9lbmMvdHJhbnMv
Y2hpbmVzZS50cmFucwppbmRleCAwNjYyYTNiLi4yODJjOTFhIDEwMDY0NAotLS0gYS9lbmMvdHJh
bnMvY2hpbmVzZS50cmFucworKysgYi9lbmMvdHJhbnMvY2hpbmVzZS50cmFucwpAQCAtMjUsOCAr
MjUsNyBAQAogCiA8JT0gdHJhbnNjb2RlX2dlbmVyYXRlZF9jb2RlICU+CiAKLXZvaWQKLUluaXRf
Y2hpbmVzZSh2b2lkKQorVFJBTlNfSU5JVChjaGluZXNlKQogewogPCU9IHRyYW5zY29kZV9yZWdp
c3Rlcl9jb2RlICU+CiB9CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvZW1vamkudHJhbnMgYi9lbmMv
dHJhbnMvZW1vamkudHJhbnMKaW5kZXggMWNmMTM3NC4uMjVkOWZkZCAxMDA2NDQKLS0tIGEvZW5j
L3RyYW5zL2Vtb2ppLnRyYW5zCisrKyBiL2VuYy90cmFucy9lbW9qaS50cmFucwpAQCAtMzAsOCAr
MzAsNyBAQAogCiA8JT0gdHJhbnNjb2RlX2dlbmVyYXRlZF9jb2RlICU+CiAKLXZvaWQKLUluaXRf
ZW1vamkodm9pZCkKK1RSQU5TX0lOSVQoZW1vamkpCiB7CiA8JT0gdHJhbnNjb2RlX3JlZ2lzdGVy
X2NvZGUgJT4KIH0KZGlmZiAtLWdpdCBhL2VuYy90cmFucy9lbW9qaV9pc28yMDIyX2tkZGkudHJh
bnMgYi9lbmMvdHJhbnMvZW1vamlfaXNvMjAyMl9rZGRpLnRyYW5zCmluZGV4IGNjZjMxMzkuLmVh
MTgwYzEgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9lbW9qaV9pc28yMDIyX2tkZGkudHJhbnMKKysr
IGIvZW5jL3RyYW5zL2Vtb2ppX2lzbzIwMjJfa2RkaS50cmFucwpAQCAtMjA4LDggKzIwOCw3IEBA
IHJiX2lzbzIwMjJqcF9rZGRpX2VuY29kZXIgPSB7CiAgICAgaXNvMjAyMmpwX2tkZGlfZW5jb2Rl
cl9yZXNldF9zZXF1ZW5jZV9zaXplLCBmaW5pc2hfaXNvMjAyMmpwX2tkZGlfZW5jb2RlcgogfTsK
IAotdm9pZAotSW5pdF9lbW9qaV9pc28yMDIyX2tkZGkodm9pZCkKK1RSQU5TX0lOSVQoZW1vamlf
aXNvMjAyMl9rZGRpKQogewogICAgIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIoJnJiX2lzbzIwMjJq
cF9rZGRpX2RlY29kZXIpOwogICAgIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIoJnJiX2lzbzIwMjJq
cF9rZGRpX2VuY29kZXIpOwpkaWZmIC0tZ2l0IGEvZW5jL3RyYW5zL2Vtb2ppX3NqaXNfZG9jb21v
LnRyYW5zIGIvZW5jL3RyYW5zL2Vtb2ppX3NqaXNfZG9jb21vLnRyYW5zCmluZGV4IDM2ZTZlMjAu
LjVkZDljN2EgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9lbW9qaV9zamlzX2RvY29tby50cmFucwor
KysgYi9lbmMvdHJhbnMvZW1vamlfc2ppc19kb2NvbW8udHJhbnMKQEAgLTI2LDggKzI2LDcgQEAK
IAogPCU9IHRyYW5zY29kZV9nZW5lcmF0ZWRfY29kZSAlPgogCi12b2lkCi1Jbml0X2Vtb2ppX3Nq
aXNfZG9jb21vKHZvaWQpCitUUkFOU19JTklUKGVtb2ppX3NqaXNfZG9jb21vKQogewogPCU9IHRy
YW5zY29kZV9yZWdpc3Rlcl9jb2RlICU+CiB9CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvZW1vamlf
c2ppc19rZGRpLnRyYW5zIGIvZW5jL3RyYW5zL2Vtb2ppX3NqaXNfa2RkaS50cmFucwppbmRleCA2
NTRiZWQxLi42ZGY2MmYxIDEwMDY0NAotLS0gYS9lbmMvdHJhbnMvZW1vamlfc2ppc19rZGRpLnRy
YW5zCisrKyBiL2VuYy90cmFucy9lbW9qaV9zamlzX2tkZGkudHJhbnMKQEAgLTI3LDggKzI3LDcg
QEAKIAogPCU9IHRyYW5zY29kZV9nZW5lcmF0ZWRfY29kZSAlPgogCi12b2lkCi1Jbml0X2Vtb2pp
X3NqaXNfa2RkaSh2b2lkKQorVFJBTlNfSU5JVChlbW9qaV9zamlzX2tkZGkpCiB7CiA8JT0gdHJh
bnNjb2RlX3JlZ2lzdGVyX2NvZGUgJT4KIH0KZGlmZiAtLWdpdCBhL2VuYy90cmFucy9lbW9qaV9z
amlzX3NvZnRiYW5rLnRyYW5zIGIvZW5jL3RyYW5zL2Vtb2ppX3NqaXNfc29mdGJhbmsudHJhbnMK
aW5kZXggYzE1MmQ5OS4uYzUyMDAzNSAxMDA2NDQKLS0tIGEvZW5jL3RyYW5zL2Vtb2ppX3NqaXNf
c29mdGJhbmsudHJhbnMKKysrIGIvZW5jL3RyYW5zL2Vtb2ppX3NqaXNfc29mdGJhbmsudHJhbnMK
QEAgLTI2LDggKzI2LDcgQEAKIAogPCU9IHRyYW5zY29kZV9nZW5lcmF0ZWRfY29kZSAlPgogCi12
b2lkCi1Jbml0X2Vtb2ppX3NqaXNfc29mdGJhbmsodm9pZCkKK1RSQU5TX0lOSVQoZW1vamlfc2pp
c19zb2Z0YmFuaykKIHsKIDwlPSB0cmFuc2NvZGVfcmVnaXN0ZXJfY29kZSAlPgogfQpkaWZmIC0t
Z2l0IGEvZW5jL3RyYW5zL2VzY2FwZS50cmFucyBiL2VuYy90cmFucy9lc2NhcGUudHJhbnMKaW5k
ZXggYTJmYmViYS4uNTUwZTRhYyAxMDA2NDQKLS0tIGEvZW5jL3RyYW5zL2VzY2FwZS50cmFucwor
KysgYi9lbmMvdHJhbnMvZXNjYXBlLnRyYW5zCkBAIC04NSw4ICs4NSw3IEBAIHJiX2VzY2FwZV94
bWxfYXR0cl9xdW90ZSA9IHsKICAgICBlc2NhcGVfeG1sX2F0dHJfcXVvdGVfZmluaXNoCiB9Owog
Ci12b2lkCi1Jbml0X2VzY2FwZSh2b2lkKQorVFJBTlNfSU5JVChlc2NhcGUpCiB7CiA8JT0gdHJh
bnNjb2RlX3JlZ2lzdGVyX2NvZGUgJT4KICAgICByYl9yZWdpc3Rlcl90cmFuc2NvZGVyKCZyYl9l
c2NhcGVfeG1sX2F0dHJfcXVvdGUpOwpkaWZmIC0tZ2l0IGEvZW5jL3RyYW5zL2diMTgwMzAudHJh
bnMgYi9lbmMvdHJhbnMvZ2IxODAzMC50cmFucwppbmRleCBjN2RhNGM2Li45NGM4NjZlIDEwMDY0
NAotLS0gYS9lbmMvdHJhbnMvZ2IxODAzMC50cmFucworKysgYi9lbmMvdHJhbnMvZ2IxODAzMC50
cmFucwpAQCAtMTc2LDggKzE3Niw3IEBAIHJiX3RvX0dCMTgwMzAgPSB7CiB9OwogCiAKLXZvaWQK
LUluaXRfZ2IxODAzMCh2b2lkKQorVFJBTlNfSU5JVChnYjE4MDMwKQogewogICAgIHJiX3JlZ2lz
dGVyX3RyYW5zY29kZXIoJnJiX2Zyb21fR0IxODAzMCk7CiAgICAgcmJfcmVnaXN0ZXJfdHJhbnNj
b2RlcigmcmJfdG9fR0IxODAzMCk7CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvZ2JrLnRyYW5zIGIv
ZW5jL3RyYW5zL2diay50cmFucwppbmRleCAwZGYxNDgxLi4zYzJjZjBjIDEwMDY0NAotLS0gYS9l
bmMvdHJhbnMvZ2JrLnRyYW5zCisrKyBiL2VuYy90cmFucy9nYmsudHJhbnMKQEAgLTksOCArOSw3
IEBACiAKIDwlPSB0cmFuc2NvZGVfZ2VuZXJhdGVkX2NvZGUgJT4KIAotdm9pZAotSW5pdF9nYmso
dm9pZCkKK1RSQU5TX0lOSVQoZ2JrKQogewogPCU9IHRyYW5zY29kZV9yZWdpc3Rlcl9jb2RlICU+
CiB9CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvaXNvMjAyMi50cmFucyBiL2VuYy90cmFucy9pc28y
MDIyLnRyYW5zCmluZGV4IDNmNDBjY2UuLmE0NDFmMTUgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9p
c28yMDIyLnRyYW5zCisrKyBiL2VuYy90cmFucy9pc28yMDIyLnRyYW5zCkBAIC01NTMsOCArNTUz
LDcgQEAgcmJfY3A1MDIyMF9lbmNvZGVyID0gewogICAgIGlzbzIwMjJqcF9lbmNvZGVyX3Jlc2V0
X3NlcXVlbmNlX3NpemUsIGZpbmlzaF9jcDUwMjIwX2VuY29kZXIKIH07CiAKLXZvaWQKLUluaXRf
aXNvMjAyMih2b2lkKQorVFJBTlNfSU5JVChpc28yMDIyKQogewogICAgIHJiX3JlZ2lzdGVyX3Ry
YW5zY29kZXIoJnJiX2lzbzIwMjJqcF9kZWNvZGVyKTsKICAgICByYl9yZWdpc3Rlcl90cmFuc2Nv
ZGVyKCZyYl9pc28yMDIyanBfZW5jb2Rlcik7CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvamFwYW5l
c2UudHJhbnMgYi9lbmMvdHJhbnMvamFwYW5lc2UudHJhbnMKaW5kZXggY2U1ZDBiYi4uN2ZmMDI0
ZiAxMDA2NDQKLS0tIGEvZW5jL3RyYW5zL2phcGFuZXNlLnRyYW5zCisrKyBiL2VuYy90cmFucy9q
YXBhbmVzZS50cmFucwpAQCAtOTAsOCArOTAsNyBAQCByYl9zamlzMmV1Y2pwID0gewogICAgIE5V
TEwsIE5VTEwsIE5VTEwsIGZ1bl9zb19zamlzMmV1Y2pwCiB9OwogCi12b2lkCi1Jbml0X2phcGFu
ZXNlKHZvaWQpCitUUkFOU19JTklUKGphcGFuZXNlKQogewogICAgIHJiX3JlZ2lzdGVyX3RyYW5z
Y29kZXIoJnJiX2V1Y2pwMnNqaXMpOwogICAgIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIoJnJiX3Nq
aXMyZXVjanApOwpkaWZmIC0tZ2l0IGEvZW5jL3RyYW5zL2phcGFuZXNlX2V1Yy50cmFucyBiL2Vu
Yy90cmFucy9qYXBhbmVzZV9ldWMudHJhbnMKaW5kZXggZmY5NzZlNC4uMGY2MzI3MiAxMDA2NDQK
LS0tIGEvZW5jL3RyYW5zL2phcGFuZXNlX2V1Yy50cmFucworKysgYi9lbmMvdHJhbnMvamFwYW5l
c2VfZXVjLnRyYW5zCkBAIC01MSw4ICs1MSw3IEBACiAKIDwlPSB0cmFuc2NvZGVfZ2VuZXJhdGVk
X2NvZGUgJT4KIAotdm9pZAotSW5pdF9qYXBhbmVzZV9ldWModm9pZCkKK1RSQU5TX0lOSVQoamFw
YW5lc2VfZXVjKQogewogPCU9IHRyYW5zY29kZV9yZWdpc3Rlcl9jb2RlICU+CiB9CmRpZmYgLS1n
aXQgYS9lbmMvdHJhbnMvamFwYW5lc2Vfc2ppcy50cmFucyBiL2VuYy90cmFucy9qYXBhbmVzZV9z
amlzLnRyYW5zCmluZGV4IDAwZWFjZTIuLjhlMWUxMzAgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9q
YXBhbmVzZV9zamlzLnRyYW5zCisrKyBiL2VuYy90cmFucy9qYXBhbmVzZV9zamlzLnRyYW5zCkBA
IC0yNyw4ICsyNyw3IEBACiAKIDwlPSB0cmFuc2NvZGVfZ2VuZXJhdGVkX2NvZGUgJT4KIAotdm9p
ZAotSW5pdF9qYXBhbmVzZV9zamlzKHZvaWQpCitUUkFOU19JTklUKGphcGFuZXNlX3NqaXMpCiB7
CiA8JT0gdHJhbnNjb2RlX3JlZ2lzdGVyX2NvZGUgJT4KIH0KZGlmZiAtLWdpdCBhL2VuYy90cmFu
cy9rb3JlYW4udHJhbnMgYi9lbmMvdHJhbnMva29yZWFuLnRyYW5zCmluZGV4IGVmMWNkZmMuLmZk
YTFhM2UgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9rb3JlYW4udHJhbnMKKysrIGIvZW5jL3RyYW5z
L2tvcmVhbi50cmFucwpAQCAtMTIsOCArMTIsNyBAQAogCiA8JT0gdHJhbnNjb2RlX2dlbmVyYXRl
ZF9jb2RlICU+CiAKLXZvaWQKLUluaXRfa29yZWFuKHZvaWQpCitUUkFOU19JTklUKGtvcmVhbikK
IHsKIDwlPSB0cmFuc2NvZGVfcmVnaXN0ZXJfY29kZSAlPgogfQpkaWZmIC0tZ2l0IGEvZW5jL3Ry
YW5zL3NpbmdsZV9ieXRlLnRyYW5zIGIvZW5jL3RyYW5zL3NpbmdsZV9ieXRlLnRyYW5zCmluZGV4
IDIyOTNiZjYuLjUwZjU2OGMgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy9zaW5nbGVfYnl0ZS50cmFu
cworKysgYi9lbmMvdHJhbnMvc2luZ2xlX2J5dGUudHJhbnMKQEAgLTg0LDggKzg0LDcgQEAKIAog
PCU9IHRyYW5zY29kZV9nZW5lcmF0ZWRfY29kZSAlPgogCi12b2lkCi1Jbml0X3NpbmdsZV9ieXRl
KHZvaWQpCitUUkFOU19JTklUKHNpbmdsZV9ieXRlKQogewogPCU9IHRyYW5zY29kZV9yZWdpc3Rl
cl9jb2RlICU+CiB9CmRpZmYgLS1naXQgYS9lbmMvdHJhbnMvdXRmOF9tYWMudHJhbnMgYi9lbmMv
dHJhbnMvdXRmOF9tYWMudHJhbnMKaW5kZXggOGVhMGFmZC4uMTFjZTM1ZSAxMDA2NDQKLS0tIGEv
ZW5jL3RyYW5zL3V0ZjhfbWFjLnRyYW5zCisrKyBiL2VuYy90cmFucy91dGY4X21hYy50cmFucwpA
QCAtMjMzLDggKzIzMyw3IEBAIHJiX2Zyb21fVVRGOF9NQUMgPSB7CiAgICAgZnJvbV91dGY4X21h
Y19maW5pc2gKIH07CiAKLXZvaWQKLUluaXRfdXRmOF9tYWModm9pZCkKK1RSQU5TX0lOSVQodXRm
OF9tYWMpCiB7CiA8JT0gdHJhbnNjb2RlX3JlZ2lzdGVyX2NvZGUgJT4KICAgICByYl9yZWdpc3Rl
cl90cmFuc2NvZGVyKCZyYl9mcm9tX1VURjhfTUFDKTsKZGlmZiAtLWdpdCBhL2VuYy90cmFucy91
dGZfMTZfMzIudHJhbnMgYi9lbmMvdHJhbnMvdXRmXzE2XzMyLnRyYW5zCmluZGV4IGM4NDFkZjAu
LjYzMmM4ODAgMTAwNjQ0Ci0tLSBhL2VuYy90cmFucy91dGZfMTZfMzIudHJhbnMKKysrIGIvZW5j
L3RyYW5zL3V0Zl8xNl8zMi50cmFucwpAQCAtNTM5LDggKzUzOSw3IEBAIHJiX3RvX1VURl8zMiA9
IHsKICAgICBOVUxMLCBOVUxMLCBOVUxMLCBmdW5fc29fdG9fdXRmXzMyCiB9OwogCi12b2lkCi1J
bml0X3V0Zl8xNl8zMih2b2lkKQorVFJBTlNfSU5JVCh1dGZfMTZfMzIpCiB7CiAgICAgcmJfcmVn
aXN0ZXJfdHJhbnNjb2RlcigmcmJfZnJvbV9VVEZfMTZCRSk7CiAgICAgcmJfcmVnaXN0ZXJfdHJh
bnNjb2RlcigmcmJfdG9fVVRGXzE2QkUpOwpkaWZmIC0tZ2l0IGEvZXh0L2V4dG1rLnJiIGIvZXh0
L2V4dG1rLnJiCmluZGV4IDNiMmMwYzYuLmM4ZmY2NjQgMTAwNzU1Ci0tLSBhL2V4dC9leHRtay5y
YgorKysgYi9leHQvZXh0bWsucmIKQEAgLTEwLDcgKzEwLDcgQEAgJGRyeXJ1biA9IGZhbHNlCiAk
Y2xlYW4gPSBuaWwKICRub2R5bmFtaWMgPSBuaWwKICRleHRpbml0ID0gbmlsCi0kZXh0b2JqcyA9
IG5pbAorJGV4dG9ianMgPSBbXQogJGV4dGZsYWdzID0gIiIKICRleHRsaWJzID0gbmlsCiAkZXh0
cGF0aCA9IG5pbApAQCAtMjYsNiArMjYsOCBAQCBhbGlhcyAkMCAkcHJvZ25hbWUKICRleHRsaXN0
ID0gW10KICRjb21waWxlZCA9IHt9CiAKK0RVTU1ZX1NJR05BVFVSRSA9ICIqKipEVU1NWSBNQUtF
RklMRSoqKiIKKwogc3JjZGlyID0gRmlsZS5kaXJuYW1lKEZpbGUuZGlybmFtZShfX0ZJTEVfXykp
CiB1bmxlc3MgZGVmaW5lZD8oQ1JPU1NfQ09NUElMSU5HKSBhbmQgQ1JPU1NfQ09NUElMSU5HCiAg
ICQ6LnJlcGxhY2UoW0ZpbGUuZXhwYW5kX3BhdGgoImxpYiIsIHNyY2RpciksIERpci5wd2RdKQpA
QCAtNDYsNyArNDgsMTggQEAgZGVmIHN5c3F1b3RlKHgpCiBlbmQKIAogZGVmIHZlcmJvc2U/Ci0g
ICRtZmxhZ3MuZGVmaW5lZD8oIlEiKSAhPSAiQCIKKyAgJG1mbGFncy5kZWZpbmVkPygiViIpID09
ICIxIgorZW5kCisKK2RlZiBzeXN0ZW0oKmFyZ3MpCisgIGlmIHZlcmJvc2U/CisgICAgaWYgYXJn
cy5zaXplID09IDEKKyAgICAgIHB1dHMgYXJncworICAgIGVsc2UKKyAgICAgIHB1dHMgYXJncy5t
YXB7fGFyZ3wgU2hlbGx3b3Jkcy5lc2NhcGUoYXJnKX0uam9pbignICcpCisgICAgZW5kCisgIGVu
ZAorICBzdXBlcgogZW5kCiAKIGRlZiBleHRyYWN0X21ha2VmaWxlKG1ha2VmaWxlLCBrZWVwID0g
dHJ1ZSkKQEAgLTEwMCw3ICsxMTMsNyBAQCBkZWYgZXh0cmFjdF9tYWtlZmlsZShtYWtlZmlsZSwg
a2VlcCA9IHRydWUpCiBlbmQKIAogZGVmIGV4dG1ha2UodGFyZ2V0KQotICB1bmxlc3MgJGNvbmZp
Z3VyZV9vbmx5CisgIHVubGVzcyAkY29uZmlndXJlX29ubHkgfHwgdmVyYm9zZT8KICAgICBwcmlu
dCAiI3skbWVzc2FnZX0gI3t0YXJnZXR9XG4iCiAgICAgJHN0ZG91dC5mbHVzaAogICBlbmQKQEAg
LTE2Myw3ICsxNzYsMTEgQEAgZGVmIGV4dG1ha2UodGFyZ2V0KQogICAgICAgICB0aGVuCiAJICBv
ayA9IGZhbHNlCiAgICAgICAgICAgaWYgJGNvbmZpZ3VyZV9vbmx5Ci0gICAgICAgICAgICBwcmlu
dCAiI3skbWVzc2FnZX0gI3t0YXJnZXR9XG4iCisgICAgICAgICAgICBpZiB2ZXJib3NlPworICAg
ICAgICAgICAgICBwcmludCAiI3tjb25mfVxuIiBpZiBjb25mCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgIHByaW50ICIjeyRtZXNzYWdlfSAje3RhcmdldH1cbiIKKyAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgJHN0ZG91dC5mbHVzaAogICAgICAgICAgIGVuZAogICAgICAgICAg
IGluaXRfbWttZgpAQCAtMTkzLDkgKzIxMCwxMSBAQCBkZWYgZXh0bWFrZSh0YXJnZXQpCiAJJDAg
PSAkUFJPR1JBTV9OQU1FCiAgICAgICBlbmQKICAgICBlbmQKKyAgICBvayAmJj0gRmlsZS5vcGVu
KG1ha2VmaWxlKXt8ZnwgIWYuZ2V0c1tEVU1NWV9TSUdOQVRVUkVdfQogICAgIG9rID0geWllbGQo
b2spIGlmIGJsb2NrX2dpdmVuPwogICAgIHVubGVzcyBvawogICAgICAgb3BlbihtYWtlZmlsZSwg
InciKSBkbyB8ZnwKKyAgICAgICAgZi5wdXRzICIjICIgKyBEVU1NWV9TSUdOQVRVUkUKIAlmLnBy
aW50KCpkdW1teV9tYWtlZmlsZShDT05GSUdbInNyY2RpciJdKSkKICAgICAgIGVuZAogICAgICAg
cHJpbnQgIkZhaWxlZCB0byBjb25maWd1cmUgI3t0YXJnZXR9LiBJdCB3aWxsIG5vdCBiZSBpbnN0
YWxsZWQuXG4iCkBAIC0yMDUsOSArMjI0LDkgQEAgZGVmIGV4dG1ha2UodGFyZ2V0KQogICAgIHVu
bGVzcyAkZGVzdGRpci50b19zLmVtcHR5PyBvciAkbWZsYWdzLmRlZmluZWQ/KCJERVNURElSIikK
ICAgICAgIGFyZ3MgKz0gW3N5c3F1b3RlKCJERVNURElSPSIgKyByZWxhdGl2ZV9mcm9tKCRkZXN0
ZGlyLCAiLi4vIitwcmVmaXgpKV0KICAgICBlbmQKLSAgICBpZiAkc3RhdGljCisgICAgaWYgJHN0
YXRpYyBhbmQgJXIoXEEtdGVzdC0pICF+IHRhcmdldCBhbmQgdGFyZ2V0ICE9ICdqc29uJyBhbmQg
b2sKICAgICAgIGFyZ3MgKz0gWyJzdGF0aWMiXSB1bmxlc3MgJGNsZWFuCi0gICAgICAkZXh0bGlz
dC5wdXNoIFskc3RhdGljLCAkdGFyZ2V0LCBGaWxlLmJhc2VuYW1lKCR0YXJnZXQpLCAkcHJlbG9h
ZF0KKyAgICAgICRleHRsaXN0LnB1c2ggWyRzdGF0aWMsIHRhcmdldCwgJHRhcmdldCwgJHByZWxv
YWRdCiAgICAgZW5kCiAgICAgRmlsZVV0aWxzLnJtX2Yob2xkX2NsZWFuZmlsZXMgLSAkZGlzdGNs
ZWFuZmlsZXMpCiAgICAgRmlsZVV0aWxzLnJtX2Yob2xkX29ianMgLSAkb2JqcykKQEAgLTQ2Niw3
ICs0ODUsNyBAQCBEaXI6OmNoZGlyKCdleHQnKQogaGRyZGlyID0gJGhkcmRpcgogJGhkcmRpciA9
ICgkdG9wX3NyY2RpciA9IHJlbGF0aXZlX2Zyb20oc3JjZGlyLCAkdG9wZGlyID0gIi4uIikpICsg
Ii9pbmNsdWRlIgogZXh0cy5lYWNoIGRvIHxkfAotICAkc3RhdGljID0gJGZvcmNlX3N0YXRpYyA/
ICRzdGF0aWNfZXh0W3RhcmdldF0gOiBuaWwKKyAgJHN0YXRpYyA9ICRmb3JjZV9zdGF0aWMgPyB0
cnVlIDogJHN0YXRpY19leHRbdGFyZ2V0XQogCiAgIGlmICRpZ25vcmUgb3IgISRub2R5bmFtaWMg
b3IgJHN0YXRpYwogICAgIGV4dG1ha2UoZCkgb3IgYWJvcnQKQEAgLTUwMiw3ICs1MjEsNyBAQCBp
ZiAkaWdub3JlCiBlbmQKIAogJGV4dGluaXQgfHw9ICIiCi0kZXh0b2JqcyB8fD0gIiIKKyRleHRv
YmpzIHx8PSBbXQogJGV4dHBhdGggfHw9IFtdCiAkZXh0ZmxhZ3MgfHw9ICIiCiAkZXh0bGlicyB8
fD0gW10KQEAgLTUxOSwzMSArNTM4LDI3IEBAIHVubGVzcyAkZXh0bGlzdC5lbXB0eT8KICAgICAg
IGVuZAogICAgICAgbmV4dAogICAgIGVuZAotICAgIGYgPSBmb3JtYXQoIiVzLyVzLiVzIiwgdCwg
aSwgJExJQkVYVCkKLSAgICBpZiBGaWxlLmV4aXN0PyhmKQotICAgICAgJGV4dGluaXQgPDwgIiAg
ICBpbml0KEluaXRfI3tpfSwgXCIje3R9LnNvXCIpO1xuIgotICAgICAgJGV4dG9ianMgPDwgImV4
dC8je2Z9ICIKLSAgICAgIGJ1aWx0IDw8IHQKLSAgICBlbmQKKyAgICAkZXh0aW5pdCA8PCAiICAg
IGluaXQoSW5pdF8je0ZpbGUuYmFzZW5hbWUgaX0sIFwiI3tpfS5zb1wiKTtcbiIKKyAgICAkZXh0
b2JqcyA8PCBmb3JtYXQoImV4dC8lcy8lcy4lcyIsIHQsIEZpbGUuYmFzZW5hbWUoaSksICRMSUJF
WFQpCisgICAgYnVpbHQgPDwgdAogICBlbmQKIAogICBzcmMgPSAle1wKLSNpbmNsdWRlICJydWJ5
LmgiCisjaW5jbHVkZSAicnVieS9ydWJ5LmgiCiAKICNkZWZpbmUgaW5pdChmdW5jLCBuYW1lKSB7
CVxcCi0gICAgZXh0ZXJuIHZvaWQgZnVuYyBfKCh2b2lkKSk7CVxcCisgICAgZXh0ZXJuIHZvaWQg
ZnVuYyh2b2lkKTsJXFwKICAgICBydWJ5X2luaXRfZXh0KG5hbWUsIGZ1bmMpOwlcXAogfQogCi12
b2lkIHJ1YnlfaW5pdF9leHQgXygoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAoKmluaXQpKHZvaWQp
KSk7Cit2b2lkIHJ1YnlfaW5pdF9leHQoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAoKmluaXQpKHZv
aWQpKTsKIAotdm9pZCBJbml0X2V4dCBfKCh2b2lkKSlcbntcbiMkZXh0aW5pdH0KK3ZvaWQgSW5p
dF9leHQodm9pZClcbntcbiMkZXh0aW5pdH0KIH0KICAgaWYgIW1vZGlmaWVkPyhleHRpbml0LmMs
IE1USU1FUykgfHwgSU8ucmVhZChleHRpbml0LmMpICE9IHNyYwogICAgIG9wZW4oZXh0aW5pdC5j
LCAidyIpIHt8ZmV8IGZlLnByaW50IHNyY30KICAgZW5kCiAKLSAgJGV4dG9ianMgPSAiZXh0LyN7
ZXh0aW5pdC5vfSAjeyRleHRvYmpzfSIKICAgaWYgUlVCWV9QTEFURk9STSA9fiAvYmVvcy8KICAg
ICAkZXh0ZmxhZ3MuZGVsZXRlKCItTC91c3IvbG9jYWwvbGliIikKICAgZW5kCkBAIC01NTIsNyAr
NTY3LDYgQEAgdm9pZCBJbml0X2V4dCBfKCh2b2lkKSlcbntcbiMkZXh0aW5pdH0KICAgY29uZiA9
IFsKICAgICBbJ0xJQlJVQllfU09fVVBEQVRFJywgJyQoTElCUlVCWV9FWFRTKSddLAogICAgIFsn
U0VUVVAnLCAkc2V0dXBdLAotICAgIFtlbmFibGVfY29uZmlnKCJzaGFyZWQiLCAkZW5hYmxlX3No
YXJlZCkgPyAnRExET0JKUycgOiAnRVhUT0JKUycsICRleHRvYmpzXSwKICAgICBbJ0VYVExJQlMn
LCAkZXh0bGlicy5qb2luKCcgJyldLCBbJ0VYVExERkxBR1MnLCAkZXh0ZmxhZ3NdCiAgIF0ubWFw
IHt8biwgdnwKICAgICAiI3tufT0je3Z9IiBpZiB2IGFuZCAhKHYgPSB2LnN0cmlwKS5lbXB0eT8K
QEAgLTYxNSwyMSArNjI5LDM0IEBAIGlmICRjb25maWd1cmVfb25seSBhbmQgJGNvbW1hbmRfb3V0
cHV0CiAgICAgICB3ICs9IGQuc2l6ZSArIDEKICAgICBlbmQKICAgICBtZi5wdXRzCisgICAgaWYg
ISRleHRsaXN0LmVtcHR5PworICAgICAgbWYucHV0cyAiRVhUT0JKUyA9IGV4dC9leHRpbml0LiN7
JE9CSkVYVH0gI3skZXh0b2Jqcy5qb2luKCcgJyl9IgorICAgICAgbWYucHV0cyAiRVhUTElCUyA9
ICN7JGV4dGxpYnMuam9pbignICcpfSIKKyAgICBlbHNlCisgICAgICBtZi5wdXRzICJFWFRPQkpT
ID0gIgorICAgICAgbWYucHV0cyAiRVhUTElCUyA9ICIKKyAgICBlbmQKKyAgICBtZi5wdXRzCiAg
ICAgdGFyZ2V0cyA9ICV3W2FsbCBpbnN0YWxsIHN0YXRpYyBpbnN0YWxsLXNvIGluc3RhbGwtcmIg
Y2xlYW4gZGlzdGNsZWFuIHJlYWxjbGVhbl0KICAgICB0YXJnZXRzLmVhY2ggZG8gfHRndHwKICAg
ICAgIG1mLnB1dHMgIiN7dGd0fTogJChleHRlbnNpb25zOi8uPS8je3RndH0pIgogICAgIGVuZAog
ICAgIG1mLnB1dHMKICAgICBtZi5wdXRzICJhbGw6ICN7cnViaWVzLmpvaW4oJyAnKX0iCi0gICAg
bWYucHV0cyAiI3tydWJpZXMuam9pbignICcpfTogJChleHRlbnNpb25zOi8uPS9hbGwpIgorICAg
IG1mLnB1dHMgInN0YXRpYzogZXh0L2V4dGluaXQuI3skT0JKRVhUfSAje3J1Ymllcy5qb2luKCcg
Jyl9IgorICAgIG1mLnB1dHMgImNsZWFuOlxuXHQtJChRKSQoUk0pIGV4dC9leHRpbml0LiN7JE9C
SkVYVH0iCisgICAgbWYucHV0cyAiZGlzdGNsZWFuOlxuXHQtJChRKSQoUk0pIGV4dC9leHRpbml0
LmMiCisgICAgbWYucHV0cworICAgIG1mLnB1dHMgIiN7cnViaWVzLmpvaW4oJyAnKX06ICQoZXh0
ZW5zaW9uczovLj0vI3skZm9yY2Vfc3RhdGljID8gJ3N0YXRpYycgOiAnYWxsJ30pIgogICAgIHJ1
Ymllcy5lYWNoIGRvIHx0Z3R8Ci0gICAgICBtZi5wdXRzICIje3RndH06XG5cdCQoUSkkKE1BS0Up
ICQoTUZMQUdTKSAkQCIKKyAgICAgIG1mLnB1dHMgIiN7dGd0fTpcblx0JChRKSQoTUFLRSkgJChN
RkxBR1MpIEVYVE9CSlM9JyQoRVhUT0JKUyknIEVYVExJQlM9JyQoRVhUTElCUyknICRAIgogICAg
IGVuZAorICAgIG1mLnB1dHMgImV4dC9leHRpbml0LiN7JE9CSkVYVH06XG5cdCQoUSkkKE1BS0Up
ICQoTUZMQUdTKSBWPSQoVikgJEAiCiAgICAgbWYucHV0cwogICAgIGV4ZWMgPSBjb25maWdfc3Ry
aW5nKCJleGVjIikge3xzdHJ8IHN0ciArICIgIn0KICAgICB0YXJnZXRzLmVhY2ggZG8gfHRndHwK
ICAgICAgIGV4dHMuZWFjaCBkbyB8ZHwKLSAgICAgICAgbWYucHV0cyAiI3tkWzAuLi0yXX0je3Rn
dH06XG5cdCQoUSljZCAkKEBEKSAmJiAje2V4ZWN9JChNQUtFKSAkKE1GTEFHUykgJChARikiCisg
ICAgICAgIG1mLnB1dHMgIiN7ZFswLi4tMl19I3t0Z3R9OlxuXHQkKFEpY2QgJChARCkgJiYgI3tl
eGVjfSQoTUFLRSkgJChNRkxBR1MpIFY9JChWKSAkKEBGKSIKICAgICAgIGVuZAogICAgIGVuZAog
ICBlbmQKZGlmZiAtLWdpdCBhL2xpYi9ta21mLnJiIGIvbGliL21rbWYucmIKaW5kZXggNzg4NDFl
Mi4uMDVjM2JkOCAxMDA2NDQKLS0tIGEvbGliL21rbWYucmIKKysrIGIvbGliL21rbWYucmIKQEAg
LTE4MzUsNyArMTgzNSw3IEBAIERJU1RDTEVBTkZJTEVTID0gI3skZGlzdGNsZWFuZmlsZXMuam9p
bignICcpfQogCiBhbGwgaW5zdGFsbCBzdGF0aWMgaW5zdGFsbC1zbyBpbnN0YWxsLXJiOiBNYWtl
ZmlsZQogLlBIT05ZOiBhbGwgaW5zdGFsbCBzdGF0aWMgaW5zdGFsbC1zbyBpbnN0YWxsLXJiCi0u
UEhPTlk6IGNsZWFuIGNsZWFuLXNvIGNsZWFuLXJiCisuUEhPTlk6IGNsZWFuIGNsZWFuLXNvIGNs
ZWFuLXN0YXRpYyBjbGVhbi1yYgogCiBSVUxFUwogICBlbmQKQEAgLTIwNjQsNyArMjA2NCw3IEBA
IENMRUFOT0JKUyAgICAgPSAqLiN7JE9CSkVYVH0gI3tjb25maWdfc3RyaW5nKCdjbGVhbm9ianMn
KSB7fHR8IHQuZ3N1YigvXCRcKi8sICIkCiBhbGw6ICAgICN7JGV4dG91dCA/ICJpbnN0YWxsIiA6
IHRhcmdldCA/ICIkKERMTElCKSIgOiAiTWFrZWZpbGUifQogc3RhdGljOiAkKFNUQVRJQ19MSUIp
I3skZXh0b3V0ID8gIiBpbnN0YWxsLXJiIiA6ICIifQogLlBIT05ZOiBhbGwgaW5zdGFsbCBzdGF0
aWMgaW5zdGFsbC1zbyBpbnN0YWxsLXJiCi0uUEhPTlk6IGNsZWFuIGNsZWFuLXNvIGNsZWFuLXJi
CisuUEhPTlk6IGNsZWFuIGNsZWFuLXNvIGNsZWFuLXN0YXRpYyBjbGVhbi1yYgogIgogICAgIG1m
aWxlLnByaW50IENMRUFOSU5HUwogICAgIGZzZXAgPSBjb25maWdfc3RyaW5nKCdCVUlMRF9GSUxF
X1NFUEFSQVRPUicpIHt8c3wgcyB1bmxlc3MgcyA9PSAiLyJ9CkBAIC0yMTAwLDYgKzIxMDAsOCBA
QCBzdGF0aWM6ICQoU1RBVElDX0xJQikjeyRleHRvdXQgPyAiIGluc3RhbGwtcmIiIDogIiJ9CiAg
ICAgICAgICAgbWZpbGUucHJpbnQgIlx0QGVjaG8gI3tkaXJ9LyN7RmlsZS5iYXNlbmFtZShmKX0+
PiQoSU5TVEFMTEVEX0xJU1QpXG4iCiAgICAgICAgIGVuZAogICAgICAgZW5kCisgICAgICBtZmls
ZS5wcmludCAiY2xlYW4tc3RhdGljOjpcbiIKKyAgICAgIG1maWxlLnByaW50ICJcdC0kKFEpJChS
TSkgJChTVEFUSUNfTElCKVxuIgogICAgIGVsc2UKICAgICAgIG1maWxlLnB1dHMgIk1ha2VmaWxl
IgogICAgIGVuZApAQCAtMjM3MiwxMyArMjM3NCwxNCBAQCBNRVNTQUdFCiBjbGVhbi1yYi1kZWZh
dWx0OjoKIGNsZWFuLXJiOjoKIGNsZWFuLXNvOjoKLWNsZWFuOiBjbGVhbi1zbyBjbGVhbi1yYi1k
ZWZhdWx0IGNsZWFuLXJiCitjbGVhbjogY2xlYW4tc28gY2xlYW4tc3RhdGljIGNsZWFuLXJiLWRl
ZmF1bHQgY2xlYW4tcmIKIFx0XHQtJChRKSQoUk0pICQoQ0xFQU5MSUJTI3tzZXB9KSAkKENMRUFO
T0JKUyN7c2VwfSkgJChDTEVBTkZJTEVTI3tzZXB9KQogCiBkaXN0Y2xlYW4tcmItZGVmYXVsdDo6
CiBkaXN0Y2xlYW4tcmI6OgogZGlzdGNsZWFuLXNvOjoKLWRpc3RjbGVhbjogY2xlYW4gZGlzdGNs
ZWFuLXNvIGRpc3RjbGVhbi1yYi1kZWZhdWx0IGRpc3RjbGVhbi1yYgorZGlzdGNsZWFuLXN0YXRp
Yzo6CitkaXN0Y2xlYW46IGNsZWFuIGRpc3RjbGVhbi1zbyBkaXN0Y2xlYW4tc3RhdGljIGRpc3Rj
bGVhbi1yYi1kZWZhdWx0IGRpc3RjbGVhbi1yYgogXHRcdC0kKFEpJChSTSkgTWFrZWZpbGUgJChS
VUJZX0VYVENPTkZfSCkgY29uZnRlc3QuKiBta21mLmxvZwogXHRcdC0kKFEpJChSTSkgY29yZSBy
dWJ5JChFWEVFWFQpICp+ICQoRElTVENMRUFORklMRVMje3NlcH0pCiBcdFx0LSQoUSkkKFJNRElS
UykgJChESVNUQ0xFQU5ESVJTI3tzZXB9KSN7JGlnbm9yZV9lcnJvcn0KZGlmZiAtLWdpdCBhL3J1
YnkuYyBiL3J1YnkuYwppbmRleCA5Mzc3OWE3Li40ZmUwNDY0IDEwMDY0NAotLS0gYS9ydWJ5LmMK
KysrIGIvcnVieS5jCkBAIC0xMjI1LDYgKzEyMjUsOSBAQCByYl9mX2Nob21wKGFyZ2MsIGFyZ3Yp
CiAgICAgcmV0dXJuIHN0cjsKIH0KIAorLyogYmxhbmsgZnVuY3Rpb24gaW4gZG15ZW5jb2Rpbmcu
YyBvciBnZW5lcmF0ZWQgYnkgZW5jL21ha2VfZW5jbWFrZS5yYiAqLworZXh0ZXJuIHZvaWQgSW5p
dF9lbmModm9pZCk7CisKIHN0YXRpYyBWQUxVRQogcHJvY2Vzc19vcHRpb25zKGludCBhcmdjLCBj
aGFyICoqYXJndiwgc3RydWN0IGNtZGxpbmVfb3B0aW9ucyAqb3B0KQogewpAQCAtMTMxMSw2ICsx
MzE0LDcgQEAgcHJvY2Vzc19vcHRpb25zKGludCBhcmdjLCBjaGFyICoqYXJndiwgc3RydWN0IGNt
ZGxpbmVfb3B0aW9ucyAqb3B0KQogI2VuZGlmCiAKICAgICBydWJ5X2luaXRfbG9hZHBhdGhfc2Fm
ZShvcHQtPnNhZmVfbGV2ZWwpOworICAgIEluaXRfZW5jKCk7CiAgICAgcmJfZW5jX2ZpbmRfaW5k
ZXgoImVuY2RiIik7CiAgICAgbGVuYyA9IHJiX2xvY2FsZV9lbmNvZGluZygpOwogICAgIHJiX2Vu
Y19hc3NvY2lhdGUocmJfcHJvZ25hbWUsIGxlbmMpOwpkaWZmIC0tZ2l0IGEvdHJhbnNjb2RlX2Rh
dGEuaCBiL3RyYW5zY29kZV9kYXRhLmgKaW5kZXggOGU4NWNlNi4uZGNhZWU2MSAxMDA2NDQKLS0t
IGEvdHJhbnNjb2RlX2RhdGEuaAorKysgYi90cmFuc2NvZGVfZGF0YS5oCkBAIC0xMTAsNiArMTEw
LDE2IEBAIHN0cnVjdCByYl90cmFuc2NvZGVyIHsKIHZvaWQgcmJfZGVjbGFyZV90cmFuc2NvZGVy
KGNvbnN0IGNoYXIgKmVuYzEsIGNvbnN0IGNoYXIgKmVuYzIsIGNvbnN0IGNoYXIgKmxpYik7CiB2
b2lkIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIoY29uc3QgcmJfdHJhbnNjb2RlciAqKTsKIAorLyoK
KyAqIFRvIGdldCByaWQgb2YgY29sbGlzaW9uIG9mIGluaXRpYWxpemVyIHN5bWJvbHMgaW4gc3Rh
dGljYWxseS1saW5rZWQgZW5jb2RpbmdzCisgKiBhbmQgdHJhbnNjb2RlcnMKKyAqLworI2lmIGRl
ZmluZWQoRVhUU1RBVElDKSAmJiBFWFRTVEFUSUMKKyMgZGVmaW5lIFRSQU5TX0lOSVQobmFtZSkg
dm9pZCBJbml0X3RyYW5zXyAjIyBuYW1lKHZvaWQpCisjZWxzZQorIyBkZWZpbmUgVFJBTlNfSU5J
VChuYW1lKSB2b2lkIEluaXRfICMjIG5hbWUodm9pZCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZCBf
X0dOVUNfXyAmJiBfX0dOVUNfXyA+PSA0CiAjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAogI2Vu
ZGlmCg==