delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2004/01/11/13:48:14

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Envelope-To: cygwin AT cygwin DOT com
Message-ID: <55216.212.0.200.4.1073846861.mtc@mail.moldtelecom.md>
Date: Sun, 11 Jan 2004 20:47:41 +0200 (EET)
Subject: Unix pipes implemented successfully
From: linamat AT moldtelecom DOT md
To: cygwin AT cygwin DOT com
User-Agent: Moldtelecom Mail System
MIME-Version: 1.0
Note-from-DJ: This may be spam

------=_20040111204741_71200
Content-Type: text/plain; charset="windows-1251"
Content-Transfer-Encoding: 8bit

I have working FIFO implementation for Cygwin-1.5.5-1 based on materials
shared by Robert Collins (many thanks to him). It was tested on WinXP,
Win2k, Win3k. For tests I used my code as well as some third-party fifo
tests.
I need this kind of IPC for my current software development.
Does exist any posibility to incorporate this patch in next Cygwin release?

With respect,
Sergey Samsi
Internet service
S.A. Moldtelecom
(+373)22542597
GSM: 69115719

------=_20040111204741_71200
Content-Type: application/octet-stream; name="cygwin-1.5.5-1_fifo.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="cygwin-1.5.5-1_fifo.patch"

KioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9DaGFuZ2VM
b2cJU2F0IFNlcCAyMCAyMjo1MTo1MyAyMDAzCi0tLSBjeWd3aW4tMS41LjUt
MS93aW5zdXAvY3lnd2luL0NoYW5nZUxvZwlTdW4gSmFuIDExIDE5OjI5OjIw
IDIwMDQKKioqKioqKioqKioqKioqCioqKiAxLDMgKioqKgotLS0gMSw0MCAt
LS0tCisgMjAwNC0wMS0xMSAgU2VyZ2V5IFNhbXNpICA8bGluYW1hdEBtb2xk
dGVsZWNvbS5tZD4KKyAJICAgIFRoYW5rcyB0byBSb2JlcnQgQ29sbGlucyA8
cm9iZXJ0LmNvbGxpbnNAaXRkb21haW4uY29tLmF1PgorIAorIAkqIGRldmlj
ZXMuaCAoRkhfRklGTyk6IE5ldyBjb25zdGFudCBkZWZpbml0aW9uLgorIAkq
IGR0YWJsZS5jYyAoYnVpbGRfZmhhbmRsZXIpOiBDb25zdHJ1Y3QgRklGTyBm
aGFuZGxlci4KKyAJKGR0YWJsZTo6cmVsZWFzZSk6IERldGVjdCBGSUZPIGZp
bGUgdHlwZS4KKyAJKiBkdGFibGUuaCAoaWZpZm8pOiBOZXcgZnVuY3Rpb24g
ZGVjbGFyYXRpb24uCisgCSogZmhhbmRsZXIuY2MgKGZoYW5kbGVyX2Jhc2U6
OmZzdGF0KTogQWRkIFNfSUZJRk8uCisgCSogZmhhbmRsZXIuaCAoRkhfRklG
Tyk6IE5ldyBkZXZpY2UgZGVmaW5pdGlvbi4KKyAJKEZJRk9fTUFQXyopOiBO
ZXcgY29uc3RhbnQgZGVmaW5pdGlvbnMuCisgCShnZXRfZmlmb19wKTogTmV3
IGZ1bmN0aW9uLgorIAkoc2V0X2ZpZm9fcCk6IE5ldyBmdW5jdGlvbi4KKyAJ
KGlzX2ZpZm8pOiBOZXcgZnVuY3Rpb24uCisgCShmaWZvX2d1YXJkKTogTmV3
IGNsYXNzLgorIAkoZmhhbmRsZXJfZmlmbyk6IE5ldyBjbGFzcy4KKyAJKF9f
Zmlmbyk6IE5ldyBmdW5jdGlvbi4KKyAJKiBmaGFuZGxlcl9kaXNrX2ZpbGUu
Y2MgKG9wZW4pOiBTZXQgRklGTyBmbGFnIGlmIG5lZWQuCisgCShmaGFuZGxl
cl9kaXNrX2ZpbGU6OmZzdGF0X2hlbHBlcik6IFNldCBTX0lGSUZPLgorIAkq
IGZoYW5kbGVyX2ZpZm8uY2MgOiBOZXcgZmlsZS4gVW5peCBuYW1lZCBwaXBl
cyBpbXBsZW1lbnRhdGlvbi4KKyAJKiBmaGFuZGxlcl92aXJ0dWFsLmNjIChv
cGVuKTogUmVtb3ZlIEZJRk8gZmxhZyBpZiBuZWVkLgorIAkqIHBhdGguY2Mg
OiBEZXRlY3QgRklGTyBieSBmaWxlIG1hcmtlci4KKyAJKiBwYXRoLmggOiBT
b21lIGNvbnN0YW50IGRlZmluaXRpb25zLi4KKyAJKiBzZWxlY3QuY2MgOiBV
bml4IG5hbWVkIHBpcGVzIHN1cHBvcnQuCisgCShmaGFuZGxlcl9maWZvOjpz
ZWxlY3RfcmVhZCk6IE5ldyBmdW5jdGlvbi4KKyAJKGZoYW5kbGVyX2ZpZm86
OnJlYWR5X2Zvcl9yZWFkKTogTmV3IGZ1bmN0aW9uLgorIAkoZmhhbmRsZXJf
Zmlmbzo6c2VsZWN0X3dyaXRlKTogTmV3IGZ1bmN0aW9uLgorIAkoZmhhbmRs
ZXJfZmlmbzo6c2VsZWN0X2V4Y2VwdCk6IE5ldyBmdW5jdGlvbi4KKyAJKHBl
ZWtfZmlmbyk6IE5ldyBmdW5jdGlvbi4KKyAJKHN0YXJ0X3RocmVhZF9maWZv
KTogTmV3IGZ1bmN0aW9uLgorIAkodGhyZWFkX2ZpZm8pOiBOZXcgZnVuY3Rp
b24uCisgCShmaWZvX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uCisgCShmaWZv
aW5mKTogTmV3IHN0cnVjdC4KKyAJKiBzeXNjYWxscy5jYyAobWtmaWZvKTog
UmVwbGFjZSBzdHViIHdpdGggRklGTyBjcmVhdGluZyBwcm9jZWR1cmUuCisg
CShfbWtmaWZvKTogQWRkIGFsaWFzIG9mIG1rZmlmby4KKyAJKGNob3duX3dv
cmtlcik6IFN1cHBvcnQgRklGT3MuCisgCShzdGF0X3dvcmtlcik6IFN1cHBv
cnQgRklGT3MuCisgCiAgMjAwMy0wOS0yMCAgQ2hyaXN0b3BoZXIgRmF5bG9y
ICA8Y2dmQHJlZGhhdC5jb20+CiAgCiAgCSogc3Bhd24uY2MgKHB0aHJlYWRf
Y2xlYW51cCk6IE5ldyBzdHJ1Y3QuCioqKiBjeWd3aW4tMS41LjUtMV9vcmln
L3dpbnN1cC9jeWd3aW4vTWFrZWZpbGUuaW4JU2F0IFNlcCAyMCAyMjo1MTo1
MyAyMDAzCi0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL01ha2Vm
aWxlLmluCVN1biBKYW4gMTEgMTk6Mjk6MjAgMjAwNAoqKioqKioqKioqKioq
KioKKioqIDU5LDY0ICoqKioKLS0tIDU5LDY1IC0tLS0KICBmaGFuZGxlcl9j
bGlwYm9hcmRfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRlcgogIGZoYW5k
bGVyX2NvbnNvbGVfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRlcgogIGZo
YW5kbGVyX2Rpc2tfZmlsZV9DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy
CisgZmhhbmRsZXJfZmlmb19DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy
CiAgZmhhbmRsZXJfZHNwX0NGTEFHUzo9LWZvbWl0LWZyYW1lLXBvaW50ZXIK
ICBmaGFuZGxlcl9mbG9wcHlfQ0ZMQUdTOj0tZm9taXQtZnJhbWUtcG9pbnRl
cgogIGZoYW5kbGVyX21lbV9DRkxBR1M6PS1mb21pdC1mcmFtZS1wb2ludGVy
CioqKioqKioqKioqKioqKgoqKiogMTUyLDE1OCAqKioqCiAgCWRlYnVnLm8g
ZGVscXVldWUubyBkaXIubyBkbGZjbi5vIGRsbF9pbml0Lm8gZHRhYmxlLm8g
ZW52aXJvbi5vIFwKICAJZXJybm8ubyBleGNlcHRpb25zLm8gZXhlYy5vIGV4
dGVybmFsLm8gZmNudGwubyBmaGFuZGxlci5vIFwKICAJZmhhbmRsZXJfY2xp
cGJvYXJkLm8gZmhhbmRsZXJfY29uc29sZS5vIGZoYW5kbGVyX2Rpc2tfZmls
ZS5vIFwKISAJZmhhbmRsZXJfZHNwLm8gZmhhbmRsZXJfZmxvcHB5Lm8gZmhh
bmRsZXJfbWVtLm8gXAogIAlmaGFuZGxlcl9wcm9jLm8gZmhhbmRsZXJfcHJv
Y2Vzcy5vIGZoYW5kbGVyX3JhbmRvbS5vIFwKICAJZmhhbmRsZXJfcmF3Lm8g
ZmhhbmRsZXJfcmVnaXN0cnkubyBmaGFuZGxlcl9zZXJpYWwubyBcCiAgCWZo
YW5kbGVyX3NvY2tldC5vIGZoYW5kbGVyX3RhcGUubyBmaGFuZGxlcl90ZXJt
aW9zLm8gXAotLS0gMTUzLDE1OSAtLS0tCiAgCWRlYnVnLm8gZGVscXVldWUu
byBkaXIubyBkbGZjbi5vIGRsbF9pbml0Lm8gZHRhYmxlLm8gZW52aXJvbi5v
IFwKICAJZXJybm8ubyBleGNlcHRpb25zLm8gZXhlYy5vIGV4dGVybmFsLm8g
ZmNudGwubyBmaGFuZGxlci5vIFwKICAJZmhhbmRsZXJfY2xpcGJvYXJkLm8g
ZmhhbmRsZXJfY29uc29sZS5vIGZoYW5kbGVyX2Rpc2tfZmlsZS5vIFwKISAJ
ZmhhbmRsZXJfZmlmby5vIGZoYW5kbGVyX2RzcC5vIGZoYW5kbGVyX2Zsb3Bw
eS5vIGZoYW5kbGVyX21lbS5vIFwKICAJZmhhbmRsZXJfcHJvYy5vIGZoYW5k
bGVyX3Byb2Nlc3MubyBmaGFuZGxlcl9yYW5kb20ubyBcCiAgCWZoYW5kbGVy
X3Jhdy5vIGZoYW5kbGVyX3JlZ2lzdHJ5Lm8gZmhhbmRsZXJfc2VyaWFsLm8g
XAogIAlmaGFuZGxlcl9zb2NrZXQubyBmaGFuZGxlcl90YXBlLm8gZmhhbmRs
ZXJfdGVybWlvcy5vIFwKKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3Vw
L2N5Z3dpbi9kZXZpY2VzLmgJU3VuIEphbiAxMSAxODoxNzoyNiAyMDA0Ci0t
LSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL2RldmljZXMuaAlNb24g
RGVjIDIyIDE1OjE1OjA0IDIwMDMKKioqKioqKioqKioqKioqCioqKiA1OCw2
MyAqKioqCi0tLSA1OCw2NCAtLS0tCiAgICBGSF9QSVBFVyAgID0gMHgwMDAw
MDAwYSwJLyogd3JpdGUgZW5kIG9mIGEgcGlwZSAqLwogICAgRkhfU09DS0VU
ICA9IDB4MDAwMDAwMGIsCS8qIGlzIGEgc29ja2V0ICovCiAgICBGSF9XSU5E
T1dTID0gMHgwMDAwMDAwYywJLyogaXMgYSB3aW5kb3cgKi8KKyAgIEZIX0ZJ
Rk8gICAgPSAweDAwMDAwMDBkLAkvKiBpcyBhIG5hbWVkIHBpcGUgKi8KICAg
IEZIX1NMT1cgICAgPSAweDAwMDAwMDEwLAkvKiAic2xvdyIgZGV2aWNlIGlm
IGJlbG93IHRoaXMgKi8KICAKICAgIC8qIEZhc3QgZGV2aWNlcyAqLwoqKiog
Y3lnd2luLTEuNS41LTFfb3JpZy93aW5zdXAvY3lnd2luL2R0YWJsZS5jYwlT
dW4gSmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dp
bnN1cC9jeWd3aW4vZHRhYmxlLmNjCVR1ZSBEZWMgMjMgMTA6NTU6MzQgMjAw
MwoqKioqKioqKioqKioqKioKKioqIDE4OCwxOTMgKioqKgotLS0gMTg4LDE5
NiAtLS0tCiAgCWNhc2UgRkhfU09DS0VUOgogIAkgIGRlY19uZWVkX2ZpeHVw
X2JlZm9yZSAoKTsKICAJICBicmVhazsKKyAJY2FzZSBGSF9GSUZPOgorIAkg
IC8vIGZpeG1lIGZpZm8gY2xlYW51cAorIAkgIGJyZWFrOwogIAl9CiAgICAg
ICAgZGVsZXRlIGZkc1tmZF07CiAgICAgICAgZmRzW2ZkXSA9IE5VTEw7Cioq
KioqKioqKioqKioqKgoqKiogMzAzLDMwOCAqKioqCi0tLSAzMDYsMzE2IC0t
LS0KICAgICAgICBmaHMtPnNldF9hZGRyX2ZhbWlseSAoQUZfTE9DQUwpOwog
ICAgICAgIGZocy0+c2V0X3N1bl9wYXRoIChwb3NpeF9wYXRoKTsKICAgICAg
fQorICAgaWYgKHBjLmlzZmlmbygpKQorICAgICB7CisgICAgICAgZmhhbmRs
ZXJfZmlmbyAqIGZocyA9IChmaGFuZGxlcl9maWZvICopIGZoOworICAgICAg
IGZocy0+c2V0X3VuaXhfcGF0aCAocG9zaXhfcGF0aCk7CisgICAgIH0KICAg
IHJldHVybiBmaDsKICB9CiAgCioqKioqKioqKioqKioqKgoqKiogMzUxLDM1
NiAqKioqCi0tLSAzNTksMzY3IC0tLS0KICAgICAgICBjYXNlIEZIX1BJUEVX
OgogIAlmaCA9IGNuZXcgKGZoYW5kbGVyX3BpcGUpIChkZXYpOwogIAlicmVh
azsKKyAgICAgICBjYXNlIEZIX0ZJRk86CisgCWZoID0gY25ldyAoZmhhbmRs
ZXJfZmlmbykgKCk7CisgCWJyZWFrOwogICAgICAgIGNhc2UgRkhfU09DS0VU
OgogIAlpZiAoKGZoID0gY25ldyAoZmhhbmRsZXJfc29ja2V0KSAodW5pdCkp
KQogIAkgIGluY19uZWVkX2ZpeHVwX2JlZm9yZSAoKTsKKioqIGN5Z3dpbi0x
LjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9kdGFibGUuaAlTdW4gSmFuIDEx
IDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3
aW4vZHRhYmxlLmgJTW9uIERlYyAyMiAxOTo1Mjo1OSAyMDAzCioqKioqKioq
KioqKioqKgoqKiogNDEsNDYgKioqKgotLS0gNDEsNDcgLS0tLQogICAgdm9p
ZCBmaXh1cF9iZWZvcmVfZXhlYyAoRFdPUkQgd2luX3Byb2NfaWQpOwogICAg
dm9pZCBmaXh1cF9iZWZvcmVfZm9yayAoRFdPUkQgd2luX3Byb2NfaWQpOwog
ICAgdm9pZCBmaXh1cF9hZnRlcl9mb3JrIChIQU5ETEUpOworICAgaW50IGlm
aWZvKEhBTkRMRSk7CiAgICBmaGFuZGxlcl9iYXNlICpidWlsZF9maGFuZGxl
ciAoaW50IGZkLCBEV09SRCBkZXYsIGNvbnN0IGNoYXIgKnVuaXhfbmFtZSwK
ICAJCQkJIGNvbnN0IGNoYXIgKndpbjMyX25hbWUgPSBOVUxMLCBpbnQgdW5p
dCA9IC0xKTsKICAgIGZoYW5kbGVyX2Jhc2UgKmJ1aWxkX2ZoYW5kbGVyIChp
bnQgZmQsIERXT1JEIGRldiwgY2hhciAqdW5peF9uYW1lID0gTlVMTCwKKioq
IGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5j
YwlTdW4gSmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0x
L3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuY2MJU2F0IEphbiAgMyAxMzo0NDo1
MSAyMDA0CioqKioqKioqKioqKioqKgoqKiogMTAwMCwxMDA1ICoqKioKLS0t
IDEwMDAsMTAwNiAtLS0tCiAgICBzd2l0Y2ggKGdldF9kZXZpY2UgKCkpCiAg
ICAgIHsKICAgICAgY2FzZSBGSF9QSVBFOgorICAgICBjYXNlIEZIX0ZJRk86
CiAgICAgICAgYnVmLT5zdF9tb2RlID0gU19JRklGTyB8IFNURF9SQklUUyB8
IFNURF9XQklUUyB8IFNfSVdHUlAgfCBTX0lXT1RIOwogICAgICAgIGJyZWFr
OwogICAgICBjYXNlIEZIX1BJUEVXOgoqKiogY3lnd2luLTEuNS41LTFfb3Jp
Zy93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgJU3VuIEphbiAxMSAxODoxNzoy
NiAyMDA0Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL2ZoYW5k
bGVyLmgJU2F0IEphbiAxMCAxOTowMjo1NyAyMDA0CioqKioqKioqKioqKioq
KgoqKiogNTgsNjMgKioqKgotLS0gNTgsNjQgLS0tLQogICAgRkhfUElQRVcg
ICA9IDB4MDAwMDAwMGEsCS8qIHdyaXRlIGVuZCBvZiBhIHBpcGUgKi8KICAg
IEZIX1NPQ0tFVCAgPSAweDAwMDAwMDBiLAkvKiBpcyBhIHNvY2tldCAqLwog
ICAgRkhfV0lORE9XUyA9IDB4MDAwMDAwMGMsCS8qIGlzIGEgd2luZG93ICov
CisgICBGSF9GSUZPICAgID0gMHgwMDAwMDAwZCwJLyogaXMgYSBuYW1lZCBw
aXBlICovCiAgICBGSF9TTE9XICAgID0gMHgwMDAwMDAxMCwJLyogInNsb3ci
IGRldmljZSBpZiBiZWxvdyB0aGlzICovCiAgCiAgICAvKiBGYXN0IGRldmlj
ZXMgKi8KKioqKioqKioqKioqKioqCioqKiAxMTQsMTE5ICoqKioKLS0tIDEx
NSwxMjEgLS0tLQogIGNsYXNzIHNlbGVjdF9yZWNvcmQ7CiAgY2xhc3MgcGF0
aF9jb252OwogIGNsYXNzIGZoYW5kbGVyX2Rpc2tfZmlsZTsKKyBjbGFzcyBm
aGFuZGxlcl9maWZvOwogIHR5cGVkZWYgc3RydWN0IF9fRElSIERJUjsKICBz
dHJ1Y3QgZGlyZW50OwogIHN0cnVjdCBpb3ZlYzsKKioqKioqKioqKioqKioq
CioqKiAyNTgsMjYzICoqKioKLS0tIDI2MCwyNjkgLS0tLQogICAgdm9pZCBz
ZXRfc29ja2V0X3AgKGludCB2YWwpIHsgRkhDT05EU0VURiAodmFsLCBMT0NB
TCk7IH0KICAgIHZvaWQgc2V0X3NvY2tldF9wICgpIHsgRkhTRVRGIChMT0NB
TCk7IH0KICAKKyAgIGJvb2wgZ2V0X2ZpZm9fcCAoKSB7IHJldHVybiBGSElT
U0VURiAoRklGTyk7IH0KKyAgIHZvaWQgc2V0X2ZpZm9fcCAoaW50IHZhbCkg
eyBGSENPTkRTRVRGICh2YWwsIEZJRk8pOyB9CisgICB2b2lkIHNldF9maWZv
X3AgKCkgeyBGSFNFVEYgKEZJRk8pOyB9CisgCiAgICBib29sIGdldF9leGVj
YWJsZV9wICgpIHsgcmV0dXJuIEZISVNTRVRGIChFWEVDQUJMKTsgfQogICAg
dm9pZCBzZXRfZXhlY2FibGVfcCAoZXhlY3V0YWJsZV9zdGF0ZXMgdmFsKQog
ICAgewoqKioqKioqKioqKioqKioKKioqIDM0NiwzNTEgKioqKgotLS0gMzUy
LDM1OCAtLS0tCiAgICB2aXJ0dWFsIEJPT0wgaXNfZGV2aWNlICgpIHsgcmV0
dXJuIFRSVUU7IH0KICAgIHZpcnR1YWwgY2hhciAqcHRzbmFtZSAoKSB7IHJl
dHVybiBOVUxMO30KICAgIHZpcnR1YWwgY2xhc3MgZmhhbmRsZXJfc29ja2V0
ICppc19zb2NrZXQgKCkgeyByZXR1cm4gMDsgfQorICAgdmlydHVhbCBjbGFz
cyBmaGFuZGxlcl9maWZvICppc19maWZvICgpIHsgcmV0dXJuIDA7IH0KICAg
IHZpcnR1YWwgY2xhc3MgZmhhbmRsZXJfY29uc29sZSAqaXNfY29uc29sZSAo
KSB7IHJldHVybiAwOyB9CiAgICB2aXJ0dWFsIGludCBpc193aW5kb3dzICgp
IHtyZXR1cm4gMDsgfQogIAoqKioqKioqKioqKioqKioKKioqIDQ5MCw0OTUg
KioqKgotLS0gNDk3LDU2MSAtLS0tCiAgICBpbnQgcmVhZHlfZm9yX3JlYWQg
KGludCBmZCwgRFdPUkQgaG93bG9uZyk7CiAgfTsKICAKKyBjbGFzcyBmaWZv
X2d1YXJkCisgeworICAgcHVibGljOgorICAgdW5zaWduZWQgaW50IHJlYWRl
cnMsIHdyaXRlcnM7CisgICB1bnNpZ25lZCBjaGFyIGVvdzsgICAgIAorICAg
c2l6ZV90IGZkX29mZnNldDsKKyAgIHNpemVfdCBmZF9zejsKKyAgIHRpbWVz
dHJ1Y190IG10aW07CisgICB1bnNpZ25lZCBpbnQgaXNhY3RpdmU7CisgfTsK
KyAKKyBjbGFzcyBmaGFuZGxlcl9maWZvOiBwdWJsaWMgZmhhbmRsZXJfYmFz
ZQorIHsKKyBwcml2YXRlOgorICAgdW5zaWduZWQgaW50IGlzcmVhZGVyLCBp
c3dyaXRlcjsKKyAKKyAgIEhBTkRMRSBmaWxlbWFwOworICAgSEFORExFIF9v
cGVuX2Jsb2NrOworICAgSEFORExFIF9hY3F1aXJlX3JlYWQ7CisgICBIQU5E
TEUgX2lucHV0X211dGV4OworICAgSEFORExFIF9kb25lX3dyaXRlOworICAg
SEFORExFIF9vdXRwdXRfbXV0ZXg7CisgICBIQU5ETEUgX2RhdGFfbXV0ZXg7
CisgICB2b2lkICpmZGF0YTsKKyAgIGNoYXIgKnVuaXhfcGF0aDsKKyAgIGNo
YXIgZmlsZW1hcG5hbWVbTUFYX1BBVEhdOworICAgY2xhc3MgZmlmb19ndWFy
ZCAqZ3VhcmQ7CisgICAKKyAgIGludCBzaHV0aGFuZGxlcyhpbnQpOworIAor
IHB1YmxpYzoKKyAgIGZoYW5kbGVyX2ZpZm8gKCk7CisgICB+ZmhhbmRsZXJf
ZmlmbyAoKTsKKyAKKyAgIGludCBnZXRfZmlmbyAoKSB7IHJldHVybiAoaW50
KSBnZXRfaGFuZGxlKCk7IH0KKyAgIGZoYW5kbGVyX2ZpZm8gKiBpc19maWZv
ICgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgIHZvaWQgc2V0X3VuaXhfcGF0aCAo
Y29uc3QgY2hhciAqdW5peF9wYXRoKTsKKyAgIGNoYXIgKmdldF91bml4X3Bh
dGggKCkgeyByZXR1cm4gdW5peF9wYXRoOyB9CisgCisgICBpbnQgb3BlbiAo
cGF0aF9jb252ICosIGludCBmbGFncywgbW9kZV90IG1vZGUpOworICAgdm9p
ZCBfX3N0ZGNhbGwgcmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikgX19h
dHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpKSk7CisgICBpbnQgX19zdGRjYWxs
IGZzdGF0IChzdHJ1Y3QgX19zdGF0NjQgKmJ1ZiwgcGF0aF9jb252ICopIF9f
YXR0cmlidXRlX18gKChyZWdwYXJtICgzKSkpOworICAgaW50IGlvY3RsICh1
bnNpZ25lZCBpbnQgY21kLCB2b2lkICopOworICAgX29mZjY0X3QgbHNlZWsg
KF9vZmY2NF90LCBpbnQpOworICAgaW50IHdyaXRlIChjb25zdCB2b2lkICpw
dHIsIHNpemVfdCBsZW4pOworICAgaW50IGNsb3NlICgpOworIAorICAgaW50
IGR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQpOworICAgdm9pZCBmaXh1cF9h
ZnRlcl9mb3JrIChIQU5ETEUpOworICAgdm9pZCBmaXh1cF9hZnRlcl9leGVj
IChIQU5ETEUpOworICAgSEFORExFIGdldF9ndWFyZCAoKSBjb25zdCB7IHJl
dHVybiBfZGF0YV9tdXRleDsgfQorICAgSEFORExFIGdldF9ndWFyZG9iamVj
dCAoKSBjb25zdCB7IHJldHVybiBndWFyZDsgfQorIAorICAgc2VsZWN0X3Jl
Y29yZCAqc2VsZWN0X3JlYWQgKHNlbGVjdF9yZWNvcmQgKnMpOworICAgc2Vs
ZWN0X3JlY29yZCAqc2VsZWN0X3dyaXRlIChzZWxlY3RfcmVjb3JkICpzKTsK
KyAgIHNlbGVjdF9yZWNvcmQgKnNlbGVjdF9leGNlcHQgKHNlbGVjdF9yZWNv
cmQgKnMpOworICAgaW50IHJlYWR5X2Zvcl9yZWFkIChpbnQgZmQsIERXT1JE
IGhvd2xvbmcpOworIH07CisgCiAgY2xhc3MgZmhhbmRsZXJfZGV2X3Jhdzog
cHVibGljIGZoYW5kbGVyX2Jhc2UKICB7CiAgIHByb3RlY3RlZDoKKioqKioq
KioqKioqKioqCioqKiAxMjAxLDEyMDYgKioqKgotLS0gMTI2NywxMjczIC0t
LS0KICAgIGNoYXIgX19kZXZfemVyb1tzaXplb2YgKGZoYW5kbGVyX2Rldl96
ZXJvKV07CiAgICBjaGFyIF9fZGlza19maWxlW3NpemVvZiAoZmhhbmRsZXJf
ZGlza19maWxlKV07CiAgICBjaGFyIF9fcGlwZVtzaXplb2YgKGZoYW5kbGVy
X3BpcGUpXTsKKyAgIGNoYXIgX19maWZvW3NpemVvZiAoZmhhbmRsZXJfZmlm
byldOwogICAgY2hhciBfX3Byb2Nbc2l6ZW9mIChmaGFuZGxlcl9wcm9jKV07
CiAgICBjaGFyIF9fcHJvY2Vzc1tzaXplb2YgKGZoYW5kbGVyX3Byb2Nlc3Mp
XTsKICAgIGNoYXIgX19wdHlfbWFzdGVyW3NpemVvZiAoZmhhbmRsZXJfcHR5
X21hc3RlcildOwoqKiogY3lnd2luLTEuNS41LTFfb3JpZy93aW5zdXAvY3ln
d2luL2ZoYW5kbGVyX2Rpc2tfZmlsZS5jYwlTdW4gSmFuIDExIDE4OjE3OjI2
IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3aW4vZmhhbmRs
ZXJfZGlza19maWxlLmNjCU1vbiBEZWMgMjIgMTY6MDc6NTIgMjAwMwoqKioq
KioqKioqKioqKioKKioqIDI5NiwzMDEgKioqKgotLS0gMjk2LDMwMyAtLS0t
CiAgICAgIH0KICAgIGVsc2UgaWYgKHBjLT5pc3NvY2tldCAoKSkKICAgICAg
YnVmLT5zdF9tb2RlID0gU19JRlNPQ0s7CisgICBlbHNlIGlmIChwYy0+aXNm
aWZvICgpKQorICAgICBidWYtPnN0X21vZGUgPSBTX0lGSUZPOwogIAogICAg
aWYgKGdldF9maWxlX2F0dHJpYnV0ZSAocGMtPmhhc19hY2xzICgpLCBnZXRf
d2luMzJfbmFtZSAoKSwgJmJ1Zi0+c3RfbW9kZSwKICAJCQkgICZidWYtPnN0
X3VpZCwgJmJ1Zi0+c3RfZ2lkKSA9PSAwKQoqKioqKioqKioqKioqKioKKioq
IDQxNSw0MjAgKioqKgotLS0gNDE3LDQyMyAtLS0tCiAgICBzZXRfc3ltbGlu
a19wIChyZWFsX3BhdGgtPmlzc3ltbGluayAoKSk7CiAgICBzZXRfZXhlY2Fi
bGVfcCAocmVhbF9wYXRoLT5leGVjX3N0YXRlICgpKTsKICAgIHNldF9zb2Nr
ZXRfcCAocmVhbF9wYXRoLT5pc3NvY2tldCAoKSk7CisgICBzZXRfZmlmb19w
IChyZWFsX3BhdGgtPmlzZmlmbyAoKSk7CiAgCiAgb3V0OgogICAgc3lzY2Fs
bF9wcmludGYgKCIlZCA9IGZoYW5kbGVyX2Rpc2tfZmlsZTo6b3BlbiAoJXMs
ICVwKSIsIHJlcywKKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3VwL2N5
Z3dpbi9maGFuZGxlcl9maWZvLmNjCVRodSBKYW4gIDEgMDI6MDA6MDAgMTk3
MAotLS0gY3lnd2luLTEuNS41LTEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9m
aWZvLmNjCVN1biBKYW4gMTEgMTc6NTA6MjEgMjAwNAoqKioqKioqKioqKioq
KioKKioqIDAgKioqKgotLS0gMSwxMDM2IC0tLS0KKyAvKiBmaGFuZGxlcl9m
aWZvLmNjOiBjb2RlIHRvIGVtdWxhdGUgVW5peCBGSUZPcworIAorICAgIENv
cHlyaWdodCAyMDA0IFJlZCBIYXQsIEluYy4KKyAgICAKKyAgICBPcmlnaW5h
bGx5IHdyaXR0ZW4gKGJ1dCBub3QgZnVsbCBmdW5jdGlvbmFsKQorICAgICBi
eSBSb2JlcnQgQ29sbGlucyAocm9iZXJ0LmNvbGxpbnNAaXRkb21haW4uY29t
LmF1KQorICAgIFJld3JpdHRlbiBieSBTZXJnZXkgU2Ftc2kgKGxpbmFtYXRA
bW9sZHRlbGVjb20ubWQpCisgCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ3ln
d2luLgorIAorIFRoaXMgc29mdHdhcmUgaXMgYSBjb3B5cmlnaHRlZCB3b3Jr
IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyBDeWd3aW4gbGlj
ZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5T
RSIgZm9yCisgZGV0YWlscy4gKi8KKyAKKyAjaW5jbHVkZSAid2luc3VwLmgi
CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorICNpbmNsdWRlIDxzeXMvc29j
a2V0Lmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRs
aWIuaD4KKyAjaW5jbHVkZSA8c3lzL2N5Z3dpbi5oPgorICNpbmNsdWRlIDxz
aWduYWwuaD4KKyAjaW5jbHVkZSAiY3lnZXJybm8uaCIKKyAjaW5jbHVkZSAi
cGVycHJvY2Vzcy5oIgorICNpbmNsdWRlICJzZWN1cml0eS5oIgorICNpbmNs
dWRlICJjeWd3aW4vdmVyc2lvbi5oIgorICNpbmNsdWRlICJmaGFuZGxlci5o
IgorICNpbmNsdWRlICJwYXRoLmgiCisgI2luY2x1ZGUgImR0YWJsZS5oIgor
ICNpbmNsdWRlICJjeWdoZWFwLmgiCisgI2luY2x1ZGUgInNoYXJlZF9pbmZv
LmgiCisgI2luY2x1ZGUgInBpbmZvLmgiCisgI2luY2x1ZGUgPGFzc2VydC5o
PgorICNpbmNsdWRlIDxjdHlwZS5oPgorIAorICNkZWZpbmUgRklGT19NQVBf
U1ogMHgwMDAwMDIwMAorICNkZWZpbmUgRklGT19PUEVOX0VWRU5UICJvZSIK
KyAjZGVmaW5lIEZJRk9fV1JJVEVfRVZFTlQgIndlIgorICNkZWZpbmUgRklG
T19XUklURV9NVVRFWCAid20iCisgI2RlZmluZSBGSUZPX1JFQURfRVZFTlQg
InJlIgorICNkZWZpbmUgRklGT19SRUFEX01VVEVYICJybSIKKyAjZGVmaW5l
IEZJRk9fREFUQV9NVVRFWCAiZG0iCisgCisgc3RhdGljIHZvaWQKKyBzZWNy
ZXRfbmFtZSAoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmaWZvZm4sIGNvbnN0
IGNoYXIgKnNlY3JldF9wdHIsIF9faW5vNjRfdCBuYW1laGFzaCkKKyB7Cisg
ICBfX3NtYWxsX3NwcmludGYgKGJ1ZiwgIiVzY3lnd2luLmZpZm8lcyVzLiVo
dSIsCisgCQkgICB3aW5jYXAuaGFzX3Rlcm1pbmFsX3NlcnZpY2VzICgpID8g
Ikdsb2JhbFxcIiA6ICIiLAorIAkJICAgZmlmb2ZuLCAoc2VjcmV0X3B0ciA9
PSBOVUxMKSA/ICIiOiBzZWNyZXRfcHRyLCBuYW1laGFzaCk7CisgfQorIAor
IFdJTkFQSQorIERXT1JEIGdldHBmc3lzX3N6ICgpCisgeworICAgU1lTVEVN
X0lORk8gc2k7CisgICBHZXRTeXN0ZW1JbmZvICgmc2kpOworICAgaWYgKHNp
LmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5ID49IHNpemVvZiAoY2xhc3MgZmlm
b19ndWFyZCkpCisgICAgIHJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxh
cml0eTsKKyAgIGVsc2UKKyAgICAgcmV0dXJuIHNpLmR3QWxsb2NhdGlvbkdy
YW51bGFyaXR5ICogCisgCSAoKHNpemVvZiAoY2xhc3MgZmlmb19ndWFyZCkg
KyAxKSAvIHNpLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5KTsKKyB9CisgCisg
ZmhhbmRsZXJfZmlmbzo6ZmhhbmRsZXJfZmlmbyAoKQorICAgOiBmaGFuZGxl
cl9iYXNlIChGSF9GSUZPKQorIHsKKyAgIHVuaXhfcGF0aF9uYW1lID0gdW5p
eF9wYXRoOworICAgaXNyZWFkZXIgPSBpc3dyaXRlciA9IDA7CisgICBzZXRf
bmVlZF9mb3JrX2ZpeHVwICgpOworIH0KKyAKKyBmaGFuZGxlcl9maWZvOjp+
ZmhhbmRsZXJfZmlmbyAoKQorIHsKKyAgIHN5c2NhbGxfcHJpbnRmICgiZGlz
cG9zZSBmaWZvIG9iamVjdCIpOworICAgaWYgKHVuaXhfcGF0aCkKKyAgICAg
Y2ZyZWUgKHVuaXhfcGF0aCk7CisgICBzaHV0aGFuZGxlcyAoMSk7CisgfQor
IAorIGludAorIGZoYW5kbGVyX2ZpZm86Om9wZW4gKHBhdGhfY29udiAqcnAs
IGludCBmbGFncywgbW9kZV90IG1vZGUpCisgeworICBpbnQgcmVzID0gMCwg
Zmlyc3RtYXAgPSAwOworICBjaGFyIGJ1ZltNQVhfUEFUSF07CisgIERXT1JE
IHBmc3lzX29mZnNldDsKKyAgU0VDVVJJVFlfQVRUUklCVVRFUyAqc2EgPSAo
bW9kZSAmIE9fTk9JTkhFUklUKSA/ICAmc2VjX25vbmVfbmloIDogJnNlY19u
b25lOworICAKKyAgIHN5c2NhbGxfcHJpbnRmICgiYmVnaW4iKTsKKyAKKyAg
IF9pbnB1dF9tdXRleCA9IF9vdXRwdXRfbXV0ZXggPSBOVUxMOworICAgc2V0
X2lvX2hhbmRsZSAoTlVMTCk7CisgICAKKyAgIGlmIChnZXRfZGV2aWNlICgp
ICE9IEZIX0ZJRk8pCisgICB7CisgICAgIHNldF9lcnJubyAoRU5PREVWKTsK
KyAgICAgZ290byBvdXQxOworICAgfQorICAgCisgICBpZiAoKGZsYWdzICYg
T19DUkVBVCkgJiYgKGZsYWdzICYgT19FWENMKSkKKyAgIHsKKyAgICAgc2V0
X2Vycm5vIChFRVhJU1QpOworICAgICBnb3RvIG91dDE7CisgICB9CisgCisg
ICBpZiAocnAtPmVycm9yICYmCisgICAgICAgKChmbGFncyAmIE9fTk9TWU1M
SU5LKSB8fCAocnAtPmVycm9yICE9IEVOT0VOVCkgfHwgIShmbGFncyAmIE9f
Q1JFQVQpKSkKKyAgIHsKKyAgICAgc2V0X2Vycm5vIChycC0+ZXJyb3IpOwor
ICAgICBnb3RvIG91dDE7CisgICB9CisgICAKKyAgIGlmIChycC0+ZmlsZV9h
dHRyaWJ1dGVzICgpICE9IChEV09SRCkgLTEpCisgICB7CisgICAgIGlmICgo
IChmbGFncyAmIE9fV1JPTkxZKSB8fCAoZmxhZ3MgJiBPX1JEV1IpKSAmJgor
ICAgICAgKHJwLT5oYXNfYXR0cmlidXRlIChGSUxFX0FUVFJJQlVURV9SRUFE
T05MWSkpKQorICAgICB7CisgICAgICAgc2V0X2Vycm5vIChFQUNDRVMpOwor
ICAgICAgIGdvdG8gb3V0MTsKKyAgICAgfQorICAgICBpZiAoKGZsYWdzICYg
T19ESVJPUEVOKSB8fCAocnAtPmhhc19hdHRyaWJ1dGUgKEZJTEVfQVRUUklC
VVRFX0RJUkVDVE9SWSkpKQorICAgICB7CisgICAgICAgc2V0X2Vycm5vIChF
SVNESVIpOworICAgICAgIGdvdG8gb3V0MTsKKyAgICAgfQorICAgfQorIAor
ICAgc3dpdGNoIChmbGFncyAmIChPX1JET05MWSB8IE9fV1JPTkxZIHwgT19S
RFdSKSkgeworICAgICBjYXNlIE9fUkRPTkxZOgorIAlpc3JlYWRlciA9IDE7
CisgCXN5c2NhbGxfcHJpbnRmICgiaXNyZWFkZXIiKTsKKyAJYnJlYWs7Cisg
ICAgIGNhc2UgT19XUk9OTFk6CisgCWlzd3JpdGVyID0gMTsKKyAJc3lzY2Fs
bF9wcmludGYgKCJpc3dyaXRlciIpOworIAlicmVhazsKKyAgICAgZGVmYXVs
dDoKKyAJaXNyZWFkZXIgPSAxOworIAlpc3dyaXRlciA9IDE7CisgCXN5c2Nh
bGxfcHJpbnRmICgiaXNyZWFkZXImd3JpdGVyIik7CisgICB9CisgCisgICBz
ZXRfZmxhZ3MgKGZsYWdzLCBycCA/IHJwLT5iaW5tb2RlICgpIDogMCk7Cisg
CisgICBzZWNyZXRfbmFtZSAoZmlsZW1hcG5hbWUsIGdldF9uYW1lICgpLCBO
VUxMLCBnZXRfbmFtZWhhc2ggKCkpOworICAgcGZzeXNfb2Zmc2V0ID0gZ2V0
cGZzeXNfc3ogKCk7CisgICAKKyAgIGZpbGVtYXAgPSBOVUxMOworICAgaWYg
KCEoZmlsZW1hcCA9IE9wZW5GaWxlTWFwcGluZyAoRklMRV9NQVBfQUxMX0FD
Q0VTUywgVFJVRSwgZmlsZW1hcG5hbWUpKSkKKyAgIHsKKyAgICAgaWYgKChm
aWxlbWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcgKElOVkFMSURfSEFORExFX1ZB
TFVFLCBzYSwgUEFHRV9SRUFEV1JJVEUsIAorIAkgICAgMCwgcGZzeXNfb2Zm
c2V0ICsgRklGT19NQVBfU1osIGZpbGVtYXBuYW1lKSkgPT0gTlVMTCkKKyAg
ICAgeworIAlfX3NldGVycm5vICgpOworIAlzeXNjYWxsX3ByaW50ZiAoIkNy
ZWF0ZUZpbGVNYXBwaW5nICgpIGZpZm8gZmFpbGVkIik7CisgCWdvdG8gb3V0
MjsKKyAgICAgfSBlbHNlCisgCWZpcnN0bWFwID0gMTsKKyAgIH0gZWxzZSBz
eXNjYWxsX3ByaW50ZiAoIk9wZW5GaWxlTWFwcGluZyAoKSBmaWZvIHN1Y2Nl
c3MiKTsKKyAgIFByb3RlY3RIYW5kbGUgKGZpbGVtYXApOworICAgCisgICBf
YWNxdWlyZV9yZWFkID0gTlVMTDsKKyAgIHNlY3JldF9uYW1lIChidWYsIGdl
dF9uYW1lICgpLCBGSUZPX1JFQURfRVZFTlQsIGdldF9uYW1laGFzaCAoKSk7
CisgICBpZiAoIShfYWNxdWlyZV9yZWFkID0gQ3JlYXRlRXZlbnQgKHNhLCBG
QUxTRSwgRkFMU0UsIGJ1ZikpKQorICAgICBnb3RvIG91dDI7CisgICBQcm90
ZWN0SGFuZGxlIChfYWNxdWlyZV9yZWFkKTsKKyAKKyAgIGlmIChpc3dyaXRl
cikKKyAgIHsKKyAgICAgX291dHB1dF9tdXRleCA9IE5VTEw7CisgICAgIHNl
Y3JldF9uYW1lIChidWYsIGdldF9uYW1lICgpLCBGSUZPX1dSSVRFX01VVEVY
LCBnZXRfbmFtZWhhc2ggKCkpOworICAgICBpZiAoIShfb3V0cHV0X211dGV4
ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwgYnVmKSkpCisgCWdvdG8gb3V0
MjsKKyAgICAgUHJvdGVjdEhhbmRsZSAoX291dHB1dF9tdXRleCk7CisgICB9
CisgICAKKyAgIGlmIChpc3JlYWRlcikKKyAgIHsKKyAgICAgX2lucHV0X211
dGV4ID0gTlVMTDsKKyAgICAgc2VjcmV0X25hbWUgKGJ1ZiwgZ2V0X25hbWUg
KCksIEZJRk9fUkVBRF9NVVRFWCwgZ2V0X25hbWVoYXNoICgpKTsKKyAgICAg
aWYgKCEoX2lucHV0X211dGV4ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwg
YnVmKSkpCisgCWdvdG8gb3V0MjsKKyAgICAgUHJvdGVjdEhhbmRsZSAoX2lu
cHV0X211dGV4KTsKKyAgIH0KKyAgIAorICAgX2RhdGFfbXV0ZXggPSBOVUxM
OworICAgc2VjcmV0X25hbWUgKGJ1ZiwgZ2V0X25hbWUgKCksIEZJRk9fREFU
QV9NVVRFWCwgZ2V0X25hbWVoYXNoICgpKTsKKyAgIGlmICghKF9kYXRhX211
dGV4ID0gQ3JlYXRlTXV0ZXggKHNhLCBGQUxTRSwgYnVmKSkpCisgICAgIGdv
dG8gb3V0MjsKKyAgIFByb3RlY3RIYW5kbGUgKF9kYXRhX211dGV4KTsKKyAg
IAorICAgX2RvbmVfd3JpdGUgPSBOVUxMOworICAgc2VjcmV0X25hbWUgKGJ1
ZiwgZ2V0X25hbWUgKCksIEZJRk9fV1JJVEVfRVZFTlQsIGdldF9uYW1laGFz
aCAoKSk7CisgICBpZiAoIShfZG9uZV93cml0ZSA9IENyZWF0ZUV2ZW50IChz
YSwgVFJVRSwgRkFMU0UsIGJ1ZikpKQorICAgICBnb3RvIG91dDI7CisgICBQ
cm90ZWN0SGFuZGxlIChfZG9uZV93cml0ZSk7CisgICAKKyAgIHN5c2NhbGxf
cHJpbnRmICgiQ3JlYXRlTXV0ZXggKCkgZmlmbyBzdWNjZXNzIik7CisgCisg
ICBndWFyZCA9IE5VTEw7CisgICBpZiAoKGd1YXJkID0gKGNsYXNzIGZpZm9f
Z3VhcmQgKikgTWFwVmlld09mRmlsZSAoZmlsZW1hcCwKKyAgICBGSUxFX01B
UF9XUklURSwgMCwgMCwgMCkpID09IE5VTEwpCisgICB7CisgICAgIF9fc2V0
ZXJybm8gKCk7CisgICAgIHN5c2NhbGxfcHJpbnRmICgiTWFwVmlld09mRmls
ZSAoKSBmaWZvIGVycm9yIik7CisgICAgIGdvdG8gb3V0MjsKKyAgIH0KKyAg
IHN5c2NhbGxfcHJpbnRmICgiTWFwVmlld09mRmlsZSAoKSBmaWZvIHN1Y2Nl
c3MiKTsKKyAKKyAgIGZkYXRhID0gTlVMTDsKKyAgIGlmICghKGZkYXRhID0g
TWFwVmlld09mRmlsZSAoZmlsZW1hcCwgCisgICAgKGlzcmVhZGVyICYmICFp
c3dyaXRlcikgPyBGSUxFX01BUF9SRUFEIDogRklMRV9NQVBfV1JJVEUsCisg
ICAgMCwgcGZzeXNfb2Zmc2V0LCBGSUZPX01BUF9TWikpKQorICAgeworICAg
ICBfX3NldGVycm5vICgpOworICAgICBnb3RvIG91dDI7CisgICB9CisgICBz
eXNjYWxsX3ByaW50ZiAoIk1hcFZpZXdPZkZpbGUgKCkgZmlmbyBzdWNjZXNz
Iik7CisgICAKKyAgIC8qIGV4Y2x1c2l2ZSBsb2NrICovCisgICBpZiAoaXN3
cml0ZXIgJiYgKGd1YXJkLT53cml0ZXJzKSAmJiAoZmxhZ3MgJiBPX0VYQ0wp
KQorICAgeworICAgICBzZXRfZXJybm8gKEVBQ0NFUyk7CisgICAgIGdvdG8g
b3V0MjsKKyAgIH0KKyAgIAorICAgaWYgKGlzX25vbmJsb2NraW5nICgpICYm
IGlzd3JpdGVyICYmICghaXNyZWFkZXIpICYmICghZ3VhcmQtPnJlYWRlcnMp
KQorICAgeworICAgICBzZXRfZXJybm8gKEVOWElPKTsKKyAgICAgZ290byBv
dXQyOworICAgfQorIAorICAgaWYgKGZpcnN0bWFwKSB7CisgICAgIGd1YXJk
LT5yZWFkZXJzID0gaXNyZWFkZXI7CisgICAgIGd1YXJkLT53cml0ZXJzID0g
aXN3cml0ZXI7CisgICAgIGd1YXJkLT5tdGltLnR2X3NlYyA9IGd1YXJkLT5t
dGltLnR2X25zZWMgPSAwOworICAgICBndWFyZC0+ZmRfb2Zmc2V0ID0gZ3Vh
cmQtPmZkX3N6ID0gZ3VhcmQtPmlzYWN0aXZlID0gMDsKKyAgIH0gZWxzZQor
ICAgeworICAgICBndWFyZC0+cmVhZGVycyArPSBpc3JlYWRlcjsKKyAgICAg
Z3VhcmQtPndyaXRlcnMgKz0gaXN3cml0ZXI7CisgICAgIGlmIChndWFyZC0+
cmVhZGVycyAmJiBndWFyZC0+d3JpdGVycykKKyAgICAgICBndWFyZC0+aXNh
Y3RpdmUgPSAwOworICAgfQorIAorICAgLyogaGFuZGxlIEZJRk8gb3BlbiAo
KSdzIGJsb2NraW5nIGlmIGFub3RoZXIgZW5kIGlzIG5vdCBwcmVzZW50ICov
CisgICBzZWNyZXRfbmFtZSAoYnVmLCBnZXRfbmFtZSAoKSwgRklGT19PUEVO
X0VWRU5ULCBnZXRfbmFtZWhhc2ggKCkpOworICAgLyogY3JlYXRlIGEgbWFu
dWFsLXJlc2V0IGV2ZW50IG9iamVjdCAqLworICAgaWYgKChfb3Blbl9ibG9j
ayA9IENyZWF0ZUV2ZW50IChzYSwgVFJVRSwgRkFMU0UsIGJ1ZikpID09IE5V
TEwpCisgICAgIGdvdG8gb3V0MjsKKyAKKyAgIGlmIChpc3dyaXRlcikKKyAg
ICAgeworIAlpZiAoIWlzX25vbmJsb2NraW5nICgpICYmICFpc3JlYWRlciAm
JgorIAkgIWd1YXJkLT5yZWFkZXJzICYmICFndWFyZC0+ZmRfc3opCisgCSAg
ICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfb3Blbl9ibG9jaywgSU5GSU5JVEUp
OworIAlpZiAoZ3VhcmQtPndyaXRlcnMgPT0gMSkKKyAJICAgIFB1bHNlRXZl
bnQgKF9vcGVuX2Jsb2NrKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsK
KyAJaWYgKCFpc19ub25ibG9ja2luZyAoKSAmJiAhaXN3cml0ZXIgJiYKKyAJ
ICFndWFyZC0+d3JpdGVycyAmJiAhZ3VhcmQtPmZkX3N6KQorIAkgICAgV2Fp
dEZvclNpbmdsZU9iamVjdCAoX29wZW5fYmxvY2ssIElORklOSVRFKTsKKyAJ
aWYgKGd1YXJkLT5yZWFkZXJzID09IDEpCisgCSAgICBQdWxzZUV2ZW50IChf
b3Blbl9ibG9jayk7CisgICAgIH0KKyAgIENsb3NlSGFuZGxlIChfb3Blbl9i
bG9jayk7CisgCisgICBzZXRfaW9faGFuZGxlIChmZGF0YSk7CisgICBzZXRf
ZnNfZmxhZ3MgKHJwLT5mc19mbGFncyAoKSk7CisgICBzZXRfaGFzX2FjbHMg
KHJwLT5oYXNfYWNscyAoKSk7CisgICBzZXRfaXNyZW1vdGUgKHJwLT5pc3Jl
bW90ZSAoKSk7CisgICBzZXRfc3ltbGlua19wIChycC0+aXNzeW1saW5rICgp
KTsKKyAgIHNldF9leGVjYWJsZV9wICgpOworICAgc2V0X29wZW5fc3RhdHVz
ICgpOworICAgaWYgKG1vZGUgJiBPX05PSU5IRVJJVCkKKyAgICAgc2V0X2Ns
b3NlX29uX2V4ZWMgKDEpOworIAorICAgcmVzID0gMTsKKyAgIHNldF9vcGVu
X3N0YXR1cyAoKTsKKyAgIAorICAgcmV0dXJuIHJlczsKKyAgIAorICAgb3V0
MjoKKyAgICAgcmVzID0gc2h1dGhhbmRsZXMgKHJlcyk7CisgCisgICBvdXQx
OgorICAgICByZXR1cm4gcmVzOworIH0KKyAKKyBpbnQKKyBmaGFuZGxlcl9m
aWZvOjpmc3RhdCAoc3RydWN0IF9fc3RhdDY0ICpidWYsIHBhdGhfY29udiAq
cGMpCisgeworICBpbnQgcmVzID0gLTE7CisgIEhBTkRMRSBsZmlsZW1hcCA9
IE5VTEw7CisgCisgICBpZiAoZ2V0X3VuaXhfcGF0aCAoKSkgLyogc3RhdCAo
KSAqLworICAgeworICAgICBwYXRoX2NvbnYgc3BjIChnZXRfdW5peF9wYXRo
ICgpLCBQQ19TWU1fTk9GT0xMT1cgfCBQQ19OVUxMRU1QVFkgfCBQQ19GVUxM
LAorIAkJICAgICBOVUxMKTsKKyAgICAgZmhhbmRsZXJfYmFzZSAqZmggPSBj
eWdoZWFwLT5mZHRhYi5idWlsZF9maGFuZGxlciAoLTEsIEZIX0RJU0ssCisg
CQkJCQkJCSBnZXRfdW5peF9wYXRoICgpLAorIAkJCQkJCQkgc3BjLCAwKTsK
KyAgICAgaWYgKGZoKQorICAgICB7CisgCXJlcyA9IGZoLT5mc3RhdCAoYnVm
LCAmc3BjKTsKKyAJYnVmLT5zdF9yZGV2ID0gMDsKKyAJCisgCXNlY3JldF9u
YW1lIChmaWxlbWFwbmFtZSwgZmgtPmdldF9uYW1lICgpLCBOVUxMLCBnZXRf
bmFtZWhhc2ggKCkpOworICAgCisgCWlmICghZ3VhcmQpIGlmICgobGZpbGVt
YXAgPSBPcGVuRmlsZU1hcHBpbmcgKEZJTEVfTUFQX1JFQUQsCisgCQkJCQkg
ICAgVFJVRSwgZmlsZW1hcG5hbWUpKSkKKyAJICAgIGd1YXJkID0gKGNsYXNz
IGZpZm9fZ3VhcmQgKikgTWFwVmlld09mRmlsZSAobGZpbGVtYXAsCisgCQkJ
CQlGSUxFX01BUF9SRUFELCAwLCAwLCAwKTsKKyAgICAgfQorICAgICAKKyAg
ICAgZ290byBvdXQ7CisgICB9CisgCisgICByZXMgPSBmaGFuZGxlcl9iYXNl
Ojpmc3RhdCAoYnVmLCBwYyk7CisgICBpZiAoIXJlcykgLyogZnN0YXQgKCkg
Ki8KKyAgICAgeworIAkgIGJ1Zi0+c3RfZGV2ID0gMDsKKyAJICBidWYtPnN0
X2lubyA9IChfX2lubzY0X3QpICgoRFdPUkQpIGdldF9oYW5kbGUgKCkpOwor
IAkgIGJ1Zi0+c3RfbW9kZSA9IFNfSUZTT0NLIHwgU19JUldYVSB8IFNfSVJX
WEcgfCBTX0lSV1hPOworICAgICB9CisgCisgICBvdXQ6CisgICAKKyAgICAg
dGltZV9hc190aW1lc3RydWNfdCAoJmJ1Zi0+c3RfYXRpbSk7CisgICAgIGlm
IChndWFyZCkKKyAgICAgeworIAkvKiBjb3JyZWN0IG1vZGlmaWNhdGlvbiB0
aW1lIGF0IGxlYXN0IHdoaWxlIEZJRk8gaXMgYWN0aXZlICovCisgCWlmIChn
dWFyZC0+bXRpbS50dl9zZWMpIGJ1Zi0+c3RfbXRpbSA9IGd1YXJkLT5tdGlt
OworIAkvKiBjdXJyZW50IEZJRk8gb2NjdXBpZWQgc3BhY2UgKi8gICAgCisg
CWJ1Zi0+c3Rfc2l6ZSA9IGd1YXJkLT5mZF9zejsKKyAJaWYgKGxmaWxlbWFw
KSAvKiBpZiBmaWxlIHdhcyBtYXBwZWQgZnJvbSBzdGF0ICgpICovCisgCXsK
KyAJICAgIFVubWFwVmlld09mRmlsZSAoZ3VhcmQpOworIAkgICAgZ3VhcmQg
PSBOVUxMOworIAkgICAgQ2xvc2VIYW5kbGUgKGxmaWxlbWFwKTsKKyAJICAg
IGZpbGVtYXAgPSBOVUxMOworIAl9CisgICAgIH0KKyAgICAgZWxzZQorIAli
dWYtPnN0X3NpemUgPSAwOworICAgICAKKyAgICAgYnVmLT5zdF9ibG9ja3Mg
PSAoYnVmLT5zdF9zaXplICsgYnVmLT5zdF9ibGtzaXplIC0gMSkgLyBidWYt
PnN0X2Jsa3NpemU7CisgCisgICAgIHJldHVybiByZXM7CisgfQorIAorIGlu
dAorIGZoYW5kbGVyX2ZpZm86OnNodXRoYW5kbGVzIChpbnQgcHJldl9yZXMp
IHsKKyAgaW50IHJlcyA9IHByZXZfcmVzOworICAKKyAgIGlmIChndWFyZCAm
JiAoZ3VhcmQtPnJlYWRlcnMgPiAxKSAmJiAoZ3VhcmQtPndyaXRlcnMgPiAx
KSkKKyAgIHsKKyAgICAgaWYgKChfb3Blbl9ibG9jaykgJiYgKCFDbG9zZUhh
bmRsZSAoX29wZW5fYmxvY2spKSkKKyAgICAgeworIAlyZXMgPSAwOworIAlz
ZXRfZXJybm8gKEVCQURGKTsKKyAgICAgfQorICAgICBfb3Blbl9ibG9jayA9
IE5VTEw7CisgICB9CisgCisgICBpZiAoaXN3cml0ZXIpCisgICB7CisgICAg
IGlmICgoX291dHB1dF9tdXRleCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChf
b3V0cHV0X211dGV4KSkpCisgICAgIHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vy
cm5vIChFQkFERik7CisgICAgIH0KKyAgICAgX291dHB1dF9tdXRleCA9IE5V
TEw7CisgICB9CisgCisgICBpZiAoaXNyZWFkZXIpCisgICB7CisgICAgIGlm
ICgoX2lucHV0X211dGV4KSAmJiAoIUZvcmNlQ2xvc2VIYW5kbGUgKF9pbnB1
dF9tdXRleCkpKQorICAgICB7CisgCXJlcyA9IDA7CisgCXNldF9lcnJubyAo
RUJBREYpOworICAgICB9CisgICAgIF9pbnB1dF9tdXRleCA9IE5VTEw7Cisg
ICB9CisgCisgICBpZiAoKF9kb25lX3dyaXRlKSAmJiAoIUZvcmNlQ2xvc2VI
YW5kbGUgKF9kb25lX3dyaXRlKSkpCisgICB7CisgICAgIHJlcyA9IDA7Cisg
ICAgIHNldF9lcnJubyAoRUJBREYpOworICAgfQorICAgX2RvbmVfd3JpdGUg
PSBOVUxMOworIAorICAgaWYgKGd1YXJkICYmICFndWFyZC0+cmVhZGVycyAm
JiAhZ3VhcmQtPndyaXRlcnMpCisgICB7CisgICAgIGlmICgoX2FjcXVpcmVf
cmVhZCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChfYWNxdWlyZV9yZWFkKSkp
CisgICAgIHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vycm5vIChFQkFERik7Cisg
ICAgIH0KKyAgICAgX2FjcXVpcmVfcmVhZCA9IE5VTEw7CisgCisgICAgIGlm
ICgoX2RhdGFfbXV0ZXgpICYmICghRm9yY2VDbG9zZUhhbmRsZSAoX2RhdGFf
bXV0ZXgpKSkKKyAgICAgeworIAlyZXMgPSAwOworIAlzZXRfZXJybm8gKEVC
QURGKTsKKyAgICAgfQorICAgICBfZGF0YV9tdXRleCA9IE5VTEw7CisgCisg
ICAgIGlmICgoZ3VhcmQpICYmICghVW5tYXBWaWV3T2ZGaWxlIChndWFyZCkp
KQorICAgICB7CisgCXJlcyA9IDA7CisgCXNldF9lcnJubyAoRUJBREYpOwor
ICAgICB9CisgICAgIGd1YXJkID0gTlVMTDsKKyAKKyAgICAgaWYgKChmZGF0
YSkgJiYgKCFVbm1hcFZpZXdPZkZpbGUgKGZkYXRhKSkpCisgICAgIHsKKyAg
ICAgICAgIHJlcyA9IDA7CisgICAgICAgICBzZXRfZXJybm8gKEVCQURGKTsK
KyAgICAgfQorICAgICBmZGF0YSA9IE5VTEw7CisgCisgICAgIGlmICgoZmls
ZW1hcCkgJiYgKCFGb3JjZUNsb3NlSGFuZGxlIChmaWxlbWFwKSkpCisgICAg
IHsKKyAJcmVzID0gMDsKKyAJc2V0X2Vycm5vIChFQkFERik7CisgICAgIH0K
KyAgICAgZmlsZW1hcCA9IE5VTEw7CisgICB9CisgICAKKyAgIHNldF9pb19o
YW5kbGUgKE5VTEwpOworIAorICAgcmV0dXJuIHJlczsKKyB9CisgCisgaW50
CisgZmhhbmRsZXJfZmlmbzo6Y2xvc2UgKCkKKyB7CisgIGludCByZXMgPSAw
OworICAgCisgICBzeXNjYWxsX3ByaW50ZiAoImNsb3NpbmcuLi4iKTsKKyAg
IGlmICghZmlsZW1hcCkKKyAgIHsKKyAgICAgc2V0X2Vycm5vIChFQkFERik7
CisgICAgIHJldHVybiByZXM7CisgICB9CisgICBlbHNlCisgICB7CisgICAg
IC8qIGZpeG1lIHNob3VsZCB0aGlzIGJlIEludGVybG9ja2VkSW5jcmVtZW50
PyAqLworICAgICBpZiAoaXNyZWFkZXIpIGd1YXJkLT5yZWFkZXJzLS07Cisg
ICAgIGlmIChpc3dyaXRlcikgZ3VhcmQtPndyaXRlcnMtLTsKKyAgICAgICAK
KyAgICAgaWYgKCEoZ3VhcmQtPnJlYWRlcnMpIHx8ICEoZ3VhcmQtPndyaXRl
cnMpKQorICAgICB7CisgCWd1YXJkLT5pc2FjdGl2ZSA9IDI7CS8vIGFub3Ro
ZXIgRklGTyBlbmQgd2FzIGNsb3NlZDsKKyAJUHVsc2VFdmVudCAoX2FjcXVp
cmVfcmVhZCk7CisgCVB1bHNlRXZlbnQgKF9kb25lX3dyaXRlKTsKKyAgICAg
fQorICAgICByZXMgPSBzaHV0aGFuZGxlcyAoMSk7CisgICB9CisgCisgICBy
ZXR1cm4gcmVzOworIH0KKyAKKyBpbnQKKyBmaGFuZGxlcl9maWZvOjp3cml0
ZSAoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorIHsKKyAgIHVuc2ln
bmVkIGludCB0OworICAgc2l6ZV90IGFjdHVhbF9sZW5ndGg7CisgICBzaXpl
X3QgY3VycmVudF9wb3NpdGlvbiA9IDA7CisgCisgICBzeXNjYWxsX3ByaW50
ZiAoImJlZ2luICVkICVkIiwgaXNyZWFkZXIsIGlzd3JpdGVyKTsKKyAgIGlm
ICghaXN3cml0ZXIgfHwgKGxlbiA8PSAwKSB8fCAobGVuID49IFNTSVpFX01B
WCkpCisgICB7CisgICAgIHNldF9lcnJubyAoRUlOVkFMKTsKKyAgICAgcmV0
dXJuIC0xOworICAgfQorIAorICAgaWYgKCFmaWxlbWFwIHx8ICFmZGF0YSB8
fCAhX291dHB1dF9tdXRleCB8fAorICAgICFfZGF0YV9tdXRleCB8fCAhX2Rv
bmVfd3JpdGUgfHwgIV9hY3F1aXJlX3JlYWQpCisgICB7CisgICAgIHN5c2Nh
bGxfcHJpbnRmICgiYmFkIGZkIik7CisgICAgIHNldF9lcnJubyAoRUJBREYp
OworICAgICByZXR1cm4gLTE7CisgICB9CisgCisgICBpZiAoaXNfbm9uYmxv
Y2tpbmcgKCkpCisgICAgIGlmICghZ3VhcmQtPnJlYWRlcnMpCisgICAgIHsK
KyAgICAgICBzZXRfZXJybm8gKEVQSVBFKTsKKyAgICAgICByYWlzZSAoU0lH
UElQRSk7CisgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgCisgICBzeXNj
YWxsX3ByaW50ZiAoIndyaXRlICV4LCAlZCIsIGJ1ZiwgbGVuKTsKKyAgIHQg
PSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfb3V0cHV0X211dGV4LCBJTkZJTklU
RSk7CisgICBpZiAodCA9PSBXQUlUX09CSkVDVF8wKQorICAgeworICAgICBz
eXNjYWxsX3ByaW50ZiAoIndlIGhhdmUgdGhlIF9vdXRwdXRfbXV0ZXggJWQg
IiwgR2V0TGFzdEVycm9yICgpKTsKKyAgICAgYWN0dWFsX2xlbmd0aCA9IDA7
CisgICAgIGN1cnJlbnRfcG9zaXRpb24gPSAwOworICAgICBpZiAoIWd1YXJk
LT5yZWFkZXJzKQorICAgICB7CisgCVJlbGVhc2VNdXRleCAoX291dHB1dF9t
dXRleCk7CisgICAgICAgICBzZXRfZXJybm8gKEVQSVBFKTsKKyAgICAgICAg
IHJhaXNlIChTSUdQSVBFKTsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
fQorICAgICBzeXNjYWxsX3ByaW50ZiAoIndhaXQgZm9yIHRoZSBfZGF0YV9t
dXRleCAlZCAiLCBHZXRMYXN0RXJyb3IgKCkpOworICAgICB0ID0gV2FpdEZv
clNpbmdsZU9iamVjdCAoX2RhdGFfbXV0ZXgsIElORklOSVRFKTsKKyAgICAg
aWYgKHQgIT0gV0FJVF9PQkpFQ1RfMCkKKyAgICAgeworIAlpZiAodCA9PSBX
QUlUX0FCQU5ET05FRCkKKyAJICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4
KTsKKyAJc3lzY2FsbF9wcmludGYKKyAJICAgICgidW5hYmxlIHRvIGdldCBf
ZGF0YV9tdXRleCAtIGJhZCBleGl0IG9uIEZJRk8/ICVkICVkICIsCisgCSAg
ICAgdCwgR2V0TGFzdEVycm9yICgpKTsKKyAJZ290byByZXRyeTsKKyAgICAg
fQorICAgICBpZiAoIWd1YXJkLT5yZWFkZXJzKQorIAlnb3RvIGVycnBpcGU7
CisgICAgIHdoaWxlIChjdXJyZW50X3Bvc2l0aW9uIDwgbGVuKQorICAgICB7
CisgCXN5c2NhbGxfcHJpbnRmICgiaXMgdGhlcmUgYW55IHF1ZXVlZCBkYXRh
ID8gIik7CisgCXdoaWxlIChndWFyZC0+ZmRfc3ogJiYgKGd1YXJkLT5pc2Fj
dGl2ZSA8IDIpKQorIAl7CisgCSAgICBzeXNjYWxsX3ByaW50ZiAoInllcywg
c3RpbGwgJWQgYnl0ZXMgaW4gRklGTyIsIGd1YXJkLT5mZF9zeik7CisgCSAg
ICBpZiAoZ3VhcmQtPmlzYWN0aXZlID4gMSkKKyAJCWdvdG8gZXJycGlwZTsK
KyAJICAgIGlmIChpc19ub25ibG9ja2luZyAoKSkKKyAJCWJyZWFrOyAvLyB0
byBvdXRlciBsb29wCisgCisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIndhaXQg
Zm9yIHRoZSBfYWNxdWlyZV9yZWFkIGV2ZW50ICVkICIsCisgCSAgICAgR2V0
TGFzdEVycm9yICgpKTsKKyAJICAgIFJlbGVhc2VNdXRleCAoX2RhdGFfbXV0
ZXgpOworIAkgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoX2FjcXVpcmVfcmVh
ZCwgSU5GSU5JVEUpOworIAkgICAgUmVzZXRFdmVudCAoX2FjcXVpcmVfcmVh
ZCk7CisgCisgCSAgICB0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoX2RhdGFf
bXV0ZXgsIElORklOSVRFKTsKKyAJICAgIGlmICh0ICE9IFdBSVRfT0JKRUNU
XzApCisgCSAgICB7CisgCQlpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAJ
CSAgICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAJCXN5c2NhbGxf
cHJpbnRmCisgCQkgICAgKCJhYmFuZG9uZWQgX2RhdGFfbXV0ZXggLSBiYWQg
ZXhpdCBvbiBGSUZPPyAlZCAlZCAiLAorIAkJICAgICB0LCBHZXRMYXN0RXJy
b3IgKCkpOworIAkJZ290byByZXRyeTsKKyAJICAgIH0KKyAJfQorIAlpZiAo
IWd1YXJkLT5yZWFkZXJzKQorIAkgICAgZ290byBlcnJwaXBlOworIAlhY3R1
YWxfbGVuZ3RoID0gbGVuIC0gY3VycmVudF9wb3NpdGlvbjsKKyAJLyogT19O
T05CTE9DSyBhbmQgdGhlcmUgaXMgbm8gcm9vbSBpbiBGSUZPICovCisgCWlm
IChpc19ub25ibG9ja2luZyAoKSAmJiAoYWN0dWFsX2xlbmd0aCArIGd1YXJk
LT5mZF9zeiA+IEZJRk9fTUFQX1NaKSkKKyAJeworIAkgICAgUmVsZWFzZU11
dGV4IChfZGF0YV9tdXRleCk7CisgCSAgICBSZWxlYXNlTXV0ZXggKF9vdXRw
dXRfbXV0ZXgpOworIAkgICAgc2V0X2Vycm5vIChFQUdBSU4pOworIAkgICAg
cmV0dXJuIC0xOworIAl9CisgCXN5c2NhbGxfcHJpbnRmICgicmVhZHkgdG8g
d3JpdGUiKTsKKyAJaWYgKGFjdHVhbF9sZW5ndGggPiBGSUZPX01BUF9TWikK
KyAJICAgIGFjdHVhbF9sZW5ndGggPSBGSUZPX01BUF9TWjsKKyAJbWVtY3B5
IChmZGF0YSwgKGNoYXIgKikgYnVmICsgY3VycmVudF9wb3NpdGlvbiwgYWN0
dWFsX2xlbmd0aCk7CisgCWN1cnJlbnRfcG9zaXRpb24gKz0gYWN0dWFsX2xl
bmd0aDsKKyAJZ3VhcmQtPmZkX3N6ID0gYWN0dWFsX2xlbmd0aDsKKyAJZ3Vh
cmQtPmZkX29mZnNldCA9IGFjdHVhbF9sZW5ndGggPSAwOworIAl0aW1lX2Fz
X3RpbWVzdHJ1Y190ICgmZ3VhcmQtPm10aW0pOyAvLyBqdXN0IHRvIGltcGxl
bWVudCBmc3RhdCAoKQorIAlpZiAoY3VycmVudF9wb3NpdGlvbiA9PSBsZW4p
CisgCSAgICBndWFyZC0+ZW93ID0gMTsKKyAJZWxzZQorIAkgICAgZ3VhcmQt
PmVvdyA9IDA7CisgCisgCWlmICghaXNfbm9uYmxvY2tpbmcgKCkpCisgCXsK
KyAJc3lzY2FsbF9wcmludGYgKCJkYXRhIHdyaXR0ZW4sIHdhaXRpbmcgZm9y
IF9hY3F1aXJlX3JlYWQiKTsKKyAJICAgIFJlbGVhc2VNdXRleCAoX2RhdGFf
bXV0ZXgpOworIAkgICAgU2V0RXZlbnQgKF9kb25lX3dyaXRlKTsKKyAJICAg
IHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfYWNxdWlyZV9yZWFkLCBJTkZJ
TklURSk7CisgCSAgICBSZXNldEV2ZW50IChfYWNxdWlyZV9yZWFkKTsKKyAJ
ICAgIHN5c2NhbGxfcHJpbnRmICgiIHdlIGhhdmUgdGhlIF9hY3F1aXJlX3Jl
YWQiKTsKKyAKKyAJICAgIHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChfZGF0
YV9tdXRleCwgSU5GSU5JVEUpOworICAgICAgICAgICAgIGlmICh0ICE9IFdB
SVRfT0JKRUNUXzApCisgICAgICAgICAgICAgeworIAkJaWYgKHQgPT0gV0FJ
VF9BQkFORE9ORUQpCisgCQkgICAgUmVsZWFzZU11dGV4IChfZGF0YV9tdXRl
eCk7CisgICAgICAgICAgICAgICAgIHN5c2NhbGxfcHJpbnRmCisgICAgICAg
ICAgICAgICAgICAgICAoImFiYW5kb25lZCBfZGF0YV9tdXRleCAtIGJhZCBl
eGl0IG9uIEZJRk8/ICVkICVkICIsCisgICAgICAgICAgICAgICAgICAgICAg
dCwgR2V0TGFzdEVycm9yICgpKTsKKyAJCWdvdG8gcmV0cnk7CisgICAgICAg
ICAgICAgfSAKKyAJICAgIHN5c2NhbGxfcHJpbnRmICgid2UgaGF2ZSB0aGUg
X2RhdGFfbXV0ZXgiKTsKKyAJfQorIAllbHNlCisgCXsKKyAJICAgIHN5c2Nh
bGxfcHJpbnRmICgic2tpcHBlZCB3YWl0aW5nIGR1ZSB0byBPX05PTkJMT0NL
Iik7CisgCSAgICBTZXRFdmVudCAoX2RvbmVfd3JpdGUpOworIAl9CisgCisg
ICAgIH0KKyAKKyAgICAgUmVsZWFzZU11dGV4IChfZGF0YV9tdXRleCk7Cisg
ICAgIFJlbGVhc2VNdXRleCAoX291dHB1dF9tdXRleCk7CisgICAgIHN5c2Nh
bGxfcHJpbnRmICgiJWQgYnl0ZXMgd3JpdHRlbiIsY3VycmVudF9wb3NpdGlv
bik7CisgICAgIHJldHVybiBjdXJyZW50X3Bvc2l0aW9uOworICAgfQorICAg
ZWxzZSBpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAgIHsKKyAgICAgc3lz
Y2FsbF9wcmludGYgKCJfb3V0cHV0X211dGV4IHdhcyBhYmFuZG9uZWQuICIp
OworICAgICBnb3RvIHJldHJ5OworICAgfQorICAgZWxzZQorICAgeworICAg
ICBzeXNjYWxsX3ByaW50ZiAoInNob3VsZCBuZXZlciBiZWVuIGhhcHBlbiAt
IG5vIHRpbWVvdXQgd2FzIHNldCBydj0lZCBlcnI9ICVkIiwgdCwKKyAJCSAg
ICAgR2V0TGFzdEVycm9yICgpKTsKKyAgICAgc2V0X2Vycm5vIChFSU8pOwor
ICAgICByZXR1cm4gLTE7CisgICB9CisgCisgICByZXR1cm4gMDsKKyAKKyAg
IHJldHJ5OgorICAgICBSZWxlYXNlTXV0ZXggKF9vdXRwdXRfbXV0ZXgpOwor
ICAgICByZXR1cm4gZmhhbmRsZXJfZmlmbzo6d3JpdGUgKGJ1ZiwgbGVuKTsK
KyAgICAgCisgICBlcnJwaXBlOgorICAgICBzeXNjYWxsX3ByaW50ZiAoImFu
ZCBGSUZPIGhhcyBiZWVuIGNsb3NlZCIpOworICAgICBSZWxlYXNlTXV0ZXgg
KF9kYXRhX211dGV4KTsKKyAgICAgUmVsZWFzZU11dGV4IChfb3V0cHV0X211
dGV4KTsKKyAgICAgc2V0X2Vycm5vIChFUElQRSk7CisgICAgIHJhaXNlIChT
SUdQSVBFKTsKKyAgICAgcmV0dXJuIC0xOworIH0KKyAKKyB2b2lkIF9fc3Rk
Y2FsbAorIGZoYW5kbGVyX2ZpZm86OnJlYWQgKHZvaWQgKnB0ciwgc2l6ZV90
JiBsZW4pCisgeworICAgdW5zaWduZWQgaW50IHQ7CisgICBzaXplX3QgYWN0
dWFsX2xlbmd0aCwgY3VycmVudF9wb3NpdGlvbiA9IDA7CisgICAKKyAgIHN5
c2NhbGxfcHJpbnRmICgiJWQgJWQiLGlzcmVhZGVyLGlzd3JpdGVyKTsKKyAg
IGlmICghaXNyZWFkZXIpCisgICB7CisgICAgIGxlbiA9IDA7CisgICAgIHNl
dF9lcnJubyAoRUlOVkFMKTsKKyAgICAgcmV0dXJuOworICAgfQorICAgaWYg
KCFmaWxlbWFwIHx8ICFmZGF0YSB8fCAhX2lucHV0X211dGV4IHx8ICFfZGF0
YV9tdXRleCB8fAorICAgICFfZG9uZV93cml0ZSB8fCAhX2FjcXVpcmVfcmVh
ZCkKKyAgIHsKKyAgIHNldF9lcnJubyAoRUJBREYpOworICAgcmV0dXJuOwor
ICAgfQorIAorICAgdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKF9pbnB1dF9t
dXRleCwgSU5GSU5JVEUpOworICAgaWYgKHQgPT0gV0FJVF9PQkpFQ1RfMCkK
KyAgIHsKKyAgICAgc3lzY2FsbF9wcmludGYgKCJnb3QgdGhlIF9pbnB1dF9t
dXRleCAlZCIsIHQpOworICAgICBhY3R1YWxfbGVuZ3RoID0gMDsKKyAgICAg
Y3VycmVudF9wb3NpdGlvbiA9IDA7CisgICAgIHQgPSBXYWl0Rm9yU2luZ2xl
T2JqZWN0IChfZGF0YV9tdXRleCwgSU5GSU5JVEUpOworICAgICBpZiAodCAh
PSBXQUlUX09CSkVDVF8wKQorICAgICB7CisgCWlmICh0ID09IFdBSVRfQUJB
TkRPTkVEKQorIAl7CisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIl9kYXRhX211
dGV4IGFiYW5kb25lZCIpOworIAkgICAgUmVsZWFzZU11dGV4IChfZGF0YV9t
dXRleCk7CisgCX0KKyAJc3lzY2FsbF9wcmludGYKKyAJICgidW5hYmxlIHRv
IGdldCBfZGF0YV9tdXRleCAtIGJhZCBleGl0IG9uIEZJRk8/Iik7CisgCWdv
dG8gcmV0cnk7CisgICAgIH0KKyAgICAgc3lzY2FsbF9wcmludGYgKCJnb3Qg
X2RhdGFfbXV0ZXgiKTsKKyAgICAgd2hpbGUgKChjdXJyZW50X3Bvc2l0aW9u
IDwgbGVuKSAmJiAhKChndWFyZC0+ZW93KSAmJiBndWFyZC0+ZmRfc3ogPT0g
MCkpCisgICAgIHsKKyAJc3lzY2FsbF9wcmludGYgKCIgaXMgdGhlcmUgZGF0
YSB3YWl0aW5nPyIpOworIAl3aGlsZSAoIWd1YXJkLT5mZF9zeikKKyAJewor
IAkgICAgLyogY2hlY2sgaWYgRklGTyB3cml0ZS1vcGVuZWQgKi8KKyAJICAg
IGlmIChndWFyZC0+aXNhY3RpdmUgPiAxKQorIAkgICAgeworIAkJc3lzY2Fs
bF9wcmludGYgKCJhbmQgRklGTyB3cml0ZSBlbmQgaGFzIGJlZW4gY2xvc2Vk
Iik7CisgCQlsZW4gPSAwOworIAkJUmVsZWFzZU11dGV4IChfZGF0YV9tdXRl
eCk7CisgCQlSZWxlYXNlTXV0ZXggKF9pbnB1dF9tdXRleCk7CisgCQlyZXR1
cm47CisgCSAgICB9CisgCisgCSAgICBzeXNjYWxsX3ByaW50ZiAoIi4ubm8u
LiIpOworIAkgICAgaWYgKGlzX25vbmJsb2NraW5nICgpKQorIAkgICAgewor
IAkJc3lzY2FsbF9wcmludGYgKCJubyBkYXRhLCBPX05PTkJMT0NLIik7Cisg
CQlsZW4gPSAwOworIAkJUmVsZWFzZU11dGV4IChfZGF0YV9tdXRleCk7Cisg
CQlSZWxlYXNlTXV0ZXggKF9pbnB1dF9tdXRleCk7CisgCQlzZXRfZXJybm8g
KEVBR0FJTik7CisgCQlyZXR1cm47CisgCSAgICB9CisgCisgCSAgICBSZWxl
YXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAJICAgIFdhaXRGb3JTaW5nbGVP
YmplY3QgKF9kb25lX3dyaXRlLCBJTkZJTklURSk7CisgCSAgICBSZXNldEV2
ZW50IChfZG9uZV93cml0ZSk7CisgCSAgICAKKyAJICAgIC8qIGNoZWNrIGlm
IEZJRk8gaXMgd3JpdGUtb3BlbmVkIGFuZCBlbXB0eSAqLworIAkgICAgaWYg
KChndWFyZC0+aXNhY3RpdmUgPiAxKSAmJiAhZ3VhcmQtPmZkX3N6KQorIAkg
ICAgeworIAkJc3lzY2FsbF9wcmludGYgKCJhbmQgRklGTyB3cml0ZSBlbmQg
aGFzIGJlZW4gY2xvc2VkIik7CisgCQlsZW4gPSAwOworIAkJUmVsZWFzZU11
dGV4IChfaW5wdXRfbXV0ZXgpOworIAkJcmV0dXJuOworIAkgICAgfQorIAor
IAkgICAgdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKF9kYXRhX211dGV4LCBJ
TkZJTklURSk7CisgCSAgICBpZiAodCAhPSBXQUlUX09CSkVDVF8wKQorIAkg
ICAgeworIAkJaWYgKHQgPT0gV0FJVF9BQkFORE9ORUQpCisgCQkgICAgUmVs
ZWFzZU11dGV4IChfZGF0YV9tdXRleCk7CisgCQlzeXNjYWxsX3ByaW50Zgor
IAkJICAgICgidW5hYmxlIHRvIGdldCBfZGF0YV9tdXRleCAtIGJhZCBleGl0
IG9uIEZJRk8/Iik7CisgCQlnb3RvIHJldHJ5OworIAkgICAgfQorIAl9Cisg
CisgCXN5c2NhbGxfcHJpbnRmICgiLi55ZXMgJWQgYnl0ZXMgb2YgZGF0YSB3
YWl0aW5nIiwgZ3VhcmQtPmZkX3N6KTsKKyAJYWN0dWFsX2xlbmd0aCA9IGd1
YXJkLT5mZF9zejsKKyAJaWYgKGFjdHVhbF9sZW5ndGggKyBjdXJyZW50X3Bv
c2l0aW9uID4gbGVuKQorIAkgICAgYWN0dWFsX2xlbmd0aCA9IGxlbiAtIGN1
cnJlbnRfcG9zaXRpb247CisgCWlmIChhY3R1YWxfbGVuZ3RoID4gRklGT19N
QVBfU1opCisgCSAgICBhY3R1YWxfbGVuZ3RoID0gRklGT19NQVBfU1o7Cisg
CW1lbWNweSAoKGNoYXIgKikgcHRyICsgY3VycmVudF9wb3NpdGlvbiwKKyAJ
ICAgIChjaGFyICopIGZkYXRhICsgZ3VhcmQtPmZkX29mZnNldCwgYWN0dWFs
X2xlbmd0aCk7CisgCWN1cnJlbnRfcG9zaXRpb24gKz0gYWN0dWFsX2xlbmd0
aDsKKyAKKyAJaWYgKCFndWFyZC0+aXNhY3RpdmUpCisgCSAgICBndWFyZC0+
aXNhY3RpdmUgPSAxOy8qIGFuIGlvIGhhcyBjb21wbGV0ZWQgKi8KKyAJZ3Vh
cmQtPmZkX3N6IC09IGFjdHVhbF9sZW5ndGg7CisgCWd1YXJkLT5mZF9vZmZz
ZXQgKz0gYWN0dWFsX2xlbmd0aDsKKyAJdGltZV9hc190aW1lc3RydWNfdCAo
Jmd1YXJkLT5tdGltKTsgLy8ganVzdCB0byBpbXBsZW1lbnQgZnN0YXQgKCkK
KyAKKyAJU2V0RXZlbnQgKF9hY3F1aXJlX3JlYWQpOworICAgICB9CisgICAg
IAorICAgICBpZiAoZ3VhcmQtPmZkX3N6ID09IDApCisgCWd1YXJkLT5lb3cg
PSAwOworIAorICAgICBSZWxlYXNlTXV0ZXggKF9kYXRhX211dGV4KTsKKyAg
ICAgUmVsZWFzZU11dGV4IChfaW5wdXRfbXV0ZXgpOworICAgfQorICAgZWxz
ZSBpZiAodCA9PSBXQUlUX0FCQU5ET05FRCkKKyAgIHsKKyAgICAgc3lzY2Fs
bF9wcmludGYgKCJhYmFuZG9uZWQgX2lucHV0X211dGV4IGZvdW5kICIpOwor
ICAgICBnb3RvIHJldHJ5OworICAgfQorICAgZWxzZQorICAgeworICAgICBz
eXNjYWxsX3ByaW50ZgorIAkgKCJfaW5wdXRfbXV0ZXggLSBzaG91bGQgbmV2
ZXIgZXZlciBoYXBwZW4gKG5vIHRpbWVvdXQgd2FzIHNldCIpOworICAgICBs
ZW4gPSAwOworICAgICBzZXRfZXJybm8gKEVJTyk7CisgICAgIHJldHVybjsK
KyAgIH0KKyAKKyAgIGxlbiA9IGN1cnJlbnRfcG9zaXRpb247CisgICByZXR1
cm47CisgCisgICByZXRyeToKKyAgICAgUmVsZWFzZU11dGV4IChfaW5wdXRf
bXV0ZXgpOworICAgICBmaGFuZGxlcl9maWZvOjpyZWFkIChwdHIsIGxlbik7
CisgICAgIHJldHVybjsKKyB9CisgCisgX29mZjY0X3QKKyBmaGFuZGxlcl9m
aWZvOjpsc2VlayAoX29mZjY0X3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQorIHsK
KyAgX29mZjY0X3QgcmVzID0gKF9vZmY2NF90KS0xOworIAorICAgaWYgKCFm
aWxlbWFwIHx8ICFmZGF0YSB8fCAhX2RhdGFfbXV0ZXggfHwgIV9kb25lX3dy
aXRlIHx8ICFfYWNxdWlyZV9yZWFkIHx8CisgICAgICAoKGlzcmVhZGVyKSA/
ICFfaW5wdXRfbXV0ZXggOiAwKSB8fCAoKGlzd3JpdGVyKSA/ICFfb3V0cHV0
X211dGV4IDogMCkpCisgICB7CisgICAgIHNldF9lcnJubyAoRUJBREYpOwor
ICAgICByZXR1cm4gcmVzOworICAgfQorICAKKyAgIGlmICghd2luY2FwLmhh
c182NGJpdF9maWxlX2FjY2VzcyAoKSAmJgorICAgICAob2Zmc2V0IDwgTE9O
R19NSU4gfHwgb2Zmc2V0ID4gTE9OR19NQVgpKQorIC8vICAgIChvZmZzZXQg
IT0gMCkpIC8vIGZpeG1lIAorICAgeworICAgICBzZXRfZXJybm8gKEVJTlZB
TCk7CisgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgIHN3aXRjaCAo
d2hlbmNlKQorICAgeworICAgICBjYXNlIFNFRUtfU0VUOgorIAlpZiAoIWlz
X25vbmJsb2NraW5nICgpKQorIAkgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmpl
Y3QgKF9kYXRhX211dGV4LCBJTkZJTklURSkgIT0gV0FJVF9PQkpFQ1RfMCkK
KyAJCXNldF9lcnJubyAoRUJBREYpOworIAlndWFyZC0+aXNhY3RpdmUgPSAw
OworIAlpZiAoIWlzX25vbmJsb2NraW5nICgpKQorIAkgICAgUmVsZWFzZU11
dGV4IChfZGF0YV9tdXRleCk7CisgCXJlcyA9IDA7CisgCWJyZWFrOworICAg
ICBjYXNlIFNFRUtfRU5EOgorICAgICBjYXNlIFNFRUtfQ1VSOgorIAlzZXRf
ZXJybm8gKEVTUElQRSk7CisgCWJyZWFrOworICAgICBkZWZhdWx0OgorIAlz
ZXRfZXJybm8gKEVJTlZBTCk7CisgICB9CisgICAKKyAgIHJldHVybiByZXM7
CisgfQorIAorIGludAorIGZoYW5kbGVyX2ZpZm86OmlvY3RsICh1bnNpZ25l
ZCBpbnQgY21kLCB2b2lkICpwKQorIHsKKyAgIGludCBuOworIAorICAgc3dp
dGNoIChjbWQpCisgICAgIHsKKyAgICAgY2FzZSBGSU9OUkVBRDoKKyAjaWYg
ZGVmaW5lZCBGSU9OV1JJVEUKKyAgICAgY2FzZSBGSU9OV1JJVEU6CisgI2Vu
ZGlmCisgICAgICAgaWYgKGdldF9kZXZpY2UgKCkgIT0gRkhfRklGTykKKyAg
ICAgICB7CisgCSAgc2V0X2Vycm5vIChFSU5WQUwpOworIAkgIHJldHVybiAt
MTsKKyAgICAgICB9CisgICAgICAgaWYgKCFfZGF0YV9tdXRleCkKKyAgICAg
ICB7CisgCXNldF9lcnJubyAoRUJBREYpOworIAlyZXR1cm4gLTE7CisgICAg
ICAgfQorICAgICAgIGlmICghaXNfbm9uYmxvY2tpbmcgKCkpCisgCWlmIChX
YWl0Rm9yU2luZ2xlT2JqZWN0IChfZGF0YV9tdXRleCwgSU5GSU5JVEUpICE9
IFdBSVRfT0JKRUNUXzApCisgCXsKKyAJICBzZXRfZXJybm8gKEVCQURGKTsK
KyAJICByZXR1cm4gLTE7CisgCX0KKyAjaWYgZGVmaW5lZCBGSU9OV1JJVEUK
KyAgICAgICBpZiAoY21kID09IEZJT05XUklURSkKKyAgICAgICAgIG4gPSBG
SUZPX01BUF9TWiAtIGd1YXJkLT5mZF9zejsKKyAgICAgICBlbHNlCisgI2Vu
ZGlmCisgICAgICAgICBuID0gZ3VhcmQtPmZkX3N6OworICAgICAgIGlmICgh
aXNfbm9uYmxvY2tpbmcgKCkpCisgCVJlbGVhc2VNdXRleCAoX2RhdGFfbXV0
ZXgpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIHJl
dHVybiBmaGFuZGxlcl9iYXNlOjppb2N0bCAoY21kLCBwKTsKKyAgICAgfQor
IAorICAgKiAoaW50ICopIHAgPSBuOworICAgcmV0dXJuIDA7CisgfQorIAor
IHZvaWQKKyBmaGFuZGxlcl9maWZvOjpmaXh1cF9hZnRlcl9leGVjIChIQU5E
TEUgcGFyZW50KQorIHsKKyAgIGlmICghZ2V0X2Nsb3NlX29uX2V4ZWMgKCkp
CisgICAgIGZpeHVwX2FmdGVyX2ZvcmsgKHBhcmVudCk7CisgfQorIAorIGlu
dAorIGZoYW5kbGVyX2ZpZm86OmR1cCAoZmhhbmRsZXJfYmFzZSAqY2hpbGQp
CisgeworICBEV09SRCBwZnN5c19vZmZzZXQ7CisgCisgICBzeXNjYWxsX3By
aW50ZiAoImR1cCAoKSBzdGFydCIpOworIAorICAgZmhhbmRsZXJfZmlmbyAq
ZmhmID0gKGZoYW5kbGVyX2ZpZm8gKikgY2hpbGQ7CisgICBmaGYtPnNldF9p
b19oYW5kbGUgKE5VTEwpOworIAorICAgaWYgKGZpbGVtYXAgPT0gTlVMTCkK
KyAgICAgZmhmLT5maWxlbWFwID0gTlVMTDsKKyAgIGVsc2UgaWYgKCFEdXBs
aWNhdGVIYW5kbGUgKGhNYWluUHJvYywgZmlsZW1hcCwgaE1haW5Qcm9jLCAm
ZmhmLT5maWxlbWFwLCAwLCAxLAorIAkJCSAgICAgRFVQTElDQVRFX1NBTUVf
QUNDRVNTKSkKKyAgIHsKKyAgICAgc3lzY2FsbF9wcmludGYgKCJjb3VsZG4n
dCBkdXBsaWNhdGUgZmlsZW1hcCIpOworICAgICBnb3RvIG91dDE7CisgICB9
CisgICBQcm90ZWN0SGFuZGxlIChmaWxlbWFwKTsKKyAKKyAgIGlmIChndWFy
ZCA9PSBOVUxMKQorICAgICBmaGYtPmd1YXJkID0gTlVMTDsgCisgICBlbHNl
IGlmICghKGZoZi0+Z3VhcmQgPSAoY2xhc3MgZmlmb19ndWFyZCAqKSBNYXBW
aWV3T2ZGaWxlIChmaGYtPmZpbGVtYXAsCisgICAgIChpc3JlYWRlciAmJiAh
aXN3cml0ZXIpID8gRklMRV9NQVBfUkVBRCA6IEZJTEVfTUFQX1dSSVRFLAor
ICAgICAgMCwgMCwgMCkpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50ZiAo
ImNvdWxkbid0IGR1cGxpY2F0ZSBndWFyZCIpOworICAgICBnb3RvIG91dDE7
CisgICB9CisgCisgICBwZnN5c19vZmZzZXQgPSBnZXRwZnN5c19zeiAoKTsK
KyAgIGlmIChmZGF0YSA9PSBOVUxMKQorICAgICBmaGYtPmZkYXRhID0gTlVM
TDsKKyAgIGVsc2UgaWYgKCEoZmhmLT5mZGF0YSA9IE1hcFZpZXdPZkZpbGUg
KGZoZi0+ZmlsZW1hcCwKKyAgICAgKGlzcmVhZGVyICYmICFpc3dyaXRlcikg
PyBGSUxFX01BUF9SRUFEIDogRklMRV9NQVBfV1JJVEUsCisgICAgICAwLCBw
ZnN5c19vZmZzZXQsIEZJRk9fTUFQX1NaKSkpCisgICB7CisgICAgIHN5c2Nh
bGxfcHJpbnRmICgiY291bGRuJ3QgZHVwbGljYXRlIGZkYXRhLCAlZCIsR2V0
TGFzdEVycm9yICgpKTsKKyAgICAgZ290byBvdXQxOworICAgfQorIAorICAg
aWYgKF9kYXRhX211dGV4ID09IE5VTEwpCisgICAgIGZoZi0+X2RhdGFfbXV0
ZXggPSBOVUxMOworICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1h
aW5Qcm9jLCBfZGF0YV9tdXRleCwgaE1haW5Qcm9jLAorICAgICZmaGYtPl9k
YXRhX211dGV4LCAwLCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAg
eworICAgICBzeXNjYWxsX3ByaW50ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBf
ZGF0YV9tdXRleCIpOworICAgICBnb3RvIG91dDE7CisgICB9CisgICBQcm90
ZWN0SGFuZGxlIChfZGF0YV9tdXRleCk7CisgCisgICBpZiAoX2FjcXVpcmVf
cmVhZCA9PSBOVUxMKQorICAgICBmaGYtPl9hY3F1aXJlX3JlYWQgPSBOVUxM
OworICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBf
YWNxdWlyZV9yZWFkLCBoTWFpblByb2MsCisgICAgJmZoZi0+X2FjcXVpcmVf
cmVhZCwgMCwgMSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKKyAgIHsKKyAg
ICAgc3lzY2FsbF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNhdGUgX2FjcXVp
cmVfcmVhZCIpOworICAgICBnb3RvIG91dDE7CisgICB9CisgICBQcm90ZWN0
SGFuZGxlIChfYWNxdWlyZV9yZWFkKTsKKyAKKyAgIGlmIChfZG9uZV93cml0
ZSA9PSBOVUxMKQorICAgICBmaGYtPl9kb25lX3dyaXRlID0gTlVMTDsKKyAg
IGVsc2UgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKGhNYWluUHJvYywgX2RvbmVf
d3JpdGUsIGhNYWluUHJvYywKKyAgICAmZmhmLT5fZG9uZV93cml0ZSwgMCwg
MSwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKKyAgIHsKKyAgICAgc3lzY2Fs
bF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNhdGUgX2RvbmVfd3JpdGUiKTsK
KyAgICAgZ290byBvdXQxOworICAgfQorICAgUHJvdGVjdEhhbmRsZSAoX2Rv
bmVfd3JpdGUpOworIAorICAgaWYgKF9pbnB1dF9tdXRleCA9PSBOVUxMKQor
ICAgICBmaGYtPl9pbnB1dF9tdXRleCA9IE5VTEw7CisgICBlbHNlIGlmIChp
c3JlYWRlcikKKyAgIHsKKyAgICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKGhN
YWluUHJvYywgX2lucHV0X211dGV4LCBoTWFpblByb2MsCisgICAgICAmZmhm
LT5faW5wdXRfbXV0ZXgsIDAsIDEsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykp
CisgICAgIHsKKyAJc3lzY2FsbF9wcmludGYgKCJjb3VsZG4ndCBkdXBsaWNh
dGUgX2lucHV0X211dGV4Iik7CisgCWdvdG8gb3V0MTsKKyAgICAgfQorICAg
ICBQcm90ZWN0SGFuZGxlIChfaW5wdXRfbXV0ZXgpOworICAgfQorIAorICAg
aWYgKF9vdXRwdXRfbXV0ZXggPT0gTlVMTCkKKyAgICAgZmhmLT5fb3V0cHV0
X211dGV4ID0gTlVMTDsKKyAgIGVsc2UgaWYgKGlzd3JpdGVyKQorICAgewor
ICAgICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBfb3V0cHV0
X211dGV4LCBoTWFpblByb2MsCisgICAgICAmZmhmLT5fb3V0cHV0X211dGV4
LCAwLCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAgICB7CisgCXN5
c2NhbGxfcHJpbnRmICgiY291bGRuJ3QgZHVwbGljYXRlIF9vdXRwdXRfbXV0
ZXgiKTsKKyAJZ290byBvdXQxOworICAgICB9CisgICAgIFByb3RlY3RIYW5k
bGUgKF9vdXRwdXRfbXV0ZXgpOworICAgfQorIAorICAgaWYgKF9vcGVuX2Js
b2NrID09IE5VTEwpCisgICAgIGZoZi0+X29wZW5fYmxvY2sgPSBOVUxMOwor
ICAgZWxzZSBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoaE1haW5Qcm9jLCBfb3Bl
bl9ibG9jaywgaE1haW5Qcm9jLAorICAgICZmaGYtPl9vcGVuX2Jsb2NrLCAw
LCAxLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorICAgeworIAlzeXNjYWxs
X3ByaW50ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBfb3Blbl9ibG9jayIpOwor
IAlnb3RvIG91dDE7CisgICB9CisgCisgICBmaGYtPmlzcmVhZGVyID0gaXNy
ZWFkZXI7CisgICBmaGYtPmlzd3JpdGVyID0gaXN3cml0ZXI7CisgICBmaGYt
Pmd1YXJkLT5yZWFkZXJzICs9IGlzcmVhZGVyOworICAgZmhmLT5ndWFyZC0+
d3JpdGVycyArPSBpc3dyaXRlcjsKKyAgIGZoZi0+c2V0X2ZsYWdzIChnZXRf
ZmxhZ3MgKCksIGdldF93X2JpbmFyeSAoKSk7CisgICBmaGYtPnNldF9pb19o
YW5kbGUgKGZoZi0+ZmRhdGEpOworICAgc3lzY2FsbF9wcmludGYgKCJkdXAg
KCkgZW5kIik7CisgCisgICByZXR1cm4gMDsKKyAKKyAgIG91dDE6CisgCisg
ICAgIGlmIChmaGYtPl9kYXRhX211dGV4KSBGb3JjZUNsb3NlSGFuZGxlIChm
aGYtPl9kYXRhX211dGV4KTsKKyAgICAgaWYgKGZoZi0+X2FjcXVpcmVfcmVh
ZCkgRm9yY2VDbG9zZUhhbmRsZSAoZmhmLT5fYWNxdWlyZV9yZWFkKTsKKyAg
ICAgaWYgKGZoZi0+X2RvbmVfd3JpdGUpIEZvcmNlQ2xvc2VIYW5kbGUgKGZo
Zi0+X2RvbmVfd3JpdGUpOworICAgICBpZiAoZmhmLT5fb3Blbl9ibG9jaykg
Q2xvc2VIYW5kbGUgKGZoZi0+X29wZW5fYmxvY2spOworICAgICBpZiAoaXNy
ZWFkZXIgJiYgZmhmLT5faW5wdXRfbXV0ZXgpIEZvcmNlQ2xvc2VIYW5kbGUg
KGZoZi0+X2lucHV0X211dGV4KTsKKyAgICAgaWYgKGlzd3JpdGVyICYmIGZo
Zi0+X291dHB1dF9tdXRleCkgRm9yY2VDbG9zZUhhbmRsZSAoZmhmLT5fb3V0
cHV0X211dGV4KTsKKyAgICAgaWYgKGZoZi0+ZmRhdGEpIFVubWFwVmlld09m
RmlsZSAoZmhmLT5mZGF0YSk7CisgICAgIGlmIChmaGYtPmd1YXJkKSBVbm1h
cFZpZXdPZkZpbGUgKGZoZi0+Z3VhcmQpOworICAgICBpZiAoZmhmLT5maWxl
bWFwKSBGb3JjZUNsb3NlSGFuZGxlIChmaGYtPmZpbGVtYXApOworICAgICAK
KyAgICAgc2V0X2Vycm5vIChFQkFERik7CisgICAgIHJldHVybiAtMTsKKyB9
CisgCisgdm9pZAorIGZoYW5kbGVyX2ZpZm86OmZpeHVwX2FmdGVyX2Zvcmsg
KEhBTkRMRSBwYXJlbnQpCisgeworICBEV09SRCBwZnN5c19vZmZzZXQ7Cisg
CisgICBzeXNjYWxsX3ByaW50ZiAoImZpeHVwX2FmdGVyX2ZvcmsgKCkgc3Rh
cnQiKTsKKyAgIGZoYW5kbGVyX2Jhc2U6OmZpeHVwX2FmdGVyX2ZvcmsgKHBh
cmVudCk7CisgCisgICBpZiAoZ3VhcmQgPT0gTlVMTCkKKyAgICAgZ3VhcmQg
PSBOVUxMOyAKKyAgIGVsc2UgaWYgKCEoZ3VhcmQgPSAoY2xhc3MgZmlmb19n
dWFyZCAqKSBNYXBWaWV3T2ZGaWxlIChmaWxlbWFwLCAKKyAgICBGSUxFX01B
UF9XUklURSwgMCwgMCwgMCkpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50
ZiAoImNvdWxkbid0IGR1cGxpY2F0ZSBndWFyZCIpOworICAgICByZXR1cm47
CisgICB9CisgICAKKyAgIHBmc3lzX29mZnNldCA9IGdldHBmc3lzX3N6ICgp
OworICAgaWYgKGZkYXRhID09IE5VTEwpCisgICAgIGZkYXRhID0gTlVMTDsK
KyAgIGVsc2UgaWYgKCEoZmRhdGEgPSBNYXBWaWV3T2ZGaWxlIChmaWxlbWFw
LAorICAgICAgKGlzcmVhZGVyICYmICFpc3dyaXRlcikgPyBGSUxFX01BUF9S
RUFEIDogRklMRV9NQVBfV1JJVEUsCisgICAgICAgMCwgcGZzeXNfb2Zmc2V0
LCBGSUZPX01BUF9TWikpKQorICAgeworICAgICBzeXNjYWxsX3ByaW50ZiAo
ImNvdWxkbid0IGR1cGxpY2F0ZSBmZGF0YSIpOworICAgICByZXR1cm47Cisg
ICB9CisgCisgICBndWFyZC0+cmVhZGVycyArPSBpc3JlYWRlcjsKKyAgIGd1
YXJkLT53cml0ZXJzICs9IGlzd3JpdGVyOworIAorICAgc3lzY2FsbF9wcmlu
dGYgKCJmaXh1cF9hZnRlcl9mb3JrICgpIGVuZCIpOworIH0KKyAKKyB2b2lk
CisgZmhhbmRsZXJfZmlmbzo6c2V0X3VuaXhfcGF0aCAoY29uc3QgY2hhciAq
cGF0aCkKKyB7CisgICB1bml4X3BhdGggPSBwYXRoID8gY3N0cmR1cCAocGF0
aCkgOiBOVUxMOworIH0KKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcvd2luc3Vw
L2N5Z3dpbi9maGFuZGxlcl92aXJ0dWFsLmNjCVN1biBKYW4gMTEgMTg6MTc6
MjYgMjAwNAotLS0gY3lnd2luLTEuNS41LTEvd2luc3VwL2N5Z3dpbi9maGFu
ZGxlcl92aXJ0dWFsLmNjCU1vbiBEZWMgMjIgMTY6MDg6MDYgMjAwMwoqKioq
KioqKioqKioqKioKKioqIDIxNywyMjIgKioqKgotLS0gMjE3LDIyMyAtLS0t
CiAgICBzZXRfc3ltbGlua19wIChmYWxzZSk7CiAgICBzZXRfZXhlY2FibGVf
cCAobm90X2V4ZWN1dGFibGUpOwogICAgc2V0X3NvY2tldF9wIChmYWxzZSk7
CisgICBzZXRfZmlmb19wIChmYWxzZSk7CiAgCiAgICBzZXRfZmxhZ3MgKChm
bGFncyAmIH5PX1RFWFQpIHwgT19CSU5BUlkpOwogIAoqKiogY3lnd2luLTEu
NS41LTFfb3JpZy93aW5zdXAvY3lnd2luL3BhdGguY2MJU3VuIEphbiAxMSAx
ODoxNzoyNiAyMDA0Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2lu
L3BhdGguY2MJU2F0IEphbiAxMCAwMTozNDowMiAyMDA0CioqKioqKioqKioq
KioqKgoqKiogMzc3LDM4OCAqKioqCiAgICAgICAgc3ltX29wdCA9IGZsYWdz
ID0gc2VyaWFsID0gMDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K
ISAgIC8qIEZJWE1FOiBTYW1iYSBieSBkZWZhdWx0IHJldHVybnMgIk5URlMi
IGluIGZpbGUgc3lzdGVtIG5hbWUsIGJ1dAohICAgICogZG9lc24ndCBzdXBw
b3J0IEV4dGVuZGVkIEF0dHJpYnV0ZXMuIElmIHRoZXJlJ3Mgc29tZSBmYXN0
IHdheSB0bwogICAgICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBzYW1iYSBhbmQg
cmVhbCBudGZzLCBpdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQKICAgICAqIGhl
cmUuCiAgICAgKi8KISAgIHN5bV9vcHQgPSAoIWlzX3JlbW90ZV9kcml2ZSAm
JiBzdHJjbXAgKG5hbWUsICJOVEZTIikgPT0gMCkgPyBQQ19DSEVDS19FQSA6
IDA7CiAgCiAgICByZXR1cm4gdHJ1ZTsKICB9Ci0tLSAzNzcsMzg5IC0tLS0K
ICAgICAgICBzeW1fb3B0ID0gZmxhZ3MgPSBzZXJpYWwgPSAwOwogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgfQohICAgLyogRklYTUU6IFNhbWJhIGJ5
IGRlZmF1bHQgcmV0dXJucyAiTlRGUyIgb3IgIlNBTUJBIiBpbiBmaWxlIHN5
c3RlbSBuYW1lLAohICAgICogYnV0IGRvZXNuJ3Qgc3VwcG9ydCBFeHRlbmRl
ZCBBdHRyaWJ1dGVzLiBJZiB0aGVyZSdzIHNvbWUgZmFzdCB3YXkgdG8KICAg
ICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gc2FtYmEgYW5kIHJlYWwgbnRmcywg
aXQgc2hvdWxkIGJlIGltcGxlbWVudGVkCiAgICAgKiBoZXJlLgogICAgICov
CiEgICBzeW1fb3B0ID0gKCFpc19yZW1vdGVfZHJpdmUgJiYgKChzdHJjbXAg
KG5hbWUsICJOVEZTIikgPT0gMCkgfHwKISAgICAoc3RyY21wIChuYW1lLCAi
U0FNQkEiKSA9PSAwKSkpID8gUENfQ0hFQ0tfRUEgOiAwOwogIAogICAgcmV0
dXJuIHRydWU7CiAgfQoqKioqKioqKioqKioqKioKKioqIDgwNyw4MTcgKioq
KgogIAkvKiBvayAqLzsKICAgICAgICBlbHNlIGlmIChpc2RpciAoKSkKICAJ
c2V0X2V4ZWMgKDEpOwohICAgICAgIGVsc2UgaWYgKGlzc3ltbGluayAoKSB8
fCBpc3NvY2tldCAoKSkKICAJc2V0X2V4ZWMgKDApOwogICAgICB9CiAgICBp
ZiAoaXNzb2NrZXQgKCkpCiAgICAgIGRldm4gPSBGSF9TT0NLRVQ7CiAgCiAg
ICBpZiAoIShvcHQgJiBQQ19GVUxMKSkKICAgICAgewotLS0gODA4LDgyMCAt
LS0tCiAgCS8qIG9rICovOwogICAgICAgIGVsc2UgaWYgKGlzZGlyICgpKQog
IAlzZXRfZXhlYyAoMSk7CiEgICAgICAgZWxzZSBpZiAoaXNzeW1saW5rICgp
IHx8IGlzc29ja2V0ICgpIHx8IGlzZmlmbygpKQogIAlzZXRfZXhlYyAoMCk7
CiAgICAgIH0KICAgIGlmIChpc3NvY2tldCAoKSkKICAgICAgZGV2biA9IEZI
X1NPQ0tFVDsKKyAgIGlmIChpc2ZpZm8gKCkpCisgICAgIGRldm4gPSBGSF9G
SUZPOwogIAogICAgaWYgKCEob3B0ICYgUENfRlVMTCkpCiAgICAgIHsKKioq
KioqKioqKioqKioqCioqKiA4NzUsODgwICoqKioKLS0tIDg3OCw4ODQgLS0t
LQogICAgIlxcZGV2XFxwaXBlIiwKICAgICJcXGRldlxccGlwZXIiLAogICAg
IlxcZGV2XFxwaXBldyIsCisgICAiXFxkZXZcXGZpZm8iLAogICAgIlxcZGV2
XFxzb2NrZXQiLAogICAgIlxcZGV2XFx3aW5kb3dzIiwKICAKKioqKioqKioq
KioqKioqCioqKiA5NjEsOTY2ICoqKioKLS0tIDk2NSw5NzUgLS0tLQogICAg
ICBkZXZuID0gRkhfUElQRVI7CiAgICBlbHNlIGlmIChkZXZlcSAoInBpcGV3
IikpCiAgICAgIGRldm4gPSBGSF9QSVBFVzsKKyAgIGVsc2UgaWYgKGRldmVx
ICgiZmlmbyIpKQorICAgICB7CisgICAgICAgZGV2biA9IEZIX0ZJRk87Cisg
ICAgICAgdW5pdCA9IHRvbG93ZXIgKCpuYW1lKSAtICdhJzsKKyAgICAgfQog
ICAgZWxzZSBpZiAoZGV2ZXEgKCJ0Y3AiKSB8fCBkZXZlcSAoInVkcCIpIHx8
IGRldmVxICgic3RyZWFtc29ja2V0IikKICAJICAgfHwgZGV2ZXEgKCJkZ3Nv
Y2tldCIpKQogICAgICB7CioqKioqKioqKioqKioqKgoqKiogMTEyMSwxMTI2
ICoqKioKLS0tIDExMzAsMTEzNiAtLS0tCiAgICAgIHJldHVybiBmYWxzZTsK
ICAgIHN3aXRjaCAoZGV2bikKICAgICAgeworICAgICAgIGNhc2UgRkhfRklG
TzoKICAgICAgICBjYXNlIEZIX1NPQ0tFVDoKICAJY2hhciAqYzsKICAJc3Ry
Y3B5ICh3aW4zMl9wYXRoLCBzcmNfcGF0aCk7CioqKioqKioqKioqKioqKgoq
KiogMjk1MiwyOTU3ICoqKioKLS0tIDI5NjIsMjk3MCAtLS0tCiAgICBlbHNl
IGlmIChnb3QgPT0gc2l6ZW9mIChjb29raWVfYnVmKQogIAkgICAmJiBtZW1j
bXAgKGNvb2tpZV9idWYsIFNPQ0tFVF9DT09LSUUsIHNpemVvZiAoY29va2ll
X2J1ZikpID09IDApCiAgICAgICpwZmxhZ3MgfD0gUEFUSF9TT0NLRVQ7Cisg
ICBlbHNlIGlmIChnb3QgPT0gc2l6ZW9mIChjb29raWVfYnVmKQorIAkgICAm
JiBtZW1jbXAgKGNvb2tpZV9idWYsIEZJRk9fQ09PS0lFLCBzaXplb2YgKGNv
b2tpZV9idWYpKSA9PSAwKQorICAgICAqcGZsYWdzIHw9IFBBVEhfRklGTzsK
ICAgIGVsc2UKICAgICAgewogICAgICAgIC8qIE5vdCBhIHN5bWxpbmssIHNl
ZSBpZiBleGVjdXRhYmxlLiAgKi8KKioqIGN5Z3dpbi0xLjUuNS0xX29yaWcv
d2luc3VwL2N5Z3dpbi9wYXRoLmgJU3VuIEphbiAxMSAxODoxNzoyNiAyMDA0
Ci0tLSBjeWd3aW4tMS41LjUtMS93aW5zdXAvY3lnd2luL3BhdGguaAlUdWUg
RGVjIDIzIDEwOjM0OjQxIDIwMDMKKioqKioqKioqKioqKioqCioqKiA1NCw2
MCAqKioqCiAgICBQQVRIX0hBU19TWU1MSU5LUyA9IDB4MTAwMDAwMDAsCiAg
ICBQQVRIX0hBU0JVR0dZT1BFTiA9IDB4MjAwMDAwMDAsCiAgICBQQVRIX1NP
Q0tFVCA9ICAgICAgIDB4NDAwMDAwMDAsCiEgICBQQVRIX0hBU0FDTFMgPSAg
ICAgIDB4ODAwMDAwMDAKICB9OwogIAogIGNsYXNzIHN5bWxpbmtfaW5mbzsK
LS0tIDU0LDYxIC0tLS0KICAgIFBBVEhfSEFTX1NZTUxJTktTID0gMHgxMDAw
MDAwMCwKICAgIFBBVEhfSEFTQlVHR1lPUEVOID0gMHgyMDAwMDAwMCwKICAg
IFBBVEhfU09DS0VUID0gICAgICAgMHg0MDAwMDAwMCwKISAgIFBBVEhfSEFT
QUNMUyA9ICAgICAgMHg4MDAwMDAwMCwKISAgIFBBVEhfRklGTyA9ICAgICAg
ICAgMHgwODAwMDAwMAogIH07CiAgCiAgY2xhc3Mgc3ltbGlua19pbmZvOwoq
KioqKioqKioqKioqKioKKioqIDEwMiwxMDcgKioqKgotLS0gMTAzLDEwOSAt
LS0tCiAgICBpbnQgaXNzeW1saW5rICgpIGNvbnN0IHtyZXR1cm4gcGF0aF9m
bGFncyAmIFBBVEhfU1lNTElOSzt9CiAgICBpbnQgaXNfbG5rX3N5bWxpbmsg
KCkgY29uc3Qge3JldHVybiBwYXRoX2ZsYWdzICYgUEFUSF9MTks7fQogICAg
aW50IGlzc29ja2V0ICgpIGNvbnN0IHtyZXR1cm4gcGF0aF9mbGFncyAmIFBB
VEhfU09DS0VUO30KKyAgIGludCBpc2ZpZm8gKCkgY29uc3Qge3JldHVybiBw
YXRoX2ZsYWdzICYgUEFUSF9GSUZPO30KICAgIGludCBpc2N5Z2V4ZWMgKCkg
Y29uc3Qge3JldHVybiBwYXRoX2ZsYWdzICYgUEFUSF9DWUdXSU5fRVhFQzt9
CiAgICBib29sIGV4aXN0cyAoKSBjb25zdCB7cmV0dXJuIGZpbGVhdHRyICE9
IElOVkFMSURfRklMRV9BVFRSSUJVVEVTO30KICAgIGJvb2wgaGFzX2F0dHJp
YnV0ZSAoRFdPUkQgeCkgY29uc3Qge3JldHVybiBleGlzdHMgKCkgJiYgKGZp
bGVhdHRyICYgeCk7fQoqKioqKioqKioqKioqKioKKioqIDE3OCwxODMgKioq
KgotLS0gMTgwLDE4OCAtLS0tCiAgLyogU29ja2V0IG1hcmtlciAqLwogICNk
ZWZpbmUgU09DS0VUX0NPT0tJRSAgIiE8c29ja2V0ID4iCiAgCisgLyogTmFt
ZWQgcGlwZSBtYXJrZXIgKi8KKyAjZGVmaW5lIEZJRk9fQ09PS0lFICAgICIh
PGZpZm8gICA+IgorIAogIC8qIFRoZSBzaXplb2YgaGVhZGVyIHdyaXR0ZW4g
dG8gYSBzaG9ydGN1dCBieSBDeWd3aW4gb3IgVS9XSU4uICovCiAgI2RlZmlu
ZSBTSE9SVENVVF9IRFJfU0laRSAgICAgICA3NgogIAoqKiogY3lnd2luLTEu
NS41LTFfb3JpZy93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwlTdW4gSmFuIDEx
IDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1cC9jeWd3
aW4vc2VsZWN0LmNjCVN1biBKYW4gMTEgMTc6NTQ6MTQgMjAwNAoqKioqKioq
KioqKioqKioKKioqIDY0MCw2NDUgKioqKgotLS0gNjQwLDgzNSAtLS0tCiAg
fQogIAogIHN0YXRpYyBpbnQKKyBwZWVrX2ZpZm8gKHNlbGVjdF9yZWNvcmQg
KnMsIGJvb2wgZnJvbV9zZWxlY3QpCisgeworICAgaW50IG4gPSAwLCBnb3Rv
bmUgPSAwLCB3c3QgPSBXQUlUX1RJTUVPVVQ7CisgCisgICBmaGFuZGxlcl9m
aWZvICpmaCA9IChmaGFuZGxlcl9maWZvICopIHMtPmZoOworIAorICAgSEFO
RExFIGg7CisgICBzZXRfaGFuZGxlX29yX3JldHVybl9pZl9ub3Rfb3BlbiAo
aCwgcyk7CisgCisgICBmaWZvX2d1YXJkICpndWFyZCA9IChjbGFzcyBmaWZv
X2d1YXJkICopIGZoLT5nZXRfZ3VhcmRvYmplY3QgKCk7CisgICBIQU5ETEUg
Z3VhcmRfbXV0ZXggPSBmcm9tX3NlbGVjdCA/IGZoLT5nZXRfZ3VhcmQgKCkg
OiBOVUxMOworIAorICAgaWYgKCFzLT5yZWFkX3NlbGVjdGVkKQorICAgewor
ICAgICBpZiAoIXMtPmV4Y2VwdF9zZWxlY3RlZCkKKyAgICAgICBnb3RvIG91
dDsKKyAgIH0gZWxzZSBpZiAocy0+cmVhZF9yZWFkeSkKKyAgIHsKKyAgICAg
Z290b25lID0gMTsKKyAgICAgZ290byBvdXQ7CisgICB9CisgCisgICBpZiAo
cy0+d3JpdGVfcmVhZHkpCisgICAgICAgOworICAgZWxzZSBpZiAoIWd1YXJk
X211dGV4IHx8ICFndWFyZCkKKyAgICAgICA7CisgICBlbHNlIGlmICgoKHdz
dCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGd1YXJkX211dGV4LCAwKSkgIT0g
V0FJVF9PQkpFQ1RfMCkgJiYKKyAgICAod3N0ICE9IFdBSVRfQUJBTkRPTkVE
KSkKKyAgIHsKKyAgICAgc2VsZWN0X3ByaW50ZiAoIiVzLCBjb3VsZG4ndCBn
ZXQgRklGTyBtdXRleCAlcCwgJUUiLCBmaC0+Z2V0X25hbWUgKCksCisgCQkg
ICAgIGd1YXJkX211dGV4KTsKKyAgIH0gZWxzZQorICAgeworICAgICBuID0g
Z3VhcmQtPmZkX3N6OworICAgICBpZiAoKG4gPiAwKSAmJiBzLT5yZWFkX3Nl
bGVjdGVkKQorICAgICB7CisgCXNlbGVjdF9wcmludGYgKCIlcywgcmVhZHkg
Zm9yIHJlYWQgJWQgYnl0ZXMiLCBmaC0+Z2V0X25hbWUgKCksIG4pOworIAln
b3RvbmUgKz0gcy0+cmVhZF9yZWFkeSA9IHRydWU7CisgICAgIH0KKyAgIH0K
KyAgICAgCisgICBpZiAoIWdvdG9uZSAmJiAoIWd1YXJkLT5yZWFkZXJzIHx8
ICFndWFyZC0+d3JpdGVycykpIAorICAgeworICAgICBpZiAocy0+cmVhZF9z
ZWxlY3RlZCkKKyAJZ290b25lICs9IHMtPnJlYWRfcmVhZHkgPSB0cnVlOwor
ICAgICBpZiAocy0+ZXhjZXB0X3NlbGVjdGVkKQorIAlnb3RvbmUgPSBzLT5l
eGNlcHRfcmVhZHkgPSB0cnVlOworICAgfQorIAorICAgaWYgKCh3c3QgPT0g
V0FJVF9PQkpFQ1RfMCkgfHwgKHdzdCA9PSBXQUlUX0FCQU5ET05FRCkpIAor
ICAgICBSZWxlYXNlTXV0ZXggKGd1YXJkX211dGV4KTsKKyAKKyBvdXQ6Cisg
ICByZXR1cm4gZ290b25lIHx8IHMtPndyaXRlX3JlYWR5OworIH0KKyAKKyBz
dGF0aWMgaW50IHN0YXJ0X3RocmVhZF9maWZvIChzZWxlY3RfcmVjb3JkICpt
ZSwgc2VsZWN0X3N0dWZmICpzdHVmZik7CisgCisgc3RydWN0IGZpZm9pbmYK
KyAgIHsKKyAgICAgY3lndGhyZWFkICp0aHJlYWQ7CisgICAgIEJPT0wgc3Rv
cF90aHJlYWRfZmlmbzsKKyAgICAgc2VsZWN0X3JlY29yZCAqc3RhcnQ7Cisg
ICB9OworIAorIHN0YXRpYyBEV09SRCBXSU5BUEkKKyB0aHJlYWRfZmlmbyAo
dm9pZCAqYXJnKQorIHsKKyAgIGZpZm9pbmYgKnBpID0gKGZpZm9pbmYgKikg
YXJnOworICAgQk9PTCBnb3RvbmUgPSBGQUxTRTsKKyAKKyAgIGZvciAoOzsp
CisgICAgIHsKKyAgICAgICBzZWxlY3RfcmVjb3JkICpzID0gcGktPnN0YXJ0
OworICAgICAgIHdoaWxlICgocyA9IHMtPm5leHQpKQorIAlpZiAocy0+c3Rh
cnR1cCA9PSBzdGFydF90aHJlYWRfZmlmbykKKyAJICB7CisgCSAgICBpZiAo
cGVla19maWZvIChzLCB0cnVlKSkKKyAJICAgICAgZ290b25lID0gdHJ1ZTsK
KyAJICAgIGlmIChwaS0+c3RvcF90aHJlYWRfZmlmbykKKyAJICAgICAgewor
IAkJc2VsZWN0X3ByaW50ZiAoInN0b3BwaW5nIik7CisgCQlnb3RvIG91dDsK
KyAJICAgICAgfQorIAkgIH0KKyAgICAgICAvKiBQYXJhbm9pZCBjaGVjayAq
LworICAgICAgIGlmIChwaS0+c3RvcF90aHJlYWRfZmlmbykKKyAJeworIAkg
IHNlbGVjdF9wcmludGYgKCJzdG9wcGluZyBmcm9tIG91dGVyIGxvb3AiKTsK
KyAJICBicmVhazsKKyAJfQorICAgICAgIGlmIChnb3RvbmUpCisgCWJyZWFr
OworICAgICAgIFNsZWVwICgxMCk7CisgICAgIH0KKyAKKyBvdXQ6CisgICBy
ZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIGludAorIHN0YXJ0X3RocmVhZF9m
aWZvIChzZWxlY3RfcmVjb3JkICptZSwgc2VsZWN0X3N0dWZmICpzdHVmZikK
KyB7CisgICBpZiAoc3R1ZmYtPmRldmljZV9zcGVjaWZpY1tGSERFVk4gKEZI
X0ZJRk8pXSkKKyAgICAgeworICAgICAgIG1lLT5oID0gKigoZmlmb2luZiAq
KSBzdHVmZi0+ZGV2aWNlX3NwZWNpZmljW0ZIREVWTiAoRkhfRklGTyldKS0+
dGhyZWFkOworICAgICAgIHJldHVybiAxOworICAgICB9CisgICBmaWZvaW5m
ICpwaSA9IG5ldyBmaWZvaW5mOworICAgcGktPnN0YXJ0ID0gJnN0dWZmLT5z
dGFydDsKKyAgIHBpLT5zdG9wX3RocmVhZF9maWZvID0gRkFMU0U7CisgICBw
aS0+dGhyZWFkID0gbmV3IGN5Z3RocmVhZCAodGhyZWFkX2ZpZm8sIChMUFZP
SUQpIHBpLCAic2VsZWN0X2ZpZm8iKTsKKyAgIG1lLT5oID0gKnBpLT50aHJl
YWQ7CisgICBpZiAoIW1lLT5oKQorICAgICByZXR1cm4gMDsKKyAgIHN0dWZm
LT5kZXZpY2Vfc3BlY2lmaWNbRkhERVZOIChGSF9GSUZPKV0gPSAodm9pZCAq
KSBwaTsKKyAgIHJldHVybiAxOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGZp
Zm9fY2xlYW51cCAoc2VsZWN0X3JlY29yZCAqLCBzZWxlY3Rfc3R1ZmYgKnN0
dWZmKQorIHsKKyAgIGZpZm9pbmYgKnBpID0gKGZpZm9pbmYgKikgc3R1ZmYt
PmRldmljZV9zcGVjaWZpY1tGSERFVk4gKEZIX0ZJRk8pXTsKKyAgIGlmIChw
aSAmJiBwaS0+dGhyZWFkKQorICAgICB7CisgICAgICAgcGktPnN0b3BfdGhy
ZWFkX2ZpZm8gPSB0cnVlOworICAgICAgIHBpLT50aHJlYWQtPmRldGFjaCAo
KTsKKyAgICAgICBkZWxldGUgcGk7CisgICAgICAgc3R1ZmYtPmRldmljZV9z
cGVjaWZpY1tGSERFVk4gKEZIX0ZJRk8pXSA9IE5VTEw7CisgICAgIH0KKyB9
CisgCisgaW50CisgZmhhbmRsZXJfZmlmbzo6cmVhZHlfZm9yX3JlYWQgKGlu
dCBmZCwgRFdPUkQgaG93bG9uZykKKyB7CisgICBpbnQgcmVzOworICAgaWYg
KGhvd2xvbmcpCisgICAgIHJlcyA9IHRydWU7CisgICBlbHNlCisgICAgIHJl
cyA9IGZoYW5kbGVyX2Jhc2U6OnJlYWR5X2Zvcl9yZWFkIChmZCwgaG93bG9u
Zyk7CisgCisgICBpZiAocmVzKQorICAgICBnZXRfZ3VhcmQgKCk7CisgICBy
ZXR1cm4gcmVzOworIH0KKyAKKyBzZWxlY3RfcmVjb3JkICoKKyBmaGFuZGxl
cl9maWZvOjpzZWxlY3RfcmVhZCAoc2VsZWN0X3JlY29yZCAqcykKKyB7Cisg
ICBpZiAoIXMpCisgICAgIHMgPSBuZXcgc2VsZWN0X3JlY29yZDsKKyAgIHMt
PnN0YXJ0dXAgPSBzdGFydF90aHJlYWRfZmlmbzsKKyAgIHMtPnBlZWsgPSBw
ZWVrX2ZpZm87CisgICBzLT52ZXJpZnkgPSB2ZXJpZnlfb2s7CisgICBzLT5y
ZWFkX3NlbGVjdGVkID0gdHJ1ZTsKKyAgIHMtPnJlYWRfcmVhZHkgPSBmYWxz
ZTsKKyAgIHMtPmNsZWFudXAgPSBmaWZvX2NsZWFudXA7CisgICByZXR1cm4g
czsKKyB9CisgCisgc2VsZWN0X3JlY29yZCAqCisgZmhhbmRsZXJfZmlmbzo6
c2VsZWN0X3dyaXRlIChzZWxlY3RfcmVjb3JkICpzKQorIHsKKyAgIGlmICgh
cykKKyAgICAgeworICAgICAgIHMgPSBuZXcgc2VsZWN0X3JlY29yZDsKKyAg
ICAgICBzLT5zdGFydHVwID0gbm9fc3RhcnR1cDsKKyAgICAgICBzLT52ZXJp
ZnkgPSBub192ZXJpZnk7CisgICAgIH0KKyAgIHMtPnBlZWsgPSBwZWVrX2Zp
Zm87CisgICBzLT53cml0ZV9zZWxlY3RlZCA9IHRydWU7CisgICBzLT53cml0
ZV9yZWFkeSA9IHRydWU7CisgICByZXR1cm4gczsKKyB9CisgCisgc2VsZWN0
X3JlY29yZCAqCisgZmhhbmRsZXJfZmlmbzo6c2VsZWN0X2V4Y2VwdCAoc2Vs
ZWN0X3JlY29yZCAqcykKKyB7CisgICBpZiAoIXMpCisgICAgICAgcyA9IG5l
dyBzZWxlY3RfcmVjb3JkOworICAgcy0+c3RhcnR1cCA9IHN0YXJ0X3RocmVh
ZF9maWZvOworICAgcy0+cGVlayA9IHBlZWtfZmlmbzsKKyAgIHMtPnZlcmlm
eSA9IHZlcmlmeV9vazsKKyAgIHMtPmNsZWFudXAgPSBmaWZvX2NsZWFudXA7
CisgICBzLT5leGNlcHRfc2VsZWN0ZWQgPSB0cnVlOworICAgcy0+ZXhjZXB0
X3JlYWR5ID0gZmFsc2U7CisgICByZXR1cm4gczsKKyB9CisgCisgc3RhdGlj
IGludAogIHBlZWtfY29uc29sZSAoc2VsZWN0X3JlY29yZCAqbWUsIGJvb2wp
CiAgewogICAgZXh0ZXJuIGNvbnN0IGNoYXIgKiBnZXRfbm9uYXNjaWlfa2V5
IChJTlBVVF9SRUNPUkQmIGlucHV0X3JlYywgY2hhciAqKTsKKioqIGN5Z3dp
bi0xLjUuNS0xX29yaWcvd2luc3VwL2N5Z3dpbi9zeXNjYWxscy5jYwlTdW4g
SmFuIDExIDE4OjE3OjI2IDIwMDQKLS0tIGN5Z3dpbi0xLjUuNS0xL3dpbnN1
cC9jeWd3aW4vc3lzY2FsbHMuY2MJU3VuIEphbiAxMSAxNzo1NzozMyAyMDA0
CioqKioqKioqKioqKioqKgoqKiogODE3LDgyMyAqKioqCiAgCiAgICAgICAg
LyogRklYTUU6IFRoaXMgbWFrZXMgY2hvd24gb24gYSBkZXZpY2Ugc3VjY2Vl
ZCBhbHdheXMuICBTb21lZGF5IHdlJ2xsIHdhbnQKICAJIHRvIGFjdHVhbGx5
IGFsbG93IGNob3duIHRvIHdvcmsgcHJvcGVybHkgb24gZGV2aWNlcy4gKi8K
ISAgICAgICBpZiAod2luMzJfcGF0aC5pc19kZXZpY2UgKCkgJiYgIXdpbjMy
X3BhdGguaXNzb2NrZXQgKCkpCiAgCXsKICAJICByZXMgPSAwOwogIAkgIGdv
dG8gZG9uZTsKLS0tIDgxNyw4MjMgLS0tLQogIAogICAgICAgIC8qIEZJWE1F
OiBUaGlzIG1ha2VzIGNob3duIG9uIGEgZGV2aWNlIHN1Y2NlZWQgYWx3YXlz
LiAgU29tZWRheSB3ZSdsbCB3YW50CiAgCSB0byBhY3R1YWxseSBhbGxvdyBj
aG93biB0byB3b3JrIHByb3Blcmx5IG9uIGRldmljZXMuICovCiEgICAgICAg
aWYgKHdpbjMyX3BhdGguaXNfZGV2aWNlICgpICYmICF3aW4zMl9wYXRoLmlz
c29ja2V0ICgpICYmICF3aW4zMl9wYXRoLmlzZmlmbygpKQogIAl7CiAgCSAg
cmVzID0gMDsKICAJICBnb3RvIGRvbmU7CioqKioqKioqKioqKioqKgoqKiog
OTM1LDk0MSAqKioqCiAgCiAgICAvKiBGSVhNRTogVGhpcyBtYWtlcyBjaG1v
ZCBvbiBhIGRldmljZSBzdWNjZWVkIGFsd2F5cy4gIFNvbWVkYXkgd2UnbGwg
d2FudAogICAgICAgdG8gYWN0dWFsbHkgYWxsb3cgY2htb2QgdG8gd29yayBw
cm9wZXJseSBvbiBkZXZpY2VzLiAqLwohICAgaWYgKHdpbjMyX3BhdGguaXNf
ZGV2aWNlICgpICYmICF3aW4zMl9wYXRoLmlzc29ja2V0ICgpKQogICAgICB7
CiAgICAgICAgcmVzID0gMDsKICAgICAgICBnb3RvIGRvbmU7Ci0tLSA5MzUs
OTQxIC0tLS0KICAKICAgIC8qIEZJWE1FOiBUaGlzIG1ha2VzIGNobW9kIG9u
IGEgZGV2aWNlIHN1Y2NlZWQgYWx3YXlzLiAgU29tZWRheSB3ZSdsbCB3YW50
CiAgICAgICB0byBhY3R1YWxseSBhbGxvdyBjaG1vZCB0byB3b3JrIHByb3Bl
cmx5IG9uIGRldmljZXMuICovCiEgICBpZiAod2luMzJfcGF0aC5pc19kZXZp
Y2UgKCkgJiYgIXdpbjMyX3BhdGguaXNzb2NrZXQgKCkgJiYgIXdpbjMyX3Bh
dGguaXNmaWZvKCkpCiAgICAgIHsKICAgICAgICByZXMgPSAwOwogICAgICAg
IGdvdG8gZG9uZTsKKioqKioqKioqKioqKioqCioqKiA5NjIsOTY4ICoqKioK
ICAgICAgICBlbHNlCiAgCShEV09SRCkgd2luMzJfcGF0aCB8PSBGSUxFX0FU
VFJJQlVURV9SRUFET05MWTsKICAKISAgICAgICBpZiAoIXdpbjMyX3BhdGgu
aXNfbG5rX3N5bWxpbmsgKCkgJiYgU19JU0xOSyAobW9kZSkgfHwgU19JU1NP
Q0sgKG1vZGUpKQogIAkoRFdPUkQpIHdpbjMyX3BhdGggfD0gRklMRV9BVFRS
SUJVVEVfU1lTVEVNOwogIAogICAgICAgIGlmICghU2V0RmlsZUF0dHJpYnV0
ZXMgKHdpbjMyX3BhdGgsIHdpbjMyX3BhdGgpKQotLS0gOTYyLDk2OCAtLS0t
CiAgICAgICAgZWxzZQogIAkoRFdPUkQpIHdpbjMyX3BhdGggfD0gRklMRV9B
VFRSSUJVVEVfUkVBRE9OTFk7CiAgCiEgICAgICAgaWYgKCF3aW4zMl9wYXRo
LmlzX2xua19zeW1saW5rICgpICYmIFNfSVNMTksgKG1vZGUpIHx8IFNfSVNT
T0NLIChtb2RlKSB8fCBTX0lTRklGTyhtb2RlKSkKICAJKERXT1JEKSB3aW4z
Ml9wYXRoIHw9IEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKICAKICAgICAgICBp
ZiAoIVNldEZpbGVBdHRyaWJ1dGVzICh3aW4zMl9wYXRoLCB3aW4zMl9wYXRo
KSkKKioqKioqKioqKioqKioqCioqKiAxMDM2LDEwNDIgKioqKgogICAgICAg
IHBhdGhfY29udiBwYyAoY2ZkLT5nZXRfbmFtZSAoKSwgUENfU1lNX05PRk9M
TE9XKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwgc2l6ZW9mIChzdHJ1Y3Qg
X19zdGF0NjQpKTsKICAgICAgICByZXMgPSBjZmQtPmZzdGF0IChidWYsICZw
Yyk7CiEgICAgICAgaWYgKCFyZXMgJiYgY2ZkLT5nZXRfZGV2aWNlICgpICE9
IEZIX1NPQ0tFVCkKICAJewogIAkgIGlmICghYnVmLT5zdF9pbm8pCiAgCSAg
ICBidWYtPnN0X2lubyA9IGhhc2hfcGF0aF9uYW1lICgwLCBjZmQtPmdldF93
aW4zMl9uYW1lICgpKTsKLS0tIDEwMzYsMTA0MiAtLS0tCiAgICAgICAgcGF0
aF9jb252IHBjIChjZmQtPmdldF9uYW1lICgpLCBQQ19TWU1fTk9GT0xMT1cp
OwogICAgICAgIG1lbXNldCAoYnVmLCAwLCBzaXplb2YgKHN0cnVjdCBfX3N0
YXQ2NCkpOwogICAgICAgIHJlcyA9IGNmZC0+ZnN0YXQgKGJ1ZiwgJnBjKTsK
ISAgICAgICBpZiAoIXJlcyAmJiBjZmQtPmdldF9kZXZpY2UgKCkgIT0gRkhf
U09DS0VUICYmIGNmZC0+Z2V0X2RldmljZSAoKSAhPSBGSF9GSUZPKQogIAl7
CiAgCSAgaWYgKCFidWYtPnN0X2lubykKICAJICAgIGJ1Zi0+c3RfaW5vID0g
aGFzaF9wYXRoX25hbWUgKDAsIGNmZC0+Z2V0X3dpbjMyX25hbWUgKCkpOwoq
KioqKioqKioqKioqKioKKioqIDExNDgsMTE1NCAqKioqCiAgCQkgICAgcGMs
IChEV09SRCkgcmVhbF9wYXRoKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwg
c2l6ZW9mICgqYnVmKSk7CiAgICAgICAgcmVzID0gZmgtPmZzdGF0IChidWYs
IHBjKTsKISAgICAgICBpZiAoIXJlcyAmJiBmaC0+Z2V0X2RldmljZSAoKSAh
PSBGSF9TT0NLRVQpCiAgCXsKICAJICBpZiAoIWJ1Zi0+c3RfaW5vKQogIAkg
ICAgYnVmLT5zdF9pbm8gPSBoYXNoX3BhdGhfbmFtZSAoMCwgZmgtPmdldF93
aW4zMl9uYW1lICgpKTsKLS0tIDExNDgsMTE1NCAtLS0tCiAgCQkgICAgcGMs
IChEV09SRCkgcmVhbF9wYXRoKTsKICAgICAgICBtZW1zZXQgKGJ1ZiwgMCwg
c2l6ZW9mICgqYnVmKSk7CiAgICAgICAgcmVzID0gZmgtPmZzdGF0IChidWYs
IHBjKTsKISAgICAgICBpZiAoIXJlcyAmJiBmaC0+Z2V0X2RldmljZSAoKSAh
PSBGSF9TT0NLRVQgJiYgZmgtPmdldF9kZXZpY2UgKCkgIT0gRkhfRklGTykK
ICAJewogIAkgIGlmICghYnVmLT5zdF9pbm8pCiAgCSAgICBidWYtPnN0X2lu
byA9IGhhc2hfcGF0aF9uYW1lICgwLCBmaC0+Z2V0X3dpbjMyX25hbWUgKCkp
OwoqKioqKioqKioqKioqKioKKioqIDIwMjUsMjAzNyAqKioqCiAgICByZXR1
cm4gbWtub2QzMiAoX3BhdGgsIG1vZGUsIChfX2RldjMyX3QpIGRldik7CiAg
fQogIAogIGV4dGVybiAiQyIgaW50CiAgbWtmaWZvIChjb25zdCBjaGFyICpf
cGF0aCwgbW9kZV90IG1vZGUpCiAgewohICAgc2V0X2Vycm5vIChFTk9TWVMp
OwohICAgcmV0dXJuIC0xOwogIH0KICAKICAvKiBzZXRldWlkOiBzdGFuZGFy
ZHM/ICovCiAgZXh0ZXJuICJDIiBpbnQKICBzZXRldWlkMzIgKF9fdWlkMzJf
dCB1aWQpCi0tLSAyMDI1LDIxMTcgLS0tLQogICAgcmV0dXJuIG1rbm9kMzIg
KF9wYXRoLCBtb2RlLCAoX19kZXYzMl90KSBkZXYpOwogIH0KICAKKyBleHRl
cm4gIkMiIGludCBfbWtub2QgKGNvbnN0IGNoYXIgKiwgbW9kZV90LCAuLi4p
CisgICBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCJta25vZCIpKSk7CisgCiAg
ZXh0ZXJuICJDIiBpbnQKICBta2ZpZm8gKGNvbnN0IGNoYXIgKl9wYXRoLCBt
b2RlX3QgbW9kZSkKICB7CiEgICBpbnQgcmVzID0gLTE7CiEgICBpbnQgc2hh
cmVkOwohICAgc2lnZnJhbWUgdGhpc2ZyYW1lIChtYWludGhyZWFkKTsKISAK
ISAgIHN5c2NhbGxfcHJpbnRmICgibWtmaWZvICglcywgJXUpIiwgX3BhdGgs
IG1vZGUpOwohICAgCiEgICAvKiBjb25zaWRlcmluZyBHTE9CQUxcIGZvciBO
VCBmYW1pbHkgKi8KISAgIGlmIChzdHJsZW4gKF9wYXRoKSA+PSBNQVhfUEFU
SCAtICh3aW5jYXAuaGFzX3Rlcm1pbmFsX3NlcnZpY2VzICgpID8gNyA6IDAp
KQohICAgewohICAgICBzZXRfZXJybm8gKEVOQU1FVE9PTE9ORyk7CiEgICAg
IGdvdG8gb3V0OwohICAgfQohIAohICAgaWYgKCFjaGVja19udWxsX2VtcHR5
X3N0cl9lcnJubyAoX3BhdGgpKQohICAgICB7CiEgICAgICAgcGF0aF9jb252
IHBjIChfcGF0aCwgUENfU1lNX0ZPTExPVyk7CiEgICAgICAgaWYgKHBjLmVy
cm9yKQohICAgICAgIHsKISAJICBzZXRfZXJybm8gKEVOT0VOVCk7CiEgCSAg
Z290byBvdXQ7CiEgICAgICAgfQohICAgICAgIGlmICghd3JpdGFibGVfZGly
ZWN0b3J5IChwYykpCiEgICAgICAgewohIAlzZXRfZXJybm8gKEVBQ0NFUyk7
CiEgCWdvdG8gb3V0OwohICAgICAgIH0KISAgICAgICBpZiAocGMuZXhpc3Rz
ICgpKQohICAgICAgIHsKISAJICBzZXRfZXJybm8gKEVFWElTVCk7CiEgCSAg
Z290byBvdXQ7CiEgICAgICAgfQohICAgICAgIG1vZGVfdCBmaW5tb2RlID0g
bW9kZSAmIH5jeWdoZWFwLT51bWFzazsKISAgICAgICBEV09SRCBhdHRyID0g
RklMRV9BVFRSSUJVVEVfU1lTVEVNOwohICAgICAgIGlmICghKGZpbm1vZGUg
JiAoU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIKSkpCiEgCWF0dHIgfD0g
RklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CiEgICAgICAgCiEgICAgICAgc2hh
cmVkID0gd2luY2FwLnNoYXJlZCAoKTsKISAKISAgICAgICBTRUNVUklUWV9B
VFRSSUJVVEVTIHNhID0gc2VjX25vbmU7CiEgICAgICAgaWYgKGFsbG93X250
c2VjICYmIHBjLmhhc19hY2xzICgpKQohIAlzZXRfc2VjdXJpdHlfYXR0cmli
dXRlIChmaW5tb2RlLCAmc2EsIGFsbG9jYSAoNDA5NiksIDQwOTYpOwohICAg
ICAgIEhBTkRMRSBmaCA9IENyZWF0ZUZpbGUgKHBjLCBHRU5FUklDX1dSSVRF
LCBzaGFyZWQsCiEgICAgICAgICZzYSwgQ1JFQVRFX05FVywgYXR0ciwgMCk7
CiEgICAgICAgaWYgKGZoID09IElOVkFMSURfSEFORExFX1ZBTFVFKQohIAl7
CiEgCSAgaWYgKEdldExhc3RFcnJvciAoKSA9PSBFUlJPUl9BTFJFQURZX0VY
SVNUUykKISAJICAgIHNldF9lcnJubyAoRUVYSVNUKTsKISAJICBlbHNlCiEg
CSAgICBfX3NldGVycm5vICgpOwohIAl9CiEgCiEgICAgICAgY2hhciBidWZb
c2l6ZW9mIChGSUZPX0NPT0tJRSkgKyAoTUFYX1BBVEgpICsgMV07CiEgICAg
ICAgX19zbWFsbF9zcHJpbnRmIChidWYsICIlcyVzIiwgRklGT19DT09LSUUs
IHBjLmdldF93aW4zMiAoKSk7CiEgICAgICAgRFdPUkQgYmxlbiA9IHN0cmxl
biAoYnVmKSArIDE7CiEgICAgICAgRFdPUkQgcmJsZW4gPSAwOwohIAohICAg
ICAgIGlmICghV3JpdGVGaWxlIChmaCwgYnVmLCBibGVuLCAmcmJsZW4sIDAp
KQohIAl7CiEgCSAgX19zZXRlcnJubyAoKTsKISAJICBDbG9zZUhhbmRsZSAo
ZmgpOwohIAkgIERlbGV0ZUZpbGUgKHBjKTsKISAJfQohICAgICAgIGVsc2UK
ISAJewohIAkgIENsb3NlSGFuZGxlIChmaCk7CiEgCSAgaWYgKHJibGVuIDwg
YmxlbikgewohIAkgICAgc2V0X2Vycm5vIChFTk9TUEMpOwohIAkgICAgZ290
byBvdXQ7CiEgCSAgfQohIAkgIHJlcyA9IDA7CiEgCX0KISAgICAgfQohIAoh
ICBvdXQ6CiEgICBzeXNjYWxsX3ByaW50ZiAoIiVkID0gbWtmaWZvICglcywg
JXUpIiwgcmVzLCBfcGF0aCwgbW9kZSk7CiEgICByZXR1cm4gcmVzOwogIH0K
ICAKKyBleHRlcm4gIkMiIGludCBfbWtmaWZvIChjb25zdCBjaGFyICosIG1v
ZGVfdCwgLi4uKQorICAgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgibWtmaWZv
IikpKTsKKyAKICAvKiBzZXRldWlkOiBzdGFuZGFyZHM/ICovCiAgZXh0ZXJu
ICJDIiBpbnQKICBzZXRldWlkMzIgKF9fdWlkMzJfdCB1aWQpCg==


------=_20040111204741_71200
Content-Type: text/plain; charset=us-ascii

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/
------=_20040111204741_71200--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019