[OpenAFS-devel] Adding estimates to volserver.

Ilya Berdnikov ilya@ccmr.cornell.edu
Fri, 30 May 2003 13:12:48 -0400 (EDT)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--1417724665-1573680640-1054314768=:31413
Content-Type: TEXT/PLAIN; charset=US-ASCII

Greetings,

Some time ago there was a discussion on the list regarding the estimates
feature. Since then it has evolved into a "vos size" feature, and has, in
fact been implemented in some sense.

Attached is a patch that attempts to add the feature we needed most: the
size of the volume dump, however, the data structures are extensible, so
if there is need for other "measurements" such as number of files, number
of directories, whatever, these should be possible to add without too much
trouble.

In any case, here's the patch, and I'm patiently waiting for comments.

-Ilya

--1417724665-1573680640-1054314768=:31413
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="openafs-estimates.new.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.51.0305301312480.31413@florida.ccmr.cornell.edu>
Content-Description: 
Content-Disposition: attachment; filename="openafs-estimates.new.patch"

ZGlmZiAtdSAtciAteCBDVlMgb3BlbmFmcy5vcmlnL3NyYy92b2xzZXIvZHVt
cHN0dWZmLmMgb3BlbmFmcy9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jDQotLS0g
b3BlbmFmcy5vcmlnL3NyYy92b2xzZXIvZHVtcHN0dWZmLmMJRnJpIE1hciAy
OCAwNDozNTo1OCAyMDAzDQorKysgb3BlbmFmcy9zcmMvdm9sc2VyL2R1bXBz
dHVmZi5jCU1vbiBNYXkgMTkgMTc6MzY6MTcgMjAwMw0KQEAgLTkwLDYgKzkw
LDE3IEBADQogc3RhdGljIGJpdDMyIHZvbHNlcl9Xcml0ZUZpbGUoaW50IHZu
LCBzdHJ1Y3QgaW9kICppb2RwLCBGZEhhbmRsZV90ICpoYW5kbGVQLA0KIAkJ
CSAgICAgIEVycm9yICpzdGF0dXMpOw0KIA0KK3N0YXRpYyBpbnQgU2l6ZUR1
bXBEdW1wSGVhZGVyKHJlZ2lzdGVyIHN0cnVjdCBpb2QgKmlvZHAsIHJlZ2lz
dGVyIFZvbHVtZSAqdnAsDQorCQkJICAgICAgYWZzX2ludDMyIGZyb210aW1l
LCByZWdpc3RlciBzdHJ1Y3Qgdm9saW50U2l6ZSAqc2l6ZSk7DQorc3RhdGlj
IGludCBTaXplRHVtcFBhcnRpYWwocmVnaXN0ZXIgc3RydWN0IGlvZCAqaW9k
cCwgcmVnaXN0ZXIgVm9sdW1lICp2cCwNCisJCQkgICBhZnNfaW50MzIgZnJv
bXRpbWUsIGludCBkdW1wQWxsRGlycywNCisJCQkgICByZWdpc3RlciBzdHJ1
Y3Qgdm9saW50U2l6ZSAqc2l6ZSk7DQorc3RhdGljIGludCBTaXplRHVtcFZu
b2RlSW5kZXgocmVnaXN0ZXIgc3RydWN0IGlvZCAqaW9kcCwgVm9sdW1lICp2
cCwNCisJCQkgICAgICBWbm9kZUNsYXNzIGNsYXNzLCBhZnNfaW50MzIgZnJv
bXRpbWUsIGludCBmb3JjZWR1bXAsDQorCQkJICAgICAgcmVnaXN0ZXIgc3Ry
dWN0IHZvbGludFNpemUgKnNpemUpOw0KK3N0YXRpYyBpbnQgU2l6ZUR1bXBW
bm9kZShyZWdpc3RlciBzdHJ1Y3QgaW9kICppb2RwLCBzdHJ1Y3QgVm5vZGVE
aXNrT2JqZWN0ICp2LA0KKwkJCSBpbnQgdm9saWQsIGludCB2bm9kZU51bWJl
ciwgaW50IGR1bXBFdmVyeXRoaW5nLA0KKwkJCSByZWdpc3RlciBzdHJ1Y3Qg
dm9saW50U2l6ZSAqc2l6ZSk7DQogDQogc3RhdGljIHZvaWQgaW9kX0luaXQo
cmVnaXN0ZXIgc3RydWN0IGlvZCAqaW9kcCwgcmVnaXN0ZXIgc3RydWN0IHJ4
X2NhbGwgKmNhbGwpDQogew0KQEAgLTExNDksMyArMTE2MCwyMTEgQEANCiAg
ICAgaW9kX3VuZ2V0Yyhpb2RwLCB0YWcpOw0KICAgICByZXR1cm4gMTsNCiB9
DQorDQorDQorLyogLS0tLS0gQmVsb3cgYXJlIHRoZSBjYWxscyB0aGF0IGNh
bGN1bGF0ZSBkdW1wIHNpemUgLS0tLS0gKi8NCisNCitzdGF0aWMgaW50IFNp
emVEdW1wVm9sdW1lSGVhZGVyKHJlZ2lzdGVyIHN0cnVjdCBpb2QgKmlvZHAs
IHJlZ2lzdGVyIFZvbHVtZSAqdnAsIHJlZ2lzdGVyIHN0cnVjdCB2b2xpbnRT
aXplICp2X3NpemUpDQorew0KKyAgICBpbnQgY29kZSA9IDA7DQorICAgIHN0
YXRpYyBjaGFyIG51bGxTdHJpbmdbMV0gPSAiIjsgIC8qVGhlIGBgY29udGVu
dHMnJyBvZiBtb3RkKi8NCisNCisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0g
RHVtcFRhZyhpb2RwLCBEX1ZPTFVNRUhFQURFUik7ICovDQorICAgIHZfc2l6
ZS0+ZHVtcF9zaXplICs9IDE7DQorLyogICAgIGlmICghY29kZSkge2NvZGUg
PSBEdW1wSW50MzIoaW9kcCwgJ2knLFZfaWQodnApKTt9ICovDQorICAgIHZf
c2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAgIGlmICghY29kZSkgY29k
ZSA9IER1bXBJbnQzMihpb2RwLCAndicsVl9zdGFtcCh2cCkudmVyc2lvbik7
ICovDQorICAgIHZfc2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAgIGlm
ICghY29kZSkgY29kZSA9IER1bXBTdHJpbmcoaW9kcCwgJ24nLFZfbmFtZSh2
cCkpOyAqLw0KKyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSAoMiArIHN0cmxl
bihWX25hbWUodnApKSk7DQorLyogICAgIGlmICghY29kZSkgY29kZSA9IER1
bXBCb29sKGlvZHAsICdzJyxWX2luU2VydmljZSh2cCkpOyAqLw0KKyAgICB2
X3NpemUtPmR1bXBfc2l6ZSArPSAyOw0KKy8qICAgICBpZiAoIWNvZGUpIGNv
ZGUgPSBEdW1wQm9vbChpb2RwLCAnYicsVl9ibGVzc2VkKHZwKSk7ICovDQor
ICAgIHZfc2l6ZS0+ZHVtcF9zaXplICs9IDI7DQorLyogICAgIGlmICghY29k
ZSkgY29kZSA9IER1bXBJbnQzMihpb2RwLCAndScsVl91bmlxdWlmaWVyKHZw
KSk7ICovDQorICAgIHZfc2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAg
IGlmICghY29kZSkgY29kZSA9IER1bXBCeXRlKGlvZHAsICd0JywoYnl0ZSlW
X3R5cGUodnApKTsgKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gMjsN
CisvKiAgICAgaWYgKCFjb2RlKXsgY29kZSA9IER1bXBJbnQzMihpb2RwLCAn
cCcsVl9wYXJlbnRJZCh2cCkpO30gKi8NCisgICAgdl9zaXplLT5kdW1wX3Np
emUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcEludDMy
KGlvZHAsICdjJyxWX2Nsb25lSWQodnApKTsgKi8NCisgICAgdl9zaXplLT5k
dW1wX3NpemUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVt
cEludDMyKGlvZHAsICdxJyxWX21heHF1b3RhKHZwKSk7ICovDQorICAgIHZf
c2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAgIGlmICghY29kZSkgY29k
ZSA9IER1bXBJbnQzMihpb2RwLCAnbScsVl9taW5xdW90YSh2cCkpOyAqLw0K
KyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSA1Ow0KKy8qICAgICBpZiAoIWNv
ZGUpIGNvZGUgPSBEdW1wSW50MzIoaW9kcCwgJ2QnLFZfZGlza3VzZWQodnAp
KTsgKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gNTsNCisvKiAgICAg
aWYgKCFjb2RlKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICdmJyxWX2ZpbGVj
b3VudCh2cCkpOyAqLw0KKyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSA1Ow0K
Ky8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1wSW50MzIoaW9kcCwgJ2En
LCBWX2FjY291bnROdW1iZXIodnApKTsgKi8NCisgICAgdl9zaXplLT5kdW1w
X3NpemUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcElu
dDMyKGlvZHAsICdvJywgVl9vd25lcih2cCkpOyAqLw0KKyAgICB2X3NpemUt
PmR1bXBfc2l6ZSArPSA1Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBE
dW1wSW50MzIoaW9kcCwgJ0MnLFZfY3JlYXRpb25EYXRlKHZwKSk7CS9cKiBS
dyB2b2x1bWUgY3JlYXRpb24gZGF0ZSAqXC8gKi8NCisgICAgdl9zaXplLT5k
dW1wX3NpemUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVt
cEludDMyKGlvZHAsICdBJyxWX2FjY2Vzc0RhdGUodnApKTsgKi8NCisgICAg
dl9zaXplLT5kdW1wX3NpemUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlKSBj
b2RlID0gRHVtcEludDMyKGlvZHAsICdVJyxWX3VwZGF0ZURhdGUodnApKTsg
Ki8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gNTsNCisvKiAgICAgaWYg
KCFjb2RlKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICdFJyxWX2V4cGlyYXRp
b25EYXRlKHZwKSk7ICovDQorICAgIHZfc2l6ZS0+ZHVtcF9zaXplICs9IDU7
DQorLyogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBJbnQzMihpb2RwLCAn
QicsVl9iYWNrdXBEYXRlKHZwKSk7CQkvXCogUncgdm9sdW1lIGJhY2t1cCBj
bG9uZSBkYXRlICpcLyAqLw0KKyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSA1
Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1wU3RyaW5nKGlvZHAs
ICdPJyxWX29mZmxpbmVNZXNzYWdlKHZwKSk7ICovDQorICAgIHZfc2l6ZS0+
ZHVtcF9zaXplICs9ICgyICsgc3RybGVuKFZfb2ZmbGluZU1lc3NhZ2UodnAp
KSk7DQorLyogICAgIC9cKiAqLw0KKy8qICAgICAgKiBXZSBkbyBOT1QgZHVt
cCB0aGUgZGV0YWlsZWQgdm9sdW1lIHN0YXRpc3RpY3MgcmVzaWRpbmcgaW4g
dGhlIG9sZCAqLw0KKy8qICAgICAgKiBtb3RkIGZpZWxkLCBzaW5jZSB3ZSBj
YW5ub3QgdGVsbCBmcm9tIHRoZSBpbmZvIGluIGEgZHVtcCB3aGV0aGVyICov
DQorLyogICAgICAqIHN0YXRpc3RpY3MgZGF0YSBoYXMgYmVlbiBwdXQgdGhl
cmUuICBJbnN0ZWFkLCB3ZSBkdW1wIGEgbnVsbCBzdHJpbmcsICovDQorLyog
ICAgICAqIGp1c3QgYXMgaWYgdGhhdCB3YXMgd2hhdCB0aGUgbW90ZCBjb250
YWluZWQuICovDQorLyogICAgICAqXC8gKi8NCisvKiAgICAgaWYgKCFjb2Rl
KSBjb2RlID0gRHVtcFN0cmluZyhpb2RwLCAnTScsIG51bGxTdHJpbmcpOyAq
Lw0KKyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSAoMiArIHN0cmxlbihudWxs
U3RyaW5nKSk7DQorLyogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBBcnJh
eUludDMyKGlvZHAsICdXJywgKGFmc191aW50MzIgKilWX3dlZWtVc2UodnAp
LCBzaXplb2YoVl93ZWVrVXNlKHZwKSkvc2l6ZW9mKFZfd2Vla1VzZSh2cClb
MF0pKTsgKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gKDMgKyA0Kihz
aXplb2YoVl93ZWVrVXNlKHZwKSkvc2l6ZW9mKFZfd2Vla1VzZSh2cClbMF0p
KSk7DQorLyogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBJbnQzMihpb2Rw
LCAnRCcsIFZfZGF5VXNlRGF0ZSh2cCkpOyAqLw0KKyAgICB2X3NpemUtPmR1
bXBfc2l6ZSArPSA1Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1w
SW50MzIoaW9kcCwgJ1onLCBWX2RheVVzZSh2cCkpOyAqLw0KKyAgICB2X3Np
emUtPmR1bXBfc2l6ZSArPSA1Ow0KKyAgICByZXR1cm4gY29kZTsNCit9DQor
DQorc3RhdGljIGludCBTaXplRHVtcEVuZChyZWdpc3RlciBzdHJ1Y3QgaW9k
ICppb2RwLCByZWdpc3RlciBzdHJ1Y3Qgdm9saW50U2l6ZSAqdl9zaXplKQ0K
K3sNCisgICAgaW50IGNvZGUgPSAwOw0KKyAgICB2X3NpemUtPmR1bXBfc2l6
ZSArPSA1Ow0KKyAgICByZXR1cm4gY29kZTsNCit9DQorDQoraW50IFNpemVE
dW1wVm9sdW1lKHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCByZWdp
c3RlciBWb2x1bWUgKnZwLCBhZnNfaW50MzIgZnJvbXRpbWUsDQorCQkgICBp
bnQgZHVtcEFsbERpcnMsIHJlZ2lzdGVyIHN0cnVjdCB2b2xpbnRTaXplICp2
X3NpemUpDQorew0KKyAgICBzdHJ1Y3QgaW9kIGlvZDsNCisgICAgaW50IGNv
ZGUgPSAwOw0KKyAgICByZWdpc3RlciBzdHJ1Y3QgaW9kICppb2RwID0gKHN0
cnVjdCBpb2QgKikwOw0KKy8vICAgIGlvZF9Jbml0KGlvZHAsIGNhbGwpOw0K
Kw0KKyAgICBpZiAoIWNvZGUpIGNvZGUgPSBTaXplRHVtcER1bXBIZWFkZXIo
aW9kcCwgdnAsIGZyb210aW1lLCB2X3NpemUpOw0KKyAgICBpZiAoIWNvZGUp
IGNvZGUgPSBTaXplRHVtcFBhcnRpYWwoaW9kcCwgdnAsIGZyb210aW1lLCBk
dW1wQWxsRGlycywgdl9zaXplKTsNCisgICAgaWYgKCFjb2RlKSBjb2RlID0g
U2l6ZUR1bXBFbmQoaW9kcCwgdl9zaXplKTsNCisgICAgDQorICAgIHJldHVy
biBjb2RlOw0KK30NCisNCitzdGF0aWMgaW50IFNpemVEdW1wRHVtcEhlYWRl
cihyZWdpc3RlciBzdHJ1Y3QgaW9kICppb2RwLCByZWdpc3RlciBWb2x1bWUg
KnZwLCBhZnNfaW50MzIgZnJvbXRpbWUsDQorCQkJICAgICAgcmVnaXN0ZXIg
c3RydWN0IHZvbGludFNpemUgKnZfc2l6ZSkNCit7DQorICAgIGludCBjb2Rl
ID0gMDsNCisgICAgaW50IFVzZUxhdGVzdFJlYWRPbmx5Q2xvbmUgPSAxOw0K
KyAgICBhZnNfaW50MzIgZHVtcFRpbWVzWzJdOw0KKy8vICAgIGlvZHAtPmRl
dmljZSA9IHZwLT5kZXZpY2U7DQorLy8gICAgaW9kcC0+cGFyZW50SWQgPSBW
X3BhcmVudElkKHZwKTsNCisvLyAgICBpb2RwLT5kdW1wUGFydGl0aW9uID0g
dnAtPnBhcnRpdGlvbjsNCisNCisgICAgdl9zaXplLT5kdW1wX3NpemUgPSAw
OyAvKiBpbml0aWFsaXplIHRoZSBzaXplICovDQorLyogICAgIGlmICghY29k
ZSkgY29kZSA9IER1bXBEb3VibGUoaW9kcCwgRF9EVU1QSEVBREVSLCBEVU1Q
QkVHSU5NQUdJQywgRFVNUFZFUlNJT04pOyAqLw0KKyAgICB2X3NpemUtPmR1
bXBfc2l6ZSArPSA5Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1w
SW50MzIoaW9kcCwgJ3YnLCBVc2VMYXRlc3RSZWFkT25seUNsb25lPyBWX2lk
KHZwKTogVl9wYXJlbnRJZCh2cCkpOyAqLw0KKyAgICB2X3NpemUtPmR1bXBf
c2l6ZSArPSA1Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1wU3Ry
aW5nKGlvZHAsICduJyxWX25hbWUodnApKTsgKi8NCisgICAgdl9zaXplLT5k
dW1wX3NpemUgKz0gKDIgKyBzdHJsZW4oVl9uYW1lKHZwKSkpOw0KKy8qICAg
ICBkdW1wVGltZXNbMF0gPSBmcm9tdGltZTsgKi8NCisvKiAgICAgZHVtcFRp
bWVzWzFdID0gVl9iYWNrdXBEYXRlKHZwKTsJL1wqIFVudGlsIHRoZSB0aW1l
IHRoZSBjbG9uZSB3YXMgbWFkZSAqXC8gKi8NCisvKiAgICAgaWYgKCFjb2Rl
KSBjb2RlID0gRHVtcEFycmF5SW50MzIoaW9kcCwgJ3QnLCAoYWZzX3VpbnQz
MiAqKWR1bXBUaW1lcywgMik7ICovDQorICAgIHZfc2l6ZS0+ZHVtcF9zaXpl
ICs9ICgzICsgNCoyKTsNCisgICAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK3N0
YXRpYyBpbnQgU2l6ZUR1bXBWbm9kZShyZWdpc3RlciBzdHJ1Y3QgaW9kICpp
b2RwLCBzdHJ1Y3QgVm5vZGVEaXNrT2JqZWN0ICp2LCBpbnQgdm9saWQsIGlu
dCB2bm9kZU51bWJlciwgaW50IGR1bXBFdmVyeXRoaW5nLA0KKwkJICAgICBy
ZWdpc3RlciBzdHJ1Y3Qgdm9saW50U2l6ZSAqdl9zaXplKQ0KK3sNCisgICAg
aW50IGNvZGUgPSAwOw0KKw0KKyAgICBpZiAoIXYgfHwgdi0+dHlwZSA9PSB2
TnVsbCkNCisJcmV0dXJuIGNvZGU7DQorLyogICAgIGlmICghY29kZSkgY29k
ZSA9IER1bXBEb3VibGUoaW9kcCwgRF9WTk9ERSwgdm5vZGVOdW1iZXIsIHYt
PnVuaXF1aWZpZXIpOyAqLw0KKyAgICB2X3NpemUtPmR1bXBfc2l6ZSArPSA5
Ow0KKyAgICBpZiAoIWR1bXBFdmVyeXRoaW5nKQ0KKyAgICAgICAgcmV0dXJu
IGNvZGU7DQorLyogICAgIGlmICghY29kZSkgIGNvZGUgPSBEdW1wQnl0ZShp
b2RwLCAndCcsKGJ5dGUpdi0+dHlwZSk7ICovDQorICAgIHZfc2l6ZS0+ZHVt
cF9zaXplICs9IDI7DQorLyogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBT
aG9ydChpb2RwLCAnbCcsIHYtPmxpbmtDb3VudCk7IC9cKiBNYXkgbm90IG5l
ZWQgdGhpcyAqXC8gKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gMzsN
CisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICd2
Jywgdi0+ZGF0YVZlcnNpb24pOyAqLw0KKyAgICB2X3NpemUtPmR1bXBfc2l6
ZSArPSA1Ow0KKy8qICAgICBpZiAoIWNvZGUpIGNvZGUgPSBEdW1wSW50MzIo
aW9kcCwgJ20nLCB2LT51bml4TW9kaWZ5VGltZSk7ICovDQorICAgIHZfc2l6
ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAgIGlmICghY29kZSkgY29kZSA9
IER1bXBJbnQzMihpb2RwLCAnYScsIHYtPmF1dGhvcik7ICovDQorICAgIHZf
c2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAgIGlmICghY29kZSkgY29k
ZSA9IER1bXBJbnQzMihpb2RwLCAnbycsIHYtPm93bmVyKTsgKi8NCisgICAg
dl9zaXplLT5kdW1wX3NpemUgKz0gNTsNCisvKiAgICAgaWYgKCFjb2RlICYm
IHYtPmdyb3VwKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICdnJywgdi0+Z3Jv
dXApOwkvXCogZGVmYXVsdCBncm91cCBpcyAwICpcLyAqLw0KKyAgICBpZih2
LT5ncm91cCkgICAgIHZfc2l6ZS0+ZHVtcF9zaXplICs9IDU7DQorLyogICAg
IGlmICghY29kZSkgY29kZSA9IER1bXBTaG9ydChpb2RwLCAnYicsIHYtPm1v
ZGVCaXRzKTsgKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gMzsNCisv
KiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICdwJywg
di0+cGFyZW50KTsgKi8NCisgICAgdl9zaXplLT5kdW1wX3NpemUgKz0gNTsN
CisvKiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcEludDMyKGlvZHAsICdz
Jywgdi0+c2VydmVyTW9kaWZ5VGltZSk7ICovDQorICAgIHZfc2l6ZS0+ZHVt
cF9zaXplICs9IDU7DQorICAgIGlmICh2LT50eXBlID09IHZEaXJlY3Rvcnkp
IHsNCisvKglhY2xfSHRvbkFDTChWVm5vZGVEaXNrQUNMKHYpKTsgKi8NCisv
KiAJaWYgKCFjb2RlKSBjb2RlID0gRHVtcEJ5dGVTdHJpbmcoaW9kcCwgJ0En
LCAoYnl0ZSAqKSBWVm5vZGVEaXNrQUNMKHYpLCBWQWNsRGlza1NpemUodikp
OyAqLw0KKwl2X3NpemUtPmR1bXBfc2l6ZSArPSAxICsgVkFjbERpc2tTaXpl
KHYpOw0KKyAgICB9DQorDQorICAgIGlmIChWTkRJU0tfR0VUX0lOTyh2KSkg
ew0KKwl2X3NpemUtPmR1bXBfc2l6ZSArPSAodi0+bGVuZ3RoICsgNSk7DQor
ICAgIH0gDQorICAgIHJldHVybiBjb2RlOw0KK30NCisNCisvKiBBIHBhcnRp
YWwgZHVtcCAobm8gZHVtcCBoZWFkZXIpICovDQorc3RhdGljIGludCBTaXpl
RHVtcFBhcnRpYWwocmVnaXN0ZXIgc3RydWN0IGlvZCAqaW9kcCwgcmVnaXN0
ZXIgVm9sdW1lICp2cCwgYWZzX2ludDMyIGZyb210aW1lLCBpbnQgZHVtcEFs
bERpcnMsDQorCQkJICAgcmVnaXN0ZXIgc3RydWN0IHZvbGludFNpemUgKnZf
c2l6ZSkNCit7DQorICAgIGludCBjb2RlID0gMDsNCisgICAgaWYgKCFjb2Rl
KSBjb2RlID0gU2l6ZUR1bXBWb2x1bWVIZWFkZXIoaW9kcCwgdnAsIHZfc2l6
ZSk7DQorICAgIGlmICghY29kZSkgY29kZSA9IFNpemVEdW1wVm5vZGVJbmRl
eChpb2RwLCB2cCwgdkxhcmdlLCBmcm9tdGltZSwgZHVtcEFsbERpcnMsIHZf
c2l6ZSk7DQorICAgIGlmICghY29kZSkgY29kZSA9IFNpemVEdW1wVm5vZGVJ
bmRleChpb2RwLCB2cCwgdlNtYWxsLCBmcm9tdGltZSwgMCwgdl9zaXplKTsN
CisgICAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KK3N0YXRpYyBpbnQgU2l6ZUR1
bXBWbm9kZUluZGV4KHJlZ2lzdGVyIHN0cnVjdCBpb2QgKmlvZHAsIFZvbHVt
ZSAqdnAsIFZub2RlQ2xhc3MgY2xhc3MsIGFmc19pbnQzMiBmcm9tdGltZSwN
CisJCQkgICAgICBpbnQgZm9yY2VkdW1wLCByZWdpc3RlciBzdHJ1Y3Qgdm9s
aW50U2l6ZSAqdl9zaXplKQ0KK3sNCisgICAgcmVnaXN0ZXIgaW50IGNvZGUg
PSAwOw0KKyAgICByZWdpc3RlciBzdHJ1Y3QgVm5vZGVDbGFzc0luZm8gKnZj
cCA9ICZWbm9kZUNsYXNzSW5mb1tjbGFzc107DQorICAgIGNoYXIgYnVmW1NJ
WkVPRl9MQVJHRURJU0tWTk9ERV07DQorICAgIHN0cnVjdCBWbm9kZURpc2tP
YmplY3QgKnZub2RlID0gKHN0cnVjdCBWbm9kZURpc2tPYmplY3QgKikgYnVm
Ow0KKyAgICBTdHJlYW1IYW5kbGVfdCAqZmlsZTsNCisgICAgRmRIYW5kbGVf
dCAqZmRQOw0KKyAgICBpbnQgc2l6ZTsNCisgICAgaW50IGZsYWc7DQorICAg
IHJlZ2lzdGVyIGludCB2bm9kZUluZGV4LCBuVm5vZGVzOw0KKw0KKyAgICBm
ZFAgPSBJSF9PUEVOKHZwLT52bm9kZUluZGV4W2NsYXNzXS5oYW5kbGUpOw0K
KyAgICBhc3NlcnQoZmRQICE9IE5VTEwpOw0KKyAgICBmaWxlID0gRkRIX0ZE
T1BFTihmZFAsICJyKyIpOw0KKyAgICBhc3NlcnQoZmlsZSAhPSBOVUxMKTsN
CisgICAgc2l6ZSA9IE9TX1NJWkUoZmRQLT5mZF9mZCk7DQorICAgIGFzc2Vy
dChzaXplICE9IC0xKTsNCisgICBuVm5vZGVzID0gKHNpemUgLyB2Y3AtPmRp
c2tTaXplKSAtIDE7DQorICAgIGlmIChuVm5vZGVzID4gMCkgew0KKwlhc3Nl
cnQoKG5Wbm9kZXMrMSkqdmNwLT5kaXNrU2l6ZSA9PSBzaXplKTsNCisJYXNz
ZXJ0KFNUUkVBTV9TRUVLKGZpbGUsIHZjcC0+ZGlza1NpemUsIDApID09IDAp
Ow0KKyAgICB9DQorICAgIGVsc2UgblZub2RlcyA9IDA7DQorICAgIGZvciAo
dm5vZGVJbmRleCA9IDA7IG5Wbm9kZXMgJiYgU1RSRUFNX1JFQUQodm5vZGUs
IHZjcC0+ZGlza1NpemUsIDEsIGZpbGUpID09IDEgJiYgIWNvZGU7DQorICAg
ICAgblZub2Rlcy0tLCB2bm9kZUluZGV4KyspIHsNCisJZmxhZyA9IGZvcmNl
ZHVtcCB8fCAodm5vZGUtPnNlcnZlck1vZGlmeVRpbWUgPj0gZnJvbXRpbWUp
Ow0KKwkvKiBOb3RlOiAgdGhlID49IHRlc3QgaXMgdmVyeSBpbXBvcnRhbnQg
c2luY2Ugc29tZSBvbGQgdm9sdW1lcyBtYXkgbm90IGhhdmUNCisgIAkgICBh
IHNlcnZlck1vZGlmeVRpbWUuICBGb3IgYW4gZXBvY2ggZHVtcCwgdGhpcyBy
ZXN1bHRzIGluIDA+PTAgdGVzdCwgd2hpY2gNCisJICAgZG9lcyBkdW1wIHRo
ZSBmaWxlISAqLw0KKwlpZiAoIWNvZGUpIGNvZGUgPSBTaXplRHVtcFZub2Rl
KGlvZHAsIHZub2RlLCBWX2lkKHZwKSwgYml0TnVtYmVyVG9Wbm9kZU51bWJl
cih2bm9kZUluZGV4LCBjbGFzcyksIGZsYWcsIHZfc2l6ZSk7DQorICAgIH0N
CisgICAgU1RSRUFNX0NMT1NFKGZpbGUpOw0KKyAgICBGREhfQ0xPU0UoZmRQ
KTsNCisgICAgcmV0dXJuIGNvZGU7DQorfQ0KKw0KZGlmZiAtdSAtciAteCBD
VlMgb3BlbmFmcy5vcmlnL3NyYy92b2xzZXIvdm9saW50LnhnIG9wZW5hZnMv
c3JjL3ZvbHNlci92b2xpbnQueGcNCi0tLSBvcGVuYWZzLm9yaWcvc3JjL3Zv
bHNlci92b2xpbnQueGcJRnJpIE1hciAxNCAxNTo0Njo1NiAyMDAzDQorKysg
b3BlbmFmcy9zcmMvdm9sc2VyL3ZvbGludC54ZwlUaHUgTWF5IDI5IDE2OjIx
OjIwIDIwMDMNCkBAIC00OCw2ICs0OCw3IEBADQogI2RlZmluZQkgICAgVk9M
WExJU1RQQVJUSVRJT05TCTEyNw0KICNkZWZpbmUJICAgIFZPTEZPUldBUkRN
VUxUSVBMRSAgMTI4DQogI2RlZmluZSAgICAgVk9MQ09OVkVSVFJPICAgICAg
ICA2NTUzNg0KKyNkZWZpbmUgICAgIFZPTEdFVFNJWkUgICAgICAgICAgNjU1
MzcNCiANCiBjb25zdCBTSVpFID0gMTAyNDsNCiANCkBAIC0yMTYsNiArMjE3
LDExIEBADQogCXN0cnVjdCBkZXN0U2VydmVyIHNlcnZlcjsNCiB9Ow0KIA0K
Ky8qICBWYXJpb3VzIHNpemUgcGFyYW1ldGVycyBvZiB0aGUgdm9sdW1lICAq
Lw0KK3N0cnVjdCB2b2xpbnRTaXplIHsNCisgICAgYWZzX3VpbnQ2NCBkdW1w
X3NpemU7DQorfTsNCisNCiB0eXBlZGVmICByZXBsaWNhIG1hbnlEZXN0czw+
Ow0KIHR5cGVkZWYgIGFmc19pbnQzMiBtYW55UmVzdWx0czw+Ow0KIHR5cGVk
ZWYgIHRyYW5zRGVidWdJbmZvIHRyYW5zRGVidWdFbnRyaWVzPD47DQpAQCAt
Mzk2LDMgKzQwMiw5IEBADQogICBJTiBhZnNfaW50MzIgcGFydGlkLA0KICAg
SU4gYWZzX2ludDMyIHZvbGlkDQogKSA9IFZPTENPTlZFUlRSTzsNCisNCitw
cm9jIEdldFNpemUoDQorICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAg
SU4gYWZzX2ludDMyIGZyb21EYXRlLA0KKyAgT1VUIHN0cnVjdCB2b2xpbnRT
aXplICpzaXplDQorKSA9IFZPTEdFVFNJWkU7DQpkaWZmIC11IC1yIC14IENW
UyBvcGVuYWZzLm9yaWcvc3JjL3ZvbHNlci92b2xwcm9jcy5jIG9wZW5hZnMv
c3JjL3ZvbHNlci92b2xwcm9jcy5jDQotLS0gb3BlbmFmcy5vcmlnL3NyYy92
b2xzZXIvdm9scHJvY3MuYwlNb24gTWF5IDEyIDIxOjU4OjMyIDIwMDMNCisr
KyBvcGVuYWZzL3NyYy92b2xzZXIvdm9scHJvY3MuYwlNb24gTWF5IDE5IDE3
OjQwOjQ3IDIwMDMNCkBAIC0yNzk3LDYgKzI3OTcsMzMgQEANCiAjZW5kaWYg
LyogQUZTX05BTUVJX0VOViAqLw0KIH0NCiANCithZnNfaW50MzIgU0FGU1Zv
bEdldFNpemUgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIHNpemUpDQor
c3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQorYWZzX2ludDMyIGZyb21UcmFuczsN
CithZnNfaW50MzIgZnJvbURhdGU7DQorcmVnaXN0ZXIgc3RydWN0IHZvbGlu
dFNpemUgKnNpemU7DQorew0KKyAgICBpbnQgY29kZSA9IDA7DQorICAgIHJl
Z2lzdGVyIHN0cnVjdCB2b2xzZXJfdHJhbnMgKnR0Ow0KKyAgICBjaGFyIGNh
bGxlcltNQVhLVENOQU1FTEVOXTsNCisNCisgICAgaWYgKCFhZnNjb25mX1N1
cGVyVXNlcih0ZGlyLCBhY2lkLCBjYWxsZXIpKSByZXR1cm4gVk9MU0VSQkFE
X0FDQ0VTUzsvKm5vdCBhIHN1cGVyIHVzZXIqLw0KKyAgICB0dCA9IEZpbmRU
cmFucyhmcm9tVHJhbnMpOw0KKyAgICBpZiAoIXR0KSByZXR1cm4gRU5PRU5U
Ow0KKyAgICBpZiAodHQtPnZmbGFncyAmIFZURGVsZXRlZCkgew0KKwlUUkVM
RSh0dCk7DQorCXJldHVybiBFTk9FTlQ7DQorICAgIH0NCisgICAgc3RyY3B5
KHR0LT5sYXN0UHJvY05hbWUsIkdldFNpemUiKTsgDQorICAgIHR0LT5yeENh
bGxQdHIgPSBhY2lkOyANCisgICAgY29kZSA9IFNpemVEdW1wVm9sdW1lKGFj
aWQsIHR0LT52b2x1bWUsIGZyb21EYXRlLCAxLCBzaXplKTsJLyogbWVhc3Vy
ZSB2b2x1bWUncyBkYXRhICovDQorICAgIHR0LT5yeENhbGxQdHIgPSAoc3Ry
dWN0IHJ4X2NhbGwgKikwOyANCisgICAgaWYoVFJFTEUodHQpKSByZXR1cm4g
Vk9MU0VSVFJFTEVfRVJST1I7IA0KKyAgICANCisvKiAgICBvc2lfYXVkaXRV
KGFjaWQsIFZTX0R1bXBFdmVudCwgY29kZSwgQVVEX0xPTkcsIGZyb21UcmFu
cywgQVVEX0VORCk7ICAqLw0KKyAgICByZXR1cm4gY29kZTsNCit9DQorDQog
LyogR2V0UGFydE5hbWUgLSBtYXAgcGFydGlkIChhIGRlY2ltYWwgbnVtYmVy
KSBpbnRvIHBuYW1lIChhIHN0cmluZykNCiAgKiBTaW5jZSBmb3IgTlQgd2Ug
YWN0dWFsbHkgd2FudCB0byByZXR1cm4gdGhlIGRyaXZlIG5hbWUsIHdlIG1h
cCB0aHJvdWdoIHRoZQ0KICAqIHBhcnRpdGlvbiBzdHJ1Y3QuDQpkaWZmIC11
IC1yIC14IENWUyBvcGVuYWZzLm9yaWcvc3JjL3ZvbHNlci92b3MuYyBvcGVu
YWZzL3NyYy92b2xzZXIvdm9zLmMNCi0tLSBvcGVuYWZzLm9yaWcvc3JjL3Zv
bHNlci92b3MuYwlGcmkgTWFyIDE0IDE1OjQ2OjU2IDIwMDMNCisrKyBvcGVu
YWZzL3NyYy92b2xzZXIvdm9zLmMJV2VkIE1heSAyOCAxMzoxNzozMCAyMDAz
DQpAQCAtNDMwMCw2ICs0MzAwLDgwIEBADQogICAgIHJldHVybiBjb2RlOw0K
IH0NCiANCitzdGF0aWMgU2l6ZXMoYXMpDQorcmVnaXN0ZXIgc3RydWN0IGNt
ZF9zeW5kZXNjICphczsNCit7DQorICAgIGFmc19pbnQzMiBhdm9saWQsIGFz
ZXJ2ZXIsIGFwYXJ0LHZvbHR5cGUsZnJvbWRhdGU9MCxjb2RlLCBlcnIsIGk7
DQorICAgIHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5Ow0KKyAgICB2b2xpbnRT
aXplIHZvbF9zaXplOw0KKyAgICANCisgICAgcnhfU2V0UnhEZWFkVGltZSg2
MCAqIDEwKTsNCisgICAgZm9yIChpID0gMDsgaTxNQVhTRVJWRVJTOyBpKysp
IHsNCisJc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKnJ4Q29ubiA9IHViaWtfR2V0
UlBDQ29ubihjc3RydWN0LGkpOw0KKwlpZiAocnhDb25uID09IDApIGJyZWFr
Ow0KKwlyeF9TZXRDb25uRGVhZFRpbWUocnhDb25uLCByeF9jb25uRGVhZFRp
bWUpOw0KKwlpZiAocnhDb25uLT5zZXJ2aWNlKSAgcnhDb25uLT5zZXJ2aWNl
LT5jb25uRGVhZFRpbWUgPSByeF9jb25uRGVhZFRpbWU7DQorICAgIH0NCisg
ICAgDQorICAgIGF2b2xpZCA9IHZzdV9HZXRWb2x1bWVJRChhcy0+cGFybXNb
MF0uaXRlbXMtPmRhdGEsIGNzdHJ1Y3QsICZlcnIpOw0KKyAgICBpZiAoYXZv
bGlkID09IDApIHsNCisJaWYgKGVycikgUHJpbnRFcnJvcigiIiwgZXJyKTsN
CisJZWxzZSAgZnByaW50ZihTVERFUlIsICJ2b3M6IGNhbid0IGZpbmQgdm9s
dW1lICclcydcbiIsIGFzLT5wYXJtc1swXS5pdGVtcy0+ZGF0YSk7DQorCXJl
dHVybiBFTk9FTlQ7DQorICAgIH0NCisgICAgDQorICAgIGlmIChhcy0+cGFy
bXNbMV0uaXRlbXMgfHwgYXMtPnBhcm1zWzJdLml0ZW1zKSB7DQorCWlmICgh
YXMtPnBhcm1zWzFdLml0ZW1zIHx8ICFhcy0+cGFybXNbMl0uaXRlbXMpIHsN
CisJICAgIGZwcmludGYoU1RERVJSLCAiTXVzdCBzcGVjaWZ5IGJvdGggLXNl
cnZlciBhbmQgLXBhcnRpdGlvbiBvcHRpb25zXG4iKTsNCisJICAgIHJldHVy
biAtMTsNCisJfQ0KKwlhc2VydmVyID0gR2V0U2VydmVyKGFzLT5wYXJtc1sy
XS5pdGVtcy0+ZGF0YSk7DQorCWlmIChhc2VydmVyID09IDApIHsNCisJICAg
IGZwcmludGYoU1RERVJSLCAiSW52YWxpZCBzZXJ2ZXIgbmFtZVxuIik7DQor
CSAgICByZXR1cm4gLTE7DQorCX0NCisJYXBhcnQgPSB2b2x1dGlsX0dldFBh
cnRpdGlvbklEKGFzLT5wYXJtc1sxXS5pdGVtcy0+ZGF0YSk7DQorCWlmIChh
cGFydCA8IDApIHsNCisJICAgIGZwcmludGYoU1RERVJSLCAiSW52YWxpZCBw
YXJ0aXRpb24gbmFtZVxuIik7DQorCSAgICByZXR1cm4gLTE7DQorCX0NCisg
ICAgfSBlbHNlIHsNCisJY29kZSA9IEdldFZvbHVtZUluZm8oYXZvbGlkLCAm
YXNlcnZlciwgJmFwYXJ0LCAmdm9sdHlwZSwgJmVudHJ5KTsNCisJaWYgKGNv
ZGUpIHJldHVybiBjb2RlOw0KKyAgICB9DQorDQorICAgIGZyb21kYXRlID0g
MDsNCisgICAgDQorICAgIGlmIChhcy0+cGFybXNbNF0uaXRlbXMgJiYgc3Ry
Y21wKGFzLT5wYXJtc1s0XS5pdGVtcy0+ZGF0YSwiMCIpKSB7DQorCWNvZGUg
PSBrdGltZV9EYXRlVG9JbnQzMihhcy0+cGFybXNbNF0uaXRlbXMtPmRhdGEs
ICZmcm9tZGF0ZSk7DQorCWlmIChjb2RlKSB7DQorCSAgICBmcHJpbnRmKFNU
REVSUiwidm9zOiBmYWlsZWQgdG8gcGFyc2UgZGF0ZSAnJXMnIChlcnJvcj0l
ZCkpXG4iLA0KKwkJICAgIGFzLT5wYXJtc1sxXS5pdGVtcy0+ZGF0YSwgY29k
ZSk7DQorCSAgICByZXR1cm4gY29kZTsNCisJfQ0KKyAgICB9DQorDQorICAg
IGZwcmludGYoU1RET1VULCAiVm9sdW1lOiAlc1xuIiwgYXMtPnBhcm1zWzBd
Lml0ZW1zLT5kYXRhKTsNCisgICAgDQorICAgIGlmKGFzLT5wYXJtc1szXS5p
dGVtcykgLyogZG8gdGhlIGR1bXAgZXN0aW1hdGUgKi8NCisgICAgew0KKwl2
b2xfc2l6ZS5kdW1wX3NpemUgPSAwOw0KKwljb2RlID0gVVZfR2V0U2l6ZShh
dm9saWQsIGFzZXJ2ZXIsIGFwYXJ0LCBmcm9tZGF0ZSwgJnZvbF9zaXplKTsN
CisJaWYgKGNvZGUpIHsNCisJICAgIFByaW50RGlhZ25vc3RpY3MoInNpemUi
LCBjb2RlKTsNCisJICAgIHJldHVybiBjb2RlOw0KKwl9DQorCS8qIHByZXN1
bWFibHkgdGhlIHNpemUgaW5mbyBpcyBub3cgZ2F0aGVyZWQgaW4gcG50ciAq
Lw0KKwkvKiBub3cgd2UgZGlzcGxheSBpdCAqLw0KKwkNCisJZnByaW50ZihT
VERPVVQsImR1bXBfc2l6ZTogJWxsdVxuIiwgdm9sX3NpemUuZHVtcF9zaXpl
KTsNCisgICAgfQ0KKyAgICANCisgICAgLyogRGlzcGxheSBpbmZvICovDQor
ICAgIA0KKyAgICByZXR1cm4gMDsNCit9DQorDQogUHJpbnREaWFnbm9zdGlj
cyhhc3RyaW5nLCBhY29kZSkNCiAgICAgY2hhciAqYXN0cmluZzsNCiAgICAg
YWZzX2ludDMyIGFjb2RlOw0KQEAgLTQ2MDgsNiArNDY4MiwxNCBAQA0KICAg
ICBjbWRfQWRkUGFybSh0cywgIi1mb3JjZSIsIENNRF9GTEFHLCBDTURfT1BU
SU9OQUwsICJkb24ndCBhc2siKTsNCiAgICAgQ09NTU9OUEFSTVM7DQogDQor
ICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgic2l6ZSIsIFNpemVzLCAwLCAi
b2J0YWluIHZhcmlvdXMgc2l6ZXMgb2YgdGhlIHZvbHVtZS4iKTsNCisgICAg
Y21kX0FkZFBhcm0odHMsICItaWQiLCBDTURfU0lOR0xFLCAwLCAidm9sdW1l
IG5hbWUgb3IgSUQiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICItcGFydGl0
aW9uIiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAicGFydGl0aW9uIG5h
bWUiKTsNCisgICAgY21kX0FkZFBhcm0odHMsICItc2VydmVyIiwgQ01EX1NJ
TkdMRSwgQ01EX09QVElPTkFMLCAgIm1hY2hpbmUgbmFtZSIpOw0KKyAgICBj
bWRfQWRkUGFybSh0cywgIi1kdW1wIiwgQ01EX0ZMQUcsIENNRF9PUFRJT05B
TCwgIk9idGFpbiB0aGUgc2l6ZSBvZiB0aGUgZHVtcCIpOw0KKyAgICBjbWRf
QWRkUGFybSh0cywgIi10aW1lIiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFM
LCAiZHVtcCBmcm9tIHRpbWUiKTsNCisgICAgQ09NTU9OUEFSTVM7DQorDQog
ICAgIGNvZGUgPSBjbWRfRGlzcGF0Y2goYXJnYywgYXJndik7DQogICAgIGlm
IChyeEluaXREb25lKSB7DQogCS8qIFNodXQgZG93biB0aGUgdWJpa19jbGll
bnQgYW5kIHJ4IGNvbm5lY3Rpb25zICovDQpkaWZmIC11IC1yIC14IENWUyBv
cGVuYWZzLm9yaWcvc3JjL3ZvbHNlci92c3Byb2NzLmMgb3BlbmFmcy9zcmMv
dm9sc2VyL3ZzcHJvY3MuYw0KLS0tIG9wZW5hZnMub3JpZy9zcmMvdm9sc2Vy
L3ZzcHJvY3MuYwlGcmkgTWFyIDI4IDA0OjI3OjMyIDIwMDMNCisrKyBvcGVu
YWZzL3NyYy92b2xzZXIvdnNwcm9jcy5jCU1vbiBNYXkgMTkgMTc6NDE6MTAg
MjAwMw0KQEAgLTMwMjYsNiArMzAyNiw4IEBADQogICAgRUdPVE8oZXJyb3Jf
ZXhpdCwgY29kZSwgIkVycm9yIHdoaWxlIGR1bXBpbmcgdm9sdW1lIFxuIik7
DQogICAgVkRPTkU7DQogDQorICAgVlBSSU5UMSgidGlkOiAlZFxuIiwgZnJv
bXRpZCk7DQorICAgDQogIGVycm9yX2V4aXQ6IA0KICAgIGlmIChmcm9tY2Fs
bCkgew0KICAgICAgIGNvZGUgPSByeF9FbmRDYWxsKGZyb21jYWxsLCByeEVy
cm9yKTsNCkBAIC01NTY4LDYgKzU1NzAsNDUgQEANCiAgIHJldHVybihlcnJv
cik7DQogfQ0KIA0KK2ludCBVVl9HZXRTaXplKGFmc19pbnQzMiBhZnJvbXZv
bCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLCBhZnNfaW50MzIgYWZyb21wYXJ0
LCANCisJYWZzX2ludDMyIGZyb21kYXRlLCBzdHJ1Y3Qgdm9saW50U2l6ZSAq
dm9sX3NpemUpDQorew0KKyAgIHN0cnVjdCByeF9jb25uZWN0aW9uICphY29u
biA9IChzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqKTA7DQorICAgYWZzX2ludDMy
IHRpZD0wLCByY29kZT0wOw0KKyAgIGFmc19pbnQzMiBjb2RlLCBlcnJvciA9
IDA7DQorDQorDQorICAgLyogZ2V0IGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2
ZXJzICovDQorICAgYWNvbm4gPSBVVl9CaW5kKGFmcm9tc2VydmVyLCBBRlND
T05GX1ZPTFVNRVBPUlQpOw0KKw0KKyAgIFZQUklOVDEoIlN0YXJ0aW5nIHRy
YW5zYWN0aW9uIG9uIHZvbHVtZSAldS4uLiIsIGFmcm9tdm9sKTsNCisgICBj
b2RlID0gQUZTVm9sVHJhbnNDcmVhdGUoYWNvbm4sIGFmcm9tdm9sLCBhZnJv
bXBhcnQsIElUQnVzeSwgJnRpZCk7DQorICAgRUdPVE8xKGVycm9yX2V4aXQs
IGNvZGUsICJDb3VsZCBub3Qgc3RhcnQgdHJhbnNhY3Rpb24gb24gdGhlIHZv
bHVtZSAldSB0byBiZSBtZWFzdXJlZFxuIiwgYWZyb212b2wpOw0KKyAgIFZE
T05FOw0KKw0KKyAgIFZQUklOVDEoIkdldHRpbmcgc2l6ZSBvZiB2b2x1bWUg
b24gdm9sdW1lICV1Li4uIiwgYWZyb212b2wpOw0KKyAgIGNvZGUgPSBBRlNW
b2xHZXRTaXplKGFjb25uLCB0aWQsIGZyb21kYXRlLCB2b2xfc2l6ZSk7DQor
ICAgRUdPVE8oZXJyb3JfZXhpdCwgY29kZSwgIkNvdWxkIG5vdCBzdGFydCB0
aGUgbWVhc3VyZW1lbnQgcHJvY2VzcyBcbiIpOw0KKyAgIFZET05FOw0KKyAg
ICAgIA0KKyBlcnJvcl9leGl0Og0KKyAgIGlmICh0aWQpIHsNCisgICAgICBW
UFJJTlQxKCJFbmRpbmcgdHJhbnNhY3Rpb24gb24gdm9sdW1lICV1Li4uIiwg
YWZyb212b2wpOw0KKyAgICAgIGNvZGUgPSBBRlNWb2xFbmRUcmFucyhhY29u
biwgdGlkLCAmcmNvZGUpOw0KKyAgICAgIGlmIChjb2RlIHx8IHJjb2RlKSB7
DQorCSBmcHJpbnRmKFNUREVSUiwiQ291bGQgbm90IGVuZCB0cmFuc2FjdGlv
biBvbiB0aGUgdm9sdW1lICV1XG4iLCBhZnJvbXZvbCk7DQorCSBmcHJpbnRm
KFNUREVSUiwiZXJyb3IgY29kZXM6ICVkIGFuZCAlZFxuIiwgY29kZSwgcmNv
ZGUpOw0KKwkgaWYgKCFlcnJvcikgZXJyb3IgPSAoY29kZT9jb2RlOnJjb2Rl
KTsNCisgICAgICB9DQorICAgICAgVkRPTkU7DQorICAgfQ0KKyAgIGlmIChh
Y29ubikNCisgICAgICByeF9EZXN0cm95Q29ubmVjdGlvbihhY29ubik7DQor
DQorICAgUHJpbnRFcnJvcigiIiwgZXJyb3IpOw0KKyAgIHJldHVybihlcnJv
cik7DQorfQ0KKw0KIC8qbWFwcyB0aGUgaG9zdCBhZGRyZXNzZXMgaW4gPG9s
ZCA+IChwcmVzZW50IGluIG5ldHdvcmsgYnl0ZSBvcmRlcikgdG8NCiAgdGhh
dCBpbjwgbmV3PiAocHJlc2VudCBpbiBob3N0IGJ5dGUgb3JkZXIgKSovDQog
dm9pZCBNYXBOZXR3b3JrVG9Ib3N0KHN0cnVjdCBudmxkYmVudHJ5ICpvbGQs
IHN0cnVjdCBudmxkYmVudHJ5ICpuZXcpDQo=

--1417724665-1573680640-1054314768=:31413--