[OpenAFS-devel] Re: 'replication'

Thomas Mueller thomas.mueller@hrz.tu-chemnitz.de
Thu, 21 Nov 2002 13:16:29 +0100 (MET)


  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.

--1837520328-1227857941-1037880989=:28306
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Thu, 29 Aug 2002, Hartmut Reuter wrote:

> Rubino Gei=DF wrote:
> > Hi,
> >=20
> > this is exactly what we want. Doing something like "vos dump | vos
> > restore" cost far too much time, I guess.  My concern is to get our
> > systems productive in case a major failure make one of the main servers
> > unusable. dump / restore is usable in case one volume get accidentally
> > killed / deleted, but not for restoring >> 100 GB and hundreds of
> > volumes...
> >=20
> > Hartmut, can you publish the changes you made to MR-AFS so we can
> > integrate it into OpenAFS? Or does someone did this??? I'm sure a lot o=
f
> > people would like to get this working.
> >=20
> >=20
> > Bye, ruby
> >=20
>=20
> Ok, here are the changes stripped from MR-AFS specific code. I admit=20
> that this was quick and durty programming, but who ever want's may=20
> improve it.
>=20
> ...

I've integrated the MR-AFS code from Hartmut into OpenAFS 1.2.7.
The patch provides a new subcommand to vos:

vos convertROtoRW -server <machine name> -partition <partition name> -id <v=
olume name or ID> [-force] [-cell <cell name>] [-noauth]=20
[-localauth] [-verbose] [-encrypt] [-help]

This allows to recover very fast from the loss of a partition
from RO-copies if all RO-Copies exist on another partition.
Then these RO-volumes can be made to the new RW-volumes.
Backup of RW-volumes then consists in "vos release".

Please note: this works only on namei fileservers.

Enjoy it and thanks to Hartmut,

Thomas.
--=20
-------------------------------------------------
Thomas M=FCller, TU Chemnitz, URZ, D-09107 Chemnitz
-------------------------------------------------

--1837520328-1227857941-1037880989=:28306
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="vos_convert.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0211211316290.28306@childerich.hrz.tu-chemnitz.de>
Content-Description: Patch: vos convert 
Content-Disposition: attachment; filename="vos_convert.patch"

ZGlmZiAtTmF1cncgMS4yLjcub3JpZy9zcmMvdm9sL25hbWVpX29wcy5jIDEu
Mi43L3NyYy92b2wvbmFtZWlfb3BzLmMNCi0tLSAxLjIuNy5vcmlnL3NyYy92
b2wvbmFtZWlfb3BzLmMJV2VkIEF1ZyAyOCAwNTo1NzozNyAyMDAyDQorKysg
MS4yLjcvc3JjL3ZvbC9uYW1laV9vcHMuYwlUaHUgTm92IDIxIDEzOjEzOjA2
IDIwMDINCkBAIC00Miw2ICs0Miw3IEBADQogI2luY2x1ZGUgInZpY2Vpbm9k
ZS5oIg0KICNpbmNsdWRlICJ2b2xkZWZzLmgiDQogI2luY2x1ZGUgInBhcnRp
dGlvbi5oIg0KKyNpbmNsdWRlIDxhZnMvZXJyb3JzLmg+DQogDQogZXh0ZXJu
IGNoYXIgKnZvbHV0aWxfUGFydGl0aW9uTmFtZV9yKGludCB2b2xpZCwgY2hh
ciAqYnVmLCBpbnQgYnVmbGVuKTsNCiANCkBAIC0xMzYxLDcgKzEzNjIsMjEz
IEBADQogICAgIH0NCiAgICAgcmV0dXJuIDA7DQogfQ0KKy8qDQorICogQ29u
dmVydCB0aGUgVm9sdW1lSW5mbyBmaWxlIGZyb20gUk8gdG8gUlcNCisgKiB0
aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IG5hbWVpX2NvbnZlcnRST3RvUld2
b2x1bWUoKQ0KKyAqLw0KKw0KK3N0YXRpYyBhZnNfaW50MzIgY29udmVydFZv
bHVtZUluZm8oZmRyLCBmZHcsIHZpZCkNCisgICAgaW50IGZkcjsNCisgICAg
aW50IGZkdzsNCisgICAgYWZzX3VpbnQzMiB2aWQ7DQorew0KKyAgICBzdHJ1
Y3QgVm9sdW1lRGlza0RhdGEgdmQ7DQorICAgIGNoYXIgKnA7DQorDQorICAg
IGlmIChyZWFkKGZkciwgJnZkLCBzaXplb2Yoc3RydWN0IFZvbHVtZURpc2tE
YXRhKSkgIT0gc2l6ZW9mKHN0cnVjdCBWb2x1bWVEaXNrRGF0YSkpIHsNCisg
ICAgICAgIExvZygiMSBjb252ZXJ0Vm9sdW1lSW5mbzogcmVhZCBmYWlsZWQg
Zm9yICVsdSB3aXRoIGNvZGUgJWRcbiIsDQorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlkLCBlcnJubyk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAg
IH0NCisgICAgdmQucmVzdG9yZWRGcm9tSWQgPSB2ZC5pZDsgLyogcmVtZW1i
ZXIgdGhlIFJPIHZvbHVtZSBoZXJlICovDQorICAgIHZkLmNsb25lSWQgPSB2
ZC5pZDsNCisgICAgdmQuaWQgPSB2ZC5wYXJlbnRJZDsNCisgICAgdmQudHlw
ZSA9IFJXVk9MOw0KKyAgICB2ZC5kb250U2FsdmFnZSA9IDA7DQorICAgIHZk
LnVuaXF1aWZpZXIgKz0gNTAwMDsgLyoganVzdCBpbiBjYXNlIHRoZXJlIGFy
ZSBzdGlsbCBmaWxlIGNvcGllcyBmcm9tDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGUgb2xkIFJXIHZvbHVtZSBhcm91bmQgKi8NCisg
ICAgcCA9IHN0cnJjaHIodmQubmFtZSwgJy4nKTsNCisgICAgaWYgKHAgJiYg
IXN0cmNtcChwLCAiLnJlYWRvbmx5IikpIHsNCisgICAgICAgIGJ6ZXJvKHAs
IDgpOw0KKyAgICB9DQorICAgICAgICBpZiAod3JpdGUoZmR3LCAmdmQsIHNp
emVvZihzdHJ1Y3QgVm9sdW1lRGlza0RhdGEpKSAhPSBzaXplb2Yoc3RydWN0
IFZvbHVtZURpc2tEYXRhKSkgew0KKyAgICAgICAgTG9nKCIxIGNvbnZlcnRW
b2x1bWVJbmZvOiB3cml0ZSBmYWlsZWQgZm9yICVsdSB3aXRoIGNvZGUgJWRc
biIsDQorICAgICAgICAgICAgICAgICAgICAgICAgdmlkLCBlcnJubyk7DQor
ICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQor
fQ0KKw0KKy8qDQorICogQ29udmVydCBhIFJPLXZvbHVtZSBpbnRvIGEgUlct
dm9sdW1lDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZWNv
dmVyIHZlcnkgZmFzdCBmcm9tIHRoZSBsb3NzIG9mIGEgcGFydGl0aW9uDQor
ICogZnJvbSBSTy1jb3BpZXMgaWYgYWxsIFJPLUNvcGllcyBleGlzdCBvbiBh
bm90aGVyIHBhcnRpdGlvbi4NCisgKiBUaGVuIHRoZXNlIFJPLXZvbHVtZXMg
Y2FuIGJlIG1hZGUgdG8gdGhlIG5ldyBSVy12b2x1bWVzLg0KKyAqIEJhY2t1
cCBvZiBSVy12b2x1bWVzIHRoZW4gY29uc2lzdHMgaW4gInZvcyByZWxlYXNl
Ii4NCisgKg0KKyAqIFdlIG11c3QgbWFrZSBzdXJlIGluIHRoaXMgcGFydGl0
aW9uIGV4aXN0cyBvbmx5IHRoZSBSTy12b2x1bWUgd2hpY2gNCisgKiBpcyB0
eXBpY2FsIGZvciByZW1vdGUgcmVwbGljYXMuDQorICoNCisgKiBUaGVuIHRo
ZSBsaW5rdGFibGUgaXMgYWxyZWFkeSBvaywNCisgKiAgICAgIHRoZSB2bm9k
ZSBmaWxlcyBuZWVkIHRvIGJlIHJlbmFtZWQNCisgKiAgICAgIHRoZSB2b2xp
bmZvIGZpbGUgbmVlZHMgdG8gYmUgcmVwbGFjZWQgYnkgYW5vdGhlciBvbmUg
d2l0aA0KKyAqICAgICAgICAgICAgICAgICAgICAgIHNsaWdodGx5IGRpZmZl
cmVudCBjb250ZW50cyBhbmQgbmV3IG5hbWUuDQorICogVGhlIHZvbHVtZSBo
ZWFkZXIgZmlsZSBvZiB0aGUgUk8tdm9sdW1lIGluIHRoZSAvdmljZXA8eD4g
ZGlyZWN0b3J5DQorICogaXMgZGVzdHJveWVkIGJ5IHRoaXMgY2FsbC4gQSBu
ZXcgaGVhZGVyIGZpbGUgZm9yIHRoZSBSVy12b2x1bWUgbXVzdA0KKyAqIGJl
IGNyZWF0ZWQgYWZ0ZXIgcmV0dXJuIGZyb20gdGhpcyByb3V0aW5lLg0KKyAq
Lw0KKw0KK2ludCBuYW1laV9Db252ZXJ0Uk90b1JXdm9sdW1lKElIYW5kbGVf
dCAqIGgsIGFmc191aW50MzIgdmlkKQ0KK3sNCisgICAgbmFtZWlfdCBuOw0K
KyAgICBjaGFyIGRpcl9uYW1lWzUxMl0sIG9sZHBhdGhbNTEyXSwgbmV3cGF0
aFs1MTJdOw0KKyAgICBjaGFyIHNtYWxsTmFtZVs2NF07DQorICAgIGNoYXIg
bGFyZ2VOYW1lWzY0XTsNCisgICAgY2hhciBpbmZvTmFtZVs2NF07DQorICAg
IElIYW5kbGVfdCB0X2loOw0KKyAgICBjaGFyIGluZm9TZWVuID0gMDsNCisg
ICAgY2hhciBzbWFsbFNlZW4gPSAwOw0KKyAgICBjaGFyIGxhcmdlU2VlbiA9
IDA7DQorICAgIGNoYXIgbGlua1NlZW4gPSAwOw0KKyAgICBpbnQgY29kZSwg
ZmQsIGZkMjsNCisgICAgY2hhciAqcDsNCisgICAgRElSICpkaXJwOw0KKyAg
ICBzdHJ1Y3QgZGlyZW50ICpkcDsNCisgICAgc3RydWN0IFZpY2VJbm9kZUlu
Zm8gaW5mbzsNCisNCisgICAgbmFtZWlfSGFuZGxlVG9OYW1lKCZuLCBoKTsN
CisgICAgc3RyY3B5KGRpcl9uYW1lLCBuLm5fcGF0aCk7DQorICAgIHAgPSBz
dHJyY2hyKGRpcl9uYW1lLCAnLycpOw0KKyAgICAqcCA9IDA7DQorICAgIGRp
cnAgPSBvcGVuZGlyKGRpcl9uYW1lKTsNCisgICAgaWYgKCFkaXJwKSB7DQor
ICAgICAgICBMb2coIjEgbmFtZWlfQ29udmVydFJPdG9SV3ZvbHVtZTogQ291
bGQgbm90IG9wZW5kaXIoJXMpXG4iLA0KKyAgICAgICAgICAgIGRpcl9uYW1l
KTsNCisgICAgICAgIHJldHVybiBFSU87DQorICAgIH0NCisNCisgICAgd2hp
bGUgKGRwID0gcmVhZGRpcihkaXJwKSkgew0KKyAgICAgICAgLyogc3RydWN0
IFZpY2VJbm9kZUluZm8gaW5mbzsgKi8NCisNCisgICAgICAgIGlmICgqZHAt
PmRfbmFtZSA9PSAnLicpIGNvbnRpbnVlOw0KKyAgICAgICAgaWYgKERlY29k
ZUlub2RlKGRpcl9uYW1lLCBkcC0+ZF9uYW1lLCAmaW5mbywgaC0+aWhfdmlk
KTwwKSB7DQorICAgICAgICAgICAgTG9nKCIxIG5hbWVpX0NvbnZlcnRST3Rv
Uld2b2x1bWU6IERlY29kZUlub2RlIGZhaWxlZCBmb3IgJXMvJXNcbiIsDQor
ICAgICAgICAgICAgICAgIGRpcl9uYW1lLCBkcC0+ZF9uYW1lKTsNCisgICAg
ICAgICAgICBjbG9zZWRpcihkaXJwKTsNCisgICAgICAgICAgICByZXR1cm4g
LTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoaW5mby51LnBhcmFtWzFd
ICE9IC0xKSB7DQorICAgICAgICAgICAgTG9nKCIxIG5hbWVpX0NvbnZlcnRS
T3RvUld2b2x1bWU6IGZvdW5kIG90aGVyIHRoYW4gdm9sdW1lIHNwZWNpYWwg
ZmlsZSAlcy8lc1xuIiwNCisgICAgICAgICAgICAgICAgZGlyX25hbWUsIGRw
LT5kX25hbWUpOw0KKyAgICAgICAgICAgIGNsb3NlZGlyKGRpcnApOw0KKyAg
ICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm
IChpbmZvLnUucGFyYW1bMF0gIT0gdmlkKSB7DQorICAgICAgICAgICAgaWYg
KGluZm8udS5wYXJhbVswXSA9PSBoLT5paF92aWQpIHsNCisgICAgICAgICAg
ICAgICAgaWYgKGluZm8udS5wYXJhbVsyXSA9PSBWSV9MSU5LVEFCTEUpIHsg
ICAvKiBsaW5rIHRhYmxlICovDQorICAgICAgICAgICAgICAgICAgICBsaW5r
U2VlbiA9IDE7DQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCisg
ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICBMb2coIjEgbmFtZWlfQ29udmVydFJPdG9SV3ZvbHVtZTogZm91bmQgc3Bl
Y2lhbCBmaWxlICVzLyVzIGZvciB2b2x1bWUgJWx1XG4iLA0KKyAgICAgICAg
ICAgICAgICBkaXJfbmFtZSwgZHAtPmRfbmFtZSwgaW5mby51LnBhcmFtWzBd
KTsNCisgICAgICAgICAgICBjbG9zZWRpcihkaXJwKTsNCisgICAgICAgICAg
ICByZXR1cm4gVlZPTEVYSVNUUzsNCisgICAgICAgIH0NCisgICAgICAgIGlm
IChpbmZvLnUucGFyYW1bMl0gPT0gVklfVk9MSU5GTykgeyAgIC8qIHZvbHVt
ZSBpbmZvIGZpbGUgKi8NCisgICAgICAgICAgICBzdHJjcHkoaW5mb05hbWUs
IGRwLT5kX25hbWUpOw0KKyAgICAgICAgICAgIGluZm9TZWVuID0gMTsNCisg
ICAgICAgIH0NCisgICAgICAgIGVsc2UgaWYgKGluZm8udS5wYXJhbVsyXSA9
PSBWSV9TTUFMTElOREVYKSB7ICAgLyogc21hbGwgdm5vZGVzIGZpbGUgKi8N
CisgICAgICAgICAgICBzdHJjcHkoc21hbGxOYW1lLCBkcC0+ZF9uYW1lKTsN
CisgICAgICAgICAgICBzbWFsbFNlZW4gPSAxOw0KKyAgICAgICAgfQ0KKyAg
ICAgICAgZWxzZSBpZiAoaW5mby51LnBhcmFtWzJdID09IFZJX0xBUkdFSU5E
RVgpIHsgICAvKiBsYXJnZSB2bm9kZXMgZmlsZSAqLw0KKyAgICAgICAgICAg
IHN0cmNweShsYXJnZU5hbWUsIGRwLT5kX25hbWUpOw0KKyAgICAgICAgICAg
IGxhcmdlU2VlbiA9IDE7DQorICAgICAgICB9DQorICAgICAgICBlbHNlIHsN
CisgICAgICAgICAgICBjbG9zZWRpcihkaXJwKTsNCisgICAgICAgICAgICBM
b2coIjEgbmFtZWlfQ29udmVydFJPdG9SV3ZvbHVtZTogdW5rbm93biB0eXBl
ICVkIG9mIHNwZWNpYWwgZmlsZSBmb3VuZCA6ICVzLyVzXG4iLA0KKyAgICAg
ICAgICAgICAgICBpbmZvLnUucGFyYW1bMl0sIGRpcl9uYW1lLCBkcC0+ZF9u
YW1lKTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQor
ICAgIH0NCisgICAgY2xvc2VkaXIoZGlycCk7DQorDQorICAgIGlmICghaW5m
b1NlZW4gfHwgIXNtYWxsU2VlbiB8fCAhbGFyZ2VTZWVuIHx8ICFsaW5rU2Vl
bikgew0KKyAgICAgICAgTG9nKCIxIG5hbWVpX0NvbnZlcnRST3RvUld2b2x1
bWU6IG5vdCBhbGwgc3BlY2lhbCBmaWxlcyBmb3VuZCBpbiAlc1xuIiwNCisg
ICAgICAgICAgICBkaXJfbmFtZSk7DQorICAgICAgICAgICAgcmV0dXJuIC0x
Ow0KKyAgICB9DQorDQorICAgIC8qDQorICAgICAqIElmIHdlIGNvbWUgaGVy
ZSB0aGVuIHRoZXJlIHdhcyBvbmx5IGEgUk8tdm9sdW1lIGFuZCB3ZSBjYW4g
c2FmZWx5DQorICAgICAqIHByb2NlZWQuDQorICAgICAqLw0KKw0KKyAgICBi
emVybygmdF9paCwgc2l6ZW9mKHRfaWgpKTsNCisgICAgdF9paC5paF9kZXYg
PSBoLT5paF9kZXY7DQorICAgIHRfaWguaWhfdmlkID0gaC0+aWhfdmlkOw0K
Kw0KKyAgICBzcHJpbnRmKG9sZHBhdGgsICIlcy8lcyIsIGRpcl9uYW1lLCBp
bmZvTmFtZSk7DQorICAgIGZkID0gb3BlbihvbGRwYXRoLCBPX1JEV1IsIDAp
Ow0KKyAgICBpZiAoZmQgPCAwKSB7DQorICAgICAgICBMb2coIjEgbmFtZWlf
Q29udmVydFJPdG9SV3ZvbHVtZTogY291bGQgbm90IG9wZW4gUk8gaW5mbyBm
aWxlOiAlc1xuIiwNCisgICAgICAgICAgICBvbGRwYXRoKTsNCisgICAgICAg
IHJldHVybiAtMTsNCisgICAgfQ0KKyAgICB0X2loLmloX2lubyA9IG5hbWVp
X01ha2VTcGVjSW5vKGgtPmloX3ZpZCwgVklfVk9MSU5GTyk7DQorICAgIG5h
bWVpX0hhbmRsZVRvTmFtZSgmbiwgJnRfaWgpOw0KKyAgICBmZDIgPSBvcGVu
KG4ubl9wYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1RSVU5DfE9fUkRXUiwgMCk7
DQorICAgIGlmIChmZDIgPCAwKSB7DQorICAgICAgICBMb2coIjEgbmFtZWlf
Q29udmVydFJPdG9SV3ZvbHVtZTogY291bGQgbm90IGNyZWF0ZSBSVyBpbmZv
IGZpbGU6ICVzXG4iLA0KKyAgICAgICAgICAgIG4ubl9wYXRoKTsNCisgICAg
ICAgIGNsb3NlKGZkKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0K
KyAgICBjb2RlID0gY29udmVydFZvbHVtZUluZm8oZmQsIGZkMiwgaC0+aWhf
dmlkKTsNCisgICAgY2xvc2UoZmQpOw0KKyAgICBpZiAoY29kZSkgew0KKyAg
ICAgICAgY2xvc2UoZmQyKTsNCisgICAgICAgIHVubGluayhuLm5fcGF0aCk7
DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgU2V0T0dNKGZk
MiwgaC0+aWhfdmlkLCAxKTsNCisgICAgY2xvc2UoZmQyKTsNCiANCisgICAg
dF9paC5paF9pbm8gPSBuYW1laV9NYWtlU3BlY0lubyhoLT5paF92aWQsIFZJ
X1NNQUxMSU5ERVgpOw0KKyAgICBuYW1laV9IYW5kbGVUb05hbWUoJm4sICZ0
X2loKTsNCisgICAgc3ByaW50ZihuZXdwYXRoLCAiJXMvJXMiLCBkaXJfbmFt
ZSwgc21hbGxOYW1lKTsNCisgICAgZmQgPSBvcGVuKG5ld3BhdGgsIE9fUkRX
UiwgMCk7DQorICAgIGlmIChmZCA8IDApIHsNCisgICAgICAgIExvZygiMSBu
YW1laV9Db252ZXJ0Uk90b1JXdm9sdW1lOiBjb3VsZCBub3Qgb3BlbiBTbWFs
bEluZGV4IGZpbGU6ICVzXG4iLA0KKyAgICAgICAgICAgIG5ld3BhdGgpOw0K
KyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIFNldE9HTShmZCwg
aC0+aWhfdmlkLCAyKTsNCisgICAgY2xvc2UoZmQpOw0KKyAgICBsaW5rKG5l
d3BhdGgsIG4ubl9wYXRoKTsNCisgICAgdW5saW5rKG5ld3BhdGgpOw0KKw0K
KyAgICB0X2loLmloX2lubyA9IG5hbWVpX01ha2VTcGVjSW5vKGgtPmloX3Zp
ZCwgVklfTEFSR0VJTkRFWCk7DQorICAgIG5hbWVpX0hhbmRsZVRvTmFtZSgm
biwgJnRfaWgpOw0KKyAgICBzcHJpbnRmKG5ld3BhdGgsICIlcy8lcyIsIGRp
cl9uYW1lLCBsYXJnZU5hbWUpOw0KKyAgICBmZCA9IG9wZW4obmV3cGF0aCwg
T19SRFdSLCAwKTsNCisgICAgaWYgKGZkIDwgMCkgew0KKyAgICAgICAgTG9n
KCIxIG5hbWVpX0NvbnZlcnRST3RvUld2b2x1bWU6IGNvdWxkIG5vdCBvcGVu
IExhcmdlSW5kZXggZmlsZTogJXNcbiIsDQorICAgICAgICAgICAgbmV3cGF0
aCk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgU2V0T0dN
KGZkLCBoLT5paF92aWQsIDMpOw0KKyAgICBjbG9zZShmZCk7DQorICAgIGxp
bmsobmV3cGF0aCwgbi5uX3BhdGgpOw0KKyAgICB1bmxpbmsobmV3cGF0aCk7
DQorDQorICAgIHVubGluayhvbGRwYXRoKTsNCisgICAgcmV0dXJuIDA7DQor
fQ0KIA0KIC8qIFByaW50SW5vZGUNCiAgKg0KZGlmZiAtTmF1cncgMS4yLjcu
b3JpZy9zcmMvdm9sc2VyL3ZvbGludC54ZyAxLjIuNy9zcmMvdm9sc2VyL3Zv
bGludC54Zw0KLS0tIDEuMi43Lm9yaWcvc3JjL3ZvbHNlci92b2xpbnQueGcJ
U2F0IE5vdiAgNCAxMTowNjozMyAyMDAwDQorKysgMS4yLjcvc3JjL3ZvbHNl
ci92b2xpbnQueGcJU2F0IE5vdiAxNiAxMjozNDo0OSAyMDAyDQpAQCAtNDcs
NiArNDcsNyBAQA0KICNkZWZpbmUJICAgIFZPTFNFVElORk8JCTEyNg0KICNk
ZWZpbmUJICAgIFZPTFhMSVNUUEFSVElUSU9OUwkxMjcNCiAjZGVmaW5lCSAg
ICBWT0xGT1JXQVJETVVMVElQTEUgIDEyOA0KKyNkZWZpbmUgICAgIFZPTENP
TlZFUlRSTyAgICAgICAgMTQxDQogDQogY29uc3QgU0laRSA9IDEwMjQ7DQog
DQpAQCAtMzkwLDMgKzM5MSw4IEBADQogICBJTiBzdHJ1Y3QgcmVzdG9yZUNv
b2tpZSAqY29va2llLA0KICAgT1VUIG1hbnlSZXN1bHRzICpyZXN1bHRzDQog
KSA9IFZPTEZPUldBUkRNVUxUSVBMRTsNCisNCitwcm9jIENvbnZlcnRST3Rv
Uld2b2x1bWUoDQorICBJTiBhZnNfaW50MzIgcGFydGlkLA0KKyAgSU4gYWZz
X2ludDMyIHZvbGlkDQorKSA9IFZPTENPTlZFUlRSTzsNCmRpZmYgLU5hdXJ3
IDEuMi43Lm9yaWcvc3JjL3ZvbHNlci92b2xwcm9jcy5jIDEuMi43L3NyYy92
b2xzZXIvdm9scHJvY3MuYw0KLS0tIDEuMi43Lm9yaWcvc3JjL3ZvbHNlci92
b2xwcm9jcy5jCVNhdCBPY3QgMTMgMDY6MjI6MTEgMjAwMQ0KKysrIDEuMi43
L3NyYy92b2xzZXIvdm9scHJvY3MuYwlXZWQgTm92IDIwIDE2OjA4OjU1IDIw
MDINCkBAIC0yNjgxLDYgKzI2ODEsMTEzIEBADQogICAgIHJldHVybiBlcnJv
cjsNCiB9DQogDQorI2lmZGVmIEFGU19OQU1FSV9FTlYNCisvKiANCisgKiBJ
bm9kZSBudW1iZXIgZm9ybWF0ICAoZnJvbSBuYW1laV9vcHMuYyk6IA0KKyAq
IGxvdyAyNiBiaXRzIC0gdm5vZGUgbnVtYmVyIC0gYWxsIDEncyBpZiB2b2x1
bWUgc3BlY2lhbCBmaWxlLg0KKyAqIG5leHQgMyBiaXRzIC0gdGFnDQorICog
bmV4dCAzIGJpdHMgc3BhcmUgKDAncykNCisgKiBoaWdoIDMyIGJpdHMgLSB1
bmlxdWlmaWVyIChyZWd1bGFyKSBvciB0eXBlIGlmIHNwYXJlDQorICovDQor
I2RlZmluZSBOQU1FSV9WTk9ERU1BU0sgICAgMHgwMDNmZmZmZmYNCisjZGVm
aW5lIE5BTUVJX1RBR01BU0sgICAgICAweDcNCisjZGVmaW5lIE5BTUVJX1RB
R1NISUZUICAgICAyNg0KKyNkZWZpbmUgTkFNRUlfVU5JUU1BU0sgICAgIDB4
ZmZmZmZmZmYNCisjZGVmaW5lIE5BTUVJX1VOSVFTSElGVCAgICAzMg0KKyNk
ZWZpbmUgTkFNRUlfSU5PREVTUEVDSUFMICgoSW5vZGUpTkFNRUlfVk5PREVN
QVNLKQ0KKyNkZWZpbmUgTkFNRUlfVk5PREVTUEVDSUFMIE5BTUVJX1ZOT0RF
TUFTSw0KKyNlbmRpZiAvKiBBRlNfTkFNRUlfRU5WICovDQorDQorYWZzX2lu
dDMyIFNBRlNWb2xDb252ZXJ0Uk90b1JXdm9sdW1lKGFjaWQsIHBhcnRJZCwg
dm9sdW1lSWQpDQorICAgIHN0cnVjdCByeF9jYWxsICphY2lkOw0KKyAgICBh
ZnNfaW50MzIgcGFydElkOw0KKyAgICBhZnNfaW50MzIgdm9sdW1lSWQ7DQor
ew0KKyNpZmRlZiBBRlNfTkFNRUlfRU5WDQorICAgIERJUiAqZGlycDsNCisg
ICAgY2hhciBwbmFtZVsxNl07DQorICAgIGNoYXIgdm9sbmFtZVsyMF07DQor
ICAgIGFmc19pbnQzMiBlcnJvciA9IDA7DQorICAgIGFmc19pbnQzMiB2b2xp
ZDsNCisgICAgaW50IGZvdW5kID0gMDsNCisgICAgY2hhciBjYWxsZXJbTUFY
S1RDTkFNRUxFTl07DQorICAgIGNoYXIgaGVhZGVybmFtZVsxNl07DQorICAg
IGNoYXIgb3BhdGhbMjU2XTsNCisgICAgY2hhciBucGF0aFsyNTZdOw0KKyAg
ICBzdHJ1Y3QgVm9sdW1lRGlza0hlYWRlciBoOw0KKyAgICBpbnQgZmQ7DQor
ICAgIElIYW5kbGVfdCAqaWg7DQorICAgIElub2RlIGlubzsNCisgICAgc3Ry
dWN0IERpc2tQYXJ0aXRpb24gKmRwOw0KKw0KKyAgICBpZiAoIWFmc2NvbmZf
U3VwZXJVc2VyKHRkaXIsIGFjaWQsIGNhbGxlcikpIHJldHVybiBWT0xTRVJC
QURfQUNDRVNTOy8qbm90IGEgc3VwZXIgdXNlciovDQorICAgIGlmKEdldFBh
cnROYW1lKHBhcnRJZCwgcG5hbWUpKSByZXR1cm4gVk9MU0VSSUxMRUdBTF9Q
QVJUSVRJT047DQorICAgIGRpcnAgPSBvcGVuZGlyKHBuYW1lKTsNCisgICAg
aWYoZGlycCA9PSBOVUxMKSByZXR1cm4gVk9MU0VSSUxMRUdBTF9QQVJUSVRJ
T047DQorICAgIHN0cmNweSh2b2xuYW1lLCIiKTsNCisNCisgICAgd2hpbGUo
c3RyY21wKHZvbG5hbWUsIkVPRCIpICYmICFmb3VuZCkgeyAvKndoaWxlIHRo
ZXJlIGFyZSBtb3JlIHZvbHVtZXMgaW4gdGhlIHBhcnRpdGlvbiAqLw0KKyAg
ICAgICAgR2V0TmV4dFZvbChkaXJwLHZvbG5hbWUsJnZvbGlkKTsNCisgICAg
ICAgIGlmKHN0cmNtcCh2b2xuYW1lLCIiKSkgey8qIGl0cyBhIHZvbHVtZSAq
Lw0KKwkgICAgaWYodm9saWQgPT0gdm9sdW1lSWQpIGZvdW5kID0gMTsNCisJ
fQ0KKyAgICB9DQorICAgIGlmICghZm91bmQpIHJldHVybiBFTk9FTlQ7DQor
ICAgIHNwcmludGYoaGVhZGVybmFtZSwgVkZPUk1BVCwgdm9sdW1lSWQpOw0K
KyAgICBzcHJpbnRmKG9wYXRoLCIlcy8lcyIsIHBuYW1lLCBoZWFkZXJuYW1l
KTsNCisgICAgZmQgPSBvcGVuKG9wYXRoLCBPX1JET05MWSk7DQorICAgIGlm
IChmZCA8IDApIHsNCisgICAgICAgIExvZygiMSBTQUZTX1ZvbENvbnZlcnRS
T3RvUld2b2x1bWU6IENvdWxkbid0IG9wZW4gaGVhZGVyIGZvciBSTy12b2x1
bWUgJWx1LlxuIiwgdm9sdW1lSWQpOw0KKyAgICAgICAgcmV0dXJuIEVOT0VO
VDsNCisgICAgfQ0KKyAgICBpZiAocmVhZChmZCwgJmgsIHNpemVvZihoKSkg
IT0gc2l6ZW9mKGgpKSB7DQorICAgICAgICBMb2coIjEgU0FGU19Wb2xDb252
ZXJ0Uk90b1JXdm9sdW1lOiBDb3VsZG4ndCByZWFkIGhlYWRlciBmb3IgUk8t
dm9sdW1lICVsdS5cbiIsIHZvbHVtZUlkKTsNCisgICAgICAgIGNsb3NlKGZk
KTsNCisgICAgICAgIHJldHVybiBFSU87DQorICAgIH0NCisgICAgY2xvc2Uo
ZmQpOw0KKyAgICBGU1lOQ19hc2tmcyh2b2x1bWVJZCwgcG5hbWUsIEZTWU5D
X1JFU1RPUkVWT0xVTUUsIDApOw0KKw0KKyAgICBmb3IoZHAgPSBEaXNrUGFy
dGl0aW9uTGlzdDsgZHAgJiYgc3RyY21wKGRwLT5uYW1lLCBwbmFtZSk7IGRw
ID0gZHAtPm5leHQpIDsNCisgICAgaWYgKCFkcCkgew0KKyAgICAgICAgTG9n
KCIxIFNBRlNfVm9sQ29udmVydFJPdG9SV3ZvbHVtZTogQ291bGRuJ3QgZmlu
ZCBEaXNrUGFydGl0aW9uIGZvciAlc1xuIiwgcG5hbWUpOw0KKyAgICAgICBy
ZXR1cm4gRUlPOw0KKyAgICB9DQorICAgIGlubyA9IG5hbWVpX01ha2VTcGVj
SW5vKGgucGFyZW50LCBWSV9MSU5LVEFCTEUpOw0KKyAgICBJSF9JTklUKGlo
LCBkcC0+ZGV2aWNlLCBoLnBhcmVudCwgaW5vKTsNCisNCisgICAgZXJyb3Ig
PSBuYW1laV9Db252ZXJ0Uk90b1JXdm9sdW1lKGloLCB2b2x1bWVJZCk7DQor
ICAgIGlmIChlcnJvcikNCisgICAgICAgIHJldHVybiBlcnJvcjsNCisgICAg
aC5pZCA9IGgucGFyZW50Ow0KKyAgICBoLnZvbHVtZUluZm9faGkgPSBoLmlk
Ow0KKyAgICBoLnNtYWxsVm5vZGVJbmRleF9oaSA9IGguaWQ7DQorICAgIGgu
bGFyZ2VWbm9kZUluZGV4X2hpID0gaC5pZDsNCisgICAgaC5saW5rVGFibGVf
aGkgPSBoLmlkOw0KKyAgICBzcHJpbnRmKGhlYWRlcm5hbWUsIFZGT1JNQVQs
IGguaWQpOw0KKyAgICBzcHJpbnRmKG5wYXRoLCAiJXMvJXMiLCBwbmFtZSwg
aGVhZGVybmFtZSk7DQorICAgIGZkID0gb3BlbihucGF0aCwgT19DUkVBVCB8
IE9fRVhDTCB8IE9fUkRXUiwgMDY0NCk7DQorICAgIGlmIChmZCA8IDApIHsN
CisgICAgICAgIExvZygiMSBTQUZTX1ZvbENvbnZlcnRST3RvUld2b2x1bWU6
IENvdWxkbid0IGNyZWF0ZSBoZWFkZXIgZm9yIFJXLXZvbHVtZSAlbHUuXG4i
LCBoLmlkKTsNCisgICAgICAgIHJldHVybiBFSU87DQorICAgIH0NCisgICAg
aWYgKHdyaXRlKGZkLCAmaCwgc2l6ZW9mKGgpKSAhPSBzaXplb2YoaCkpIHsN
CisgICAgICAgIExvZygiMSBTQUZTX1ZvbENvbnZlcnRST3RvUld2b2x1bWU6
IENvdWxkbid0IHdyaXRlIGhlYWRlciBmb3IgUlctdm9sdW1lICVsdS5cbiIs
IGguaWQpOw0KKyAgICAgICAgY2xvc2UoZmQpOw0KKyAgICAgICAgcmV0dXJu
IEVJTzsNCisgICAgfQ0KKyAgICBjbG9zZShmZCk7DQorICAgIGlmICh1bmxp
bmsob3BhdGgpIDwgMCkgew0KKyAgICAgICAgTG9nKCIxIFNBRlNfVm9sQ29u
dmVydFJPdG9SV3ZvbHVtZTogQ291bGRuJ3QgdW5saW5rIFJPIGhlYWRlciwg
ZXJyb3IgPSAlZFxuIiwgZXJyb3IpOw0KKyAgICB9DQorICAgIEZTWU5DX2Fz
a2ZzKHZvbHVtZUlkLCBwbmFtZSwgRlNZTkNfRE9ORSwgMCk7DQorICAgIEZT
WU5DX2Fza2ZzKGguaWQsIHBuYW1lLCBGU1lOQ19PTiwgMCk7DQorICAgIHJl
dHVybiAwOw0KKyNlbHNlIC8qIEFGU19OQU1FSV9FTlYgKi8NCisgICAgcmV0
dXJuIEVJTlZBTDsNCisjZW5kaWYgLyogQUZTX05BTUVJX0VOViAqLw0KK30N
CisNCiAvKiBHZXRQYXJ0TmFtZSAtIG1hcCBwYXJ0aWQgKGEgZGVjaW1hbCBu
dW1iZXIpIGludG8gcG5hbWUgKGEgc3RyaW5nKQ0KICAqIFNpbmNlIGZvciBO
VCB3ZSBhY3R1YWxseSB3YW50IHRvIHJldHVybiB0aGUgZHJpdmUgbmFtZSwg
d2UgbWFwIHRocm91Z2ggdGhlDQogICogcGFydGl0aW9uIHN0cnVjdC4NCmRp
ZmYgLU5hdXJ3IDEuMi43Lm9yaWcvc3JjL3ZvbHNlci92b3MuYyAxLjIuNy9z
cmMvdm9sc2VyL3Zvcy5jDQotLS0gMS4yLjcub3JpZy9zcmMvdm9sc2VyL3Zv
cy5jCVR1ZSBBdWcgIDYgMDA6MDg6MDIgMjAwMg0KKysrIDEuMi43L3NyYy92
b2xzZXIvdm9zLmMJVGh1IE5vdiAyMSAwODoxMDoxNSAyMDAyDQpAQCAtMzk4
OCw2ICszOTg4LDE0NyBAQA0KICAgICByZXR1cm4gMDsNCiB9DQogDQorc3Rh
dGljIENvbnZlcnRSTyhhcykNCityZWdpc3RlciBzdHJ1Y3QgY21kX3N5bmRl
c2MgKmFzOw0KKw0KK3sNCisgICAgYWZzX2ludDMyIHBhcnRpdGlvbiA9IC0x
Ow0KKyAgICBhZnNfaW50MzIgc2VydmVyLCB2b2xpZCwgY29kZSwgaSwgc2Ft
ZTsNCisgICAgc3RydWN0IG52bGRiZW50cnkgZW50cnksIHN0b3JlRW50cnk7
DQorICAgIGFmc19pbnQzMiB2Y29kZTsNCisgICAgYWZzX2ludDMyIHJ3aW5k
ZXg7DQorICAgIGFmc19pbnQzMiByd3NlcnZlciA9IDA7DQorICAgIGFmc19p
bnQzMiByd3BhcnRpdGlvbjsNCisgICAgYWZzX2ludDMyIHJvaW5kZXg7DQor
ICAgIGFmc19pbnQzMiByb3NlcnZlciA9IDA7DQorICAgIGFmc19pbnQzMiBy
b3BhcnRpdGlvbjsNCisgICAgaW50IGZvcmNlID0gMDsNCisgICAgc3RydWN0
IHJ4X2Nvbm5lY3Rpb24gKmFjb25uOw0KKyAgICBjaGFyIGMsIGRjOw0KKw0K
KyAgICBzZXJ2ZXIgPSBHZXRTZXJ2ZXIoYXMtPnBhcm1zWzBdLml0ZW1zLT5k
YXRhKTsNCisgICAgaWYgKCFzZXJ2ZXIpIHsNCisgICAgICAgIGZwcmludGYo
U1RERVJSLCJ2b3M6IGhvc3QgJyVzJyBub3QgZm91bmQgaW4gaG9zdCB0YWJs
ZVxuIixhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEgKTsNCisgICAgICAgIHJl
dHVybiBFTk9FTlQ7DQorICAgIH0NCisgICAgIHBhcnRpdGlvbiA9IHZvbHV0
aWxfR2V0UGFydGl0aW9uSUQoYXMtPnBhcm1zWzFdLml0ZW1zLT5kYXRhKTsN
CisgICAgaWYgKHBhcnRpdGlvbiA8IDApIHsNCisgICAgICAgIGZwcmludGYo
U1RERVJSLCJ2b3M6IGNvdWxkIG5vdCBpbnRlcnByZXQgcGFydGl0aW9uIG5h
bWUgJyVzJ1xuIixhcy0+cGFybXNbMV0uaXRlbXMtPmRhdGEgKTsNCisgICAg
ICAgIHJldHVybiBFTk9FTlQ7DQorICAgIH0NCisgICAgaWYgKCFJc1BhcnRW
YWxpZChwYXJ0aXRpb24sIHNlcnZlciwgJmNvZGUpKSB7DQorICAgICAgICBp
Zihjb2RlKSBQcmludEVycm9yKCIiLGNvZGUpOw0KKyAgICAgICAgZWxzZSBm
cHJpbnRmKFNUREVSUiwidm9zIDogcGFydGl0aW9uICVzIGRvZXMgbm90IGV4
aXN0IG9uIHRoZSBzZXJ2ZXJcbiIsYXMtPnBhcm1zWzFdLml0ZW1zLT5kYXRh
KTsNCisgICAgICAgIHJldHVybiBFTk9FTlQ7DQorICAgIH0NCisgICAgdm9s
aWQgPSB2c3VfR2V0Vm9sdW1lSUQoYXMtPnBhcm1zWzJdLml0ZW1zLT5kYXRh
LCBjc3RydWN0LCAmY29kZSk7DQorICAgIGlmICh2b2xpZCA9PSAwKSB7DQor
ICAgICAgICBpZiAoY29kZSkgUHJpbnRFcnJvcigiIiwgY29kZSk7DQorICAg
ICAgICBlbHNlIGZwcmludGYoU1RERVJSLCAiVW5rbm93biB2b2x1bWUgSUQg
b3IgbmFtZSAnJXMnXG4iLCBhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEpOw0K
KyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIGlmIChhcy0+cGFy
bXNbM10uaXRlbXMpDQorICAgICAgICBmb3JjZSA9IDE7DQorDQorICAgIHZj
b2RlID0gVkxEQl9HZXRFbnRyeUJ5SUQgKHZvbGlkLCAtMSwgJmVudHJ5KTsN
CisgICAgaWYodmNvZGUpIHsNCisgICAgICAgIGZwcmludGYoU1RERVJSLCJD
b3VsZCBub3QgZmV0Y2ggdGhlIGVudHJ5IGZvciB2b2x1bWUgJXUgZnJvbSBW
TERCXG4iLA0KKyAgICAgICAgICAgICAgICB2b2xpZCk7DQorICAgICAgICBQ
cmludEVycm9yKCJjb252ZXJ0Uk90b1JXIiwgY29kZSk7DQorICAgICAgICBy
ZXR1cm4gdmNvZGU7DQorICAgIH0NCisNCisgICAgLyogdXNlIFJPIHZvbGlk
IGV2ZW4gaWYgdXNlciBzcGVjaWZpZWQgUlcgb3IgQksgdm9saWQgKi8NCisN
CisgICAgaWYgKHZvbGlkICE9IGVudHJ5LnZvbHVtZUlkW1JPVk9MXSkNCisg
ICAgICAgIHZvbGlkID0gZW50cnkudm9sdW1lSWRbUk9WT0xdOw0KKw0KKyAg
ICBNYXBIb3N0VG9OZXR3b3JrKCZlbnRyeSk7DQorICAgIGZvciAoaT0wOyBp
PCBlbnRyeS5uU2VydmVyczsgaSsrKSB7DQorICAgICAgICBpZiAoZW50cnku
c2VydmVyRmxhZ3NbaV0gJiBJVFNSV1ZPTCkgew0KKyAgICAgICAgICAgIHJ3
aW5kZXggPSBpOw0KKyAgICAgICAgICAgIHJ3c2VydmVyID0gZW50cnkuc2Vy
dmVyTnVtYmVyW2ldOw0KKyAgICAgICAgICAgIHJ3cGFydGl0aW9uID0gZW50
cnkuc2VydmVyUGFydGl0aW9uW2ldOw0KKyAgICAgICAgfQ0KKyAgICAgICAg
aWYgKGVudHJ5LnNlcnZlckZsYWdzW2ldICYgSVRTUk9WT0wpIHsNCisgICAg
ICAgICAgICBzYW1lID0gVkxEQl9Jc1NhbWVBZGRycyhzZXJ2ZXIsIGVudHJ5
LnNlcnZlck51bWJlcltpXSwgJmNvZGUpOw0KKyAgICAgICAgICAgIGlmIChj
b2RlKSB7DQorICAgICAgICAgICAgICAgIGZwcmludGYoU1RERVJSLCAiRmFp
bGVkIHRvIGdldCBpbmZvIGFib3V0IHNlcnZlcidzICVkIGFkZHJlc3MoZXMp
IGZyb20gdmxzZXJ2ZXIgKGVycj0lZCk7IGFib3J0aW5nIGNhbGwhXG4iLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLCBjb2Rl
KTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOT0VOVDsNCisgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgaWYgKHNhbWUpIHsNCisgICAgICAgICAg
ICAgICAgcm9pbmRleCA9IGk7DQorICAgICAgICAgICAgICAgIHJvc2VydmVy
ID0gZW50cnkuc2VydmVyTnVtYmVyW2ldOw0KKyAgICAgICAgICAgICAgICBy
b3BhcnRpdGlvbiA9IGVudHJ5LnNlcnZlclBhcnRpdGlvbltpXTsNCisgICAg
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
fQ0KKyAgICB9DQorICAgIGlmICghcm9zZXJ2ZXIpIHsNCisgICAgICAgIGZw
cmludGYoU1RERVJSLCAiV2FybmluZzogUk8gdm9sdW1lIGRpZG4ndCBleGlz
dCBpbiB2bGRiIVxuIik7DQorICAgIH0NCisgICAgaWYgKHJvcGFydGl0aW9u
ICE9IHBhcnRpdGlvbikgew0KKyAgICAgICAgZnByaW50ZihTVERFUlIsICJX
YXJuaW5nOiBSTyB2b2x1bWUgc2hvdWxkIGJlIGluIHBhcnRpdGlvbiAlZCBp
bnN0ZWFkIG9mICVkICh2bGRiKVxuIiwgcm9wYXJ0aXRpb24sIHBhcnRpdGlv
bik7DQorICAgIH0NCisNCisgICAgaWYgKHJ3c2VydmVyKSB7DQorICAgICAg
ICBmcHJpbnRmKFNUREVSUiwNCisgICAgICAgICAgICAgICAgIlZMREIgaW5k
aWNhdGVzIHRoYXQgYSBSVyB2b2x1bWUgZXhpc3RzIGFscmVhZHkgb24gJXMg
aW4gcGFydGl0aW9uICVzLlxuIiwgaG9zdHV0aWxfR2V0TmFtZUJ5SU5ldChy
d3NlcnZlciksIHZvbHV0aWxfUGFydGl0aW9uTmFtZShyd3BhcnRpdGlvbikp
Ow0KKyAgICAgICAgaWYgKCFmb3JjZSkgew0KKyAgICAgICAgICAgIGZwcmlu
dGYoU1RERVJSLCAiT3ZlcndyaXRlIHRoaXMgVkxEQiBlbnRyeT8gW3l8bl0g
KG4pXG4iKTsNCisgICAgICAgICAgICBkYyA9IGMgPSBnZXRjaGFyKCk7DQor
ICAgICAgICAgICAgd2hpbGUgKCEoZGM9PUVPRiB8fCBkYz09J1xuJykpIGRj
PWdldGNoYXIoKTsgLyogZ290byBlbmQgb2YgbGluZSAqLw0KKyAgICAgICAg
ICAgIGlmICgoYyAhPSAneScpICYmIChjICE9ICdZJykpIHsNCisgICAgICAg
ICAgICAgICBmcHJpbnRmKFNUREVSUiwgImFib3J0ZWQuXG4iKTsNCisgICAg
ICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgfQ0KKyAgICAg
ICAgfQ0KKyAgICB9DQorDQorICAgIHZjb2RlID0gdWJpa19DYWxsKFZMX1Nl
dExvY2ssIGNzdHJ1Y3QsIDAsIGVudHJ5LnZvbHVtZUlkW1JXVk9MXSwgUldW
T0wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWTE9QX01PVkUpOw0KKyAgICBhY29ubiA9IFVW
X0JpbmQoc2VydmVyLCBBRlNDT05GX1ZPTFVNRVBPUlQpOw0KKyAgICBjb2Rl
ID0gQUZTVm9sQ29udmVydFJPdG9SV3ZvbHVtZShhY29ubiwgcGFydGl0aW9u
LCB2b2xpZCk7DQorICAgIGlmIChjb2RlKSB7DQorICAgICAgICBmcHJpbnRm
KFNUREVSUiwiQ29udmVydGluZyBSTyB2b2x1bWUgJXUgdG8gUlcgdm9sdW1l
IGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsIHZvbGlkLCBjb2RlKTsNCisgICAg
ICAgIFByaW50RXJyb3IoImNvbnZlcnRST3RvUlcgIiwgY29kZSk7DQorICAg
ICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgZW50cnkuc2VydmVyRmxh
Z3Nbcm9pbmRleF0gPSBJVFNSV1ZPTDsNCisgICAgZW50cnkuZmxhZ3MgfD0g
UldfRVhJU1RTOw0KKyAgICBlbnRyeS5mbGFncyAmPSB+QkFDS19FWElTVFM7
DQorICAgIGlmIChyd3NlcnZlcikgew0KKyAgICAgICAgKGVudHJ5Lm5TZXJ2
ZXJzKS0tOw0KKyAgICAgICAgaWYgKHJ3aW5kZXggIT0gZW50cnkublNlcnZl
cnMpIHsNCisgICAgICAgICAgICBlbnRyeS5zZXJ2ZXJOdW1iZXJbcndpbmRl
eF0gPSBlbnRyeS5zZXJ2ZXJOdW1iZXJbZW50cnkublNlcnZlcnNdOw0KKyAg
ICAgICAgICAgIGVudHJ5LnNlcnZlclBhcnRpdGlvbltyd2luZGV4XSA9IGVu
dHJ5LnNlcnZlclBhcnRpdGlvbltlbnRyeS5uU2VydmVyc107DQorICAgICAg
ICAgICAgZW50cnkuc2VydmVyRmxhZ3NbcndpbmRleF0gPSBlbnRyeS5zZXJ2
ZXJGbGFnc1tlbnRyeS5uU2VydmVyc107DQorICAgICAgICAgICAgZW50cnku
c2VydmVyTnVtYmVyW2VudHJ5Lm5TZXJ2ZXJzXSA9IDA7DQorICAgICAgICAg
ICAgZW50cnkuc2VydmVyUGFydGl0aW9uW2VudHJ5Lm5TZXJ2ZXJzXSA9IDA7
DQorICAgICAgICAgICAgZW50cnkuc2VydmVyRmxhZ3NbZW50cnkublNlcnZl
cnNdID0gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbnRyeS5mbGFn
cyAmPSB+Uk9fRVhJU1RTOw0KKyAgICBmb3IgKGk9MDsgaTxlbnRyeS5uU2Vy
dmVyczsgaSsrKSB7DQorICAgICAgICBpZiAoZW50cnkuc2VydmVyRmxhZ3Nb
aV0gJiBJVFNST1ZPTCkgew0KKyAgICAgICAgICAgIGlmICghKGVudHJ5LnNl
cnZlckZsYWdzW2ldICYgKFJPX0RPTlRVU0UgfCBORVdfUkVQU0lURSkpKQ0K
KyAgICAgICAgICAgICAgICBlbnRyeS5mbGFncyB8PSBST19FWElTVFM7DQor
ICAgICAgICB9DQorICAgIH0NCisgICAgTWFwTmV0d29ya1RvSG9zdCgmZW50
cnksICZzdG9yZUVudHJ5KTsNCisgICAgY29kZSA9IFZMREJfUmVwbGFjZUVu
dHJ5KGVudHJ5LnZvbHVtZUlkW1JXVk9MXSwgUldWT0wsICZzdG9yZUVudHJ5
LA0KKyAgICAgICAgICAgICAgICAgICAgICAgKExPQ0tSRUxfT1BDT0RFIHwg
TE9DS1JFTF9BRlNJRCB8IExPQ0tSRUxfVElNRVNUQU1QKSk7DQorICAgIGlm
IChjb2RlKSAgew0KKyAgICAgICAgZnByaW50ZihTVERFUlIsICJXYXJuaW5n
OiB2b2x1bWUgY29udmVydGVkLCBidXQgdmxkYiB1cGRhdGUgZmFpbGVkIHdp
dGggY29kZSAlZCFcbiIsIGNvZGUpOw0KKyAgICB9DQorICAgIHZjb2RlID0g
VVZfTG9ja1JlbGVhc2UoZW50cnkudm9sdW1lSWRbUldWT0xdKTsNCisgICAg
aWYgKHZjb2RlKSB7DQorICAgICAgICBQcmludERpYWdub3N0aWNzKCJ1bmxv
Y2siLCB2Y29kZSk7DQorICAgIH0NCisgICAgcmV0dXJuIGNvZGU7DQorfQ0K
Kw0KIFByaW50RGlhZ25vc3RpY3MoYXN0cmluZywgYWNvZGUpDQogICAgIGNo
YXIgKmFzdHJpbmc7DQogICAgIGFmc19pbnQzMiBhY29kZTsNCkBAIC00Mjc5
LDYgKzQ0MjAsMTMgQEANCiAgICAgY21kX0FkZFBhcm0odHMsICItcHJpbnR1
dWlkIiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwgInByaW50IHV1aWQgb2Yg
aG9zdHMiKTsNCiAgICAgQ09NTU9OUEFSTVM7DQogDQorICAgIHRzID0gY21k
X0NyZWF0ZVN5bnRheCgiY29udmVydFJPdG9SVyIsIENvbnZlcnRSTywgMCwg
ImNvbnZlcnQgYSBSTyB2b2x1bWUgaW50byBhIFJXIHZvbHVtZSAoYWZ0ZXIg
bG9zcyBvZiBvbGQgUlcgdm9sdW1lKSIpOw0KKyAgICBjbWRfQWRkUGFybSh0
cywgIi1zZXJ2ZXIiLCBDTURfU0lOR0xFLDAsICAibWFjaGluZSBuYW1lIik7
DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLXBhcnRpdGlvbiIsIENNRF9TSU5H
TEUsMCwgInBhcnRpdGlvbiBuYW1lIik7DQorICAgIGNtZF9BZGRQYXJtKHRz
LCAiLWlkIiwgQ01EX1NJTkdMRSwgMCwgInZvbHVtZSBuYW1lIG9yIElEIik7
DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLWZvcmNlIiwgQ01EX0ZMQUcsIENN
RF9PUFRJT05BTCwgImRvbid0IGFzayIpOw0KKyAgICBDT01NT05QQVJNUzsN
CisNCiAgICAgY29kZSA9IGNtZF9EaXNwYXRjaChhcmdjLCBhcmd2KTsNCiAg
ICAgaWYgKHJ4SW5pdERvbmUpIHsNCiAJLyogU2h1dCBkb3duIHRoZSB1Ymlr
X2NsaWVudCBhbmQgcnggY29ubmVjdGlvbnMgKi8NCg==
--1837520328-1227857941-1037880989=:28306--