Subject: New diffs for installboot
To: None <port-macppc@netbsd.org>
From: Bill Studenmund <wrstuden@zembu.com>
List: port-macppc
Date: 08/28/2000 20:13:45
  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.

--0-1173438411-967518747=:1045
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.NEB.4.21.0008282012581.1045@candlekeep.home-net.internetconnect.net>

Here are my latest diffs for installboot.

They seem to run fine, and I can make a new partition of the right
type. Unfortunatly I still can't boot it. I get a DEFAULT CATCH error each
time. I'm probably making some sort of syntax error in OF, or the driver
partition needs to be earlier.

Oh, I added support for dealing with non-512-byte blocks, and for passing
an explicit size to the image file. Should be closer to dealing with CD
ROM's.

Take care,

Bill

--0-1173438411-967518747=:1045
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=diffies
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.21.0008282012270.1045@candlekeep.home-net.internetconnect.net>
Content-Description: installboot patches
Content-Disposition: ATTACHMENT; FILENAME=diffies

SW5kZXg6IGluc3RhbGxib290LmMNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvY3Zzcm9vdC9zeXNzcmMvc3lzL2FyY2gvbWFjcHBjL3N0
YW5kL2luc3RhbGxib290L2luc3RhbGxib290LmMsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQNCmRpZmYgLXUgLXIxLjQgaW5zdGFsbGJvb3QuYw0KLS0t
IGluc3RhbGxib290LmMJMTk5OC8wOS8wNSAxNTozMDoyNAkxLjQNCisrKyBp
bnN0YWxsYm9vdC5jCTIwMDAvMDgvMjIgMDM6MDM6MDYNCkBAIC00MCw3ICs0
MCw4IEBADQogI2luY2x1ZGUgPHN5cy9tb3VudC5oPg0KICNpbmNsdWRlIDxz
eXMvdGltZS5oPg0KICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KLSNpbmNsdWRl
IDxzeXMvc3lzY3RsLmg+DQorI2luY2x1ZGUgPHN5cy9kaXNrbGFiZWwuaD4N
CisjaW5jbHVkZSA8c3lzL2RraW8uaD4NCiAjaW5jbHVkZSA8dWZzL3Vmcy9k
aW5vZGUuaD4NCiAjaW5jbHVkZSA8dWZzL3Vmcy9kaXIuaD4NCiAjaW5jbHVk
ZSA8dWZzL2Zmcy9mcy5oPg0KQEAgLTU2LDEzICs1Nyw5IEBADQogI2luY2x1
ZGUgPHN0cmluZy5oPg0KICNpbmNsdWRlIDx1bmlzdGQuaD4NCiANCi0jaW5j
bHVkZSAiZHBtZS5oIg0KLQ0KIGludAl2ZXJib3NlLCBub3dyaXRlOw0KIGNo
YXIJKmJvb3QsICpwcm90bywgKmRldjsNCiANCi0jZGVmaW5lIEJPT1RTRUNU
T1JfT0ZGU0VUIDIwNDgNCi0NCiAjaWZuZGVmIERFRkFVTFRfRU5UUlkNCiAj
ZGVmaW5lIERFRkFVTFRfRU5UUlkgMHg2YzAwMDANCiAjZW5kaWYNCkBAIC04
NSwxOCArODIsMzQgQEANCiBpbnQzMl90CSplbnRyeV9wb2ludF9wOwkJLyog
ZW50cnkgcG9pbnQgKi8NCiBpbnQzMl90CW1heF9ibG9ja19jb3VudDsNCiAN
CisvKiBUaGVzZSBhcmUgc2NyYXRjaCBlbnRyaWVzIGZvciBhbGwgb2YgdGhl
IGFwbSByb3V0aW5lcy4gU2F2ZXMgYSBsaXR0bGUNCisgKiBvbiBzdGFjayBz
cGFjZSAqLw0KK3N0cnVjdCBkcnZyX21hcCAJKmRtOw0KK3N0cnVjdCBwYXJ0
X21hcF9lbnRyeQkqcG1lOw0KKw0KK2ludAkJYnNpemUsIGJzaGlmdDsNCit1
aW50MzJfdAlzZWN0b3Jjb3VudDsNCisNCiBjaGFyCQkqbG9hZHByb3RvYmxv
Y2tzIF9fUCgoY2hhciAqLCBsb25nICopKTsNCi1pbnQJCWxvYWRibG9ja251
bXMgX19QKChjaGFyICosIGludCkpOw0KK2ludAkJbG9hZGJsb2NrbnVtcyBf
X1AoKGNoYXIgKikpOw0KIHN0YXRpYyB2b2lkCWRldnJlYWQgX19QKChpbnQs
IHZvaWQgKiwgZGFkZHJfdCwgc2l6ZV90LCBjaGFyICopKTsNCiBzdGF0aWMg
dm9pZAl1c2FnZSBfX1AoKHZvaWQpKTsNCiBpbnQgCQltYWluIF9fUCgoaW50
LCBjaGFyICpbXSkpOw0KLQ0KK2ludAkJZ2V0X3BhcnRpdGlvbihpbnQsIGlu
dCwgb2ZmX3QgKiwgaW50LCBpbnQpOw0KK2ludAkJd3JpdGVhcHBsZXBhcnRt
YXAoaW50KTsNCitpbnQJCW1ha2Vkcml2ZXJwYXJ0KGludCwgaW50KTsNCitp
bnQJCWZpeHVwX2RyaXZlcihpbnQgZmQsIGludCBzdGFydCwgaW50IHNpemUp
Ow0KKw0KKyNkZWZpbmUJUEFSVF9GT1JDRV9GQUtFCQkweDENCisjZGVmaW5l
CVBBUlRfRk9SQ0VfTlVNQkVSCTB4Mg0KKyNkZWZpbmUJUEFSVF9OT1dSSVRF
CQkweDQNCisjZGVmaW5lCVBBUlRfVkVSQk9TRQkJMHg4DQogDQogc3RhdGlj
IHZvaWQNCiB1c2FnZSgpDQogew0KIAlmcHJpbnRmKHN0ZGVyciwNCi0JCSJ1
c2FnZTogaW5zdGFsbGJvb3QgWy1uXSBbLXZdIDxib290PiA8cHJvdG8+IDxk
ZXZpY2U+XG4iKTsNCisJCSJ1c2FnZTogaW5zdGFsbGJvb3QgWyAtRiB8IC1Q
IDxwYXJ0bnVtYmVyPiBdIFstbl0gWy12XSA8Ym9vdD4gPHByb3RvPiA8ZGV2
aWNlPlxuIik7DQogCWV4aXQoMSk7DQogfQ0KIA0KQEAgLTEwOSwxNiArMTIy
LDU1IEBADQogCWludAlkZXZmZDsNCiAJY2hhcgkqcHJvdG9zdG9yZTsNCiAJ
bG9uZwlwcm90b3NpemU7DQorCW9mZl90CXByb3Rvb2Zmc2V0Ow0KIAlpbnQJ
bWliWzJdOw0KIAlzaXplX3QJc2l6ZTsNCisJaW50CWZvcmNlX3BhcnRpdGlv
biwgZXJyb3IsIGZsYWdzID0gMDsNCisJc3RydWN0CWRpc2tsYWJlbCB0aGVs
YWJlbDsNCiANCi0Jd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJ2
biIpKSAhPSBFT0YpIHsNCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFy
Z3YsICJiOmM6Rm5QOnYiKSkgIT0gRU9GKSB7DQogCQlzd2l0Y2ggKGMpIHsN
CiANCisJCWNhc2UgJ2InOg0KKwkJCWJzaXplID0gYXRvaShvcHRhcmcpOw0K
KwkJCWlmICgoYnNpemUgPCA1MTIpIHx8IChic2l6ZSAmIChic2l6ZSAtMSkp
KSB7DQorCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBibG9jayBzaXpl
LiBNdXN0IGJlIg0KKwkJCQkgICAgIiBhIHBvd2VyIG9mIHR3byBhbmQgYXQg
bGVhc3QgNTEyLlxuIik7DQorCQkJCWV4aXQoMSk7DQorCQkJfQ0KKwkJCWJz
aGlmdCA9IGZmcyhic2l6ZSkgLSAxOw0KKwkJCWJyZWFrOw0KKw0KKwkJY2Fz
ZSAnYyc6DQorCQkJc2VjdG9yY291bnQgPSAoaW50KXN0cnRvdWwob3B0YXJn
LCAoY2hhciAqKilOVUxMLCAxMCk7DQorCQkJYnJlYWs7DQorDQorCQljYXNl
ICdGJzoNCisJCQlpZiAoZmxhZ3MgJiBQQVJUX0ZPUkNFX05VTUJFUikgew0K
KwkJCQlmcHJpbnRmKHN0ZGVyciwgIi1GIGFuZCAtUCBtYXkgbm90IGJlIHVz
ZWQiDQorCQkJCSAgICAiIHRvZ2V0aGVyLlxuIik7DQorCQkJCWV4aXQoMSk7
DQorCQkJfQ0KKwkJCWZsYWdzIHw9IFBBUlRfRk9SQ0VfRkFLRTsNCisJCQli
cmVhazsNCiAJCWNhc2UgJ24nOg0KIAkJCS8qIERvIG5vdCBhY3R1YWxseSB3
cml0ZSB0aGUgYm9vdGJsb2NrIHRvIGRpc2sgKi8NCiAJCQlub3dyaXRlID0g
MTsNCiAJCQlicmVhazsNCisJCWNhc2UgJ1AnOg0KKwkJCWlmIChmbGFncyAm
IFBBUlRfRk9SQ0VfRkFLRSkgew0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi1G
IGFuZCAtUCBtYXkgbm90IGJlIHVzZWQiDQorCQkJCSAgICAiIHRvZ2V0aGVy
LlxuIik7DQorCQkJCWV4aXQoMSk7DQorCQkJfQ0KKwkJCWZsYWdzIHw9IFBB
UlRfRk9SQ0VfTlVNQkVSOw0KKwkJCWZvcmNlX3BhcnRpdGlvbiA9IGF0b2ko
b3B0YXJnKTsNCisJCQlpZiAoKGZvcmNlX3BhcnRpdGlvbiA8IDEpIHx8IChm
b3JjZV9wYXJ0aXRpb24gPiA2MykpIHsNCisJCQkJZnByaW50ZihzdGRlcnIs
ICJQYXJ0aXRpb24gbnVtYmVyIG11c3QgYmUiDQorCQkJCSAgICAiIGJldHdl
ZW4gMSBhbmQgNjMgaW5jbHVzaXZlLlxuIik7DQorCQkJCWV4aXQoMSk7DQor
CQkJfQ0KKwkJCWJyZWFrOw0KIAkJY2FzZSAndic6DQogCQkJLyogQ2hhdCAq
Lw0KIAkJCXZlcmJvc2UgPSAxOw0KQEAgLTE0NiwzMyArMTk4LDYxIEBADQog
CWlmICgocHJvdG9zdG9yZSA9IGxvYWRwcm90b2Jsb2Nrcyhwcm90bywgJnBy
b3Rvc2l6ZSkpID09IE5VTEwpDQogCQlleGl0KDEpOw0KIA0KKyNpZiAwDQog
CS8qIE9wZW4gYW5kIGNoZWNrIHJhdyBkaXNrIGRldmljZSAqLw0KIAlpZiAo
KGRldmZkID0gb3BlbihkZXYsIE9fUkRPTkxZLCAwKSkgPCAwKQ0KIAkJZXJy
KDEsICJvcGVuOiAlcyIsIGRldik7DQorI2VuZGlmDQogDQogCS8qIEV4dHJh
Y3QgYW5kIGxvYWQgYmxvY2sgbnVtYmVycyAqLw0KLQlpZiAobG9hZGJsb2Nr
bnVtcyhib290LCBkZXZmZCkgIT0gMCkNCisJaWYgKGxvYWRibG9ja251bXMo
Ym9vdCkgIT0gMCkNCiAJCWV4aXQoMSk7DQogDQorI2lmIDANCiAJKHZvaWQp
Y2xvc2UoZGV2ZmQpOw0KKyNlbmRpZg0KIA0KLQlpZiAobm93cml0ZSkNCi0J
CXJldHVybiAwOw0KKwkvKiBXcml0ZSBwYXRjaGVkIHByb3RvIGJvb3RibG9j
a3MgaW50byB0aGUgcGFydGl0aW9uKi8NCiANCi0JLyogV3JpdGUgcGF0Y2hl
ZCBwcm90byBib290YmxvY2tzIGludG8gdGhlIHN1cGVyYmxvY2sgKi8NCi0J
aWYgKHByb3Rvc2l6ZSA+IFNCU0laRSAtIERFVl9CU0laRSkNCi0JCWVycngo
MSwgInByb3RvIGJvb3RibG9ja3MgdG9vIGJpZyIpOw0KKwkvKiBPcGVuIHNv
IHdlIGNhbiBsb29rIGF0IHdoYXQgaXMgaW4gdGhlIHBhcnRpdGlvbiBtYXAg
Ki8NCisJaWYgKG5vd3JpdGUpIHsNCisJCWlmICgoZGV2ZmQgPSBvcGVuKGRl
diwgT19SRE9OTFksIDApKSA8IDApDQorCQkJZXJyKDEsICJvcGVuOiAlcyIs
IGRldik7DQorCX0gZWxzZSB7DQorCQlpZiAoKGRldmZkID0gb3BlbihkZXYs
IE9fUkRXUiwgMCkpIDwgMCkNCisJCQllcnIoMSwgIm9wZW46ICVzIiwgZGV2
KTsNCisJfQ0KKw0KKwlpZiAoKGJzaXplID09IDApIHx8IChzZWN0b3Jjb3Vu
dCA9PSAwKSkgew0KKwkJaWYgKGlvY3RsKGRldmZkLCBESU9DR0RJTkZPLCAm
dGhlbGFiZWwpIDwgMCkNCisJCQllcnIoMSwgImRpc2tsYWJlbDogJXMiLCBk
ZXYpOw0KKwkJaWYgKHNlY3RvcmNvdW50ID09IDApDQorCQkJc2VjdG9yY291
bnQgPSB0aGVsYWJlbC5kX3NlY3BlcnVuaXQ7DQorCQlpZiAoYnNpemUgPT0g
MCkgew0KKwkJCWJzaXplID0gdGhlbGFiZWwuZF9zZWNzaXplOw0KKwkJCWJz
aGlmdCA9IGZmcyhic2l6ZSkgLSAxOw0KKwkJfQ0KKwkJaWYgKChwbWUgPSBt
YWxsb2MoYnNpemUpKSA9PSBOVUxMKQ0KKwkJCWVycigxLCAiQWxsb2NhdGlu
ZyBtZW1vcnkiKTsNCisJCWlmICgoZG0gPSBtYWxsb2MoYnNpemUpKSA9PSBO
VUxMKQ0KKwkJCWVycigxLCAiQWxsb2NhdGluZyBtZW1vcnkiKTsNCisJfQ0K
IA0KLQlpZiAoKGRldmZkID0gb3BlbihkZXYsIE9fUkRXUiwgMCkpIDwgMCkN
Ci0JCWVycigxLCAib3BlbjogJXMiLCBkZXYpOw0KKwlpZiAoKGVycm9yID0g
Z2V0X3BhcnRpdGlvbihkZXZmZCwgcHJvdG9zaXplLCAmcHJvdG9vZmZzZXQs
IGZsYWdzLA0KKwkgICAgZm9yY2VfcGFydGl0aW9uKSkgPCAwKQ0KKwkJZXJy
KDEsICJhcG0gdXBkYXRlOiAlcyIsIGRldik7DQorCWVsc2UgaWYgKGVycm9y
ID4gMCkNCisJCWV4aXQoMSk7DQogDQotCWlmICh3cml0ZWFwcGxlcGFydG1h
cChkZXZmZCkgPCAwKQ0KLQkJZXJyKDEsICJ3cml0ZSBhcG06ICVzIiwgZGV2
KTsNCisJaWYgKG5vd3JpdGUpIHsNCisJCWNsb3NlKGRldmZkKTsNCisJCXJl
dHVybiAwOw0KKwl9DQogDQotCWlmIChsc2VlayhkZXZmZCwgQk9PVFNFQ1RP
Ul9PRkZTRVQsIFNFRUtfU0VUKSAhPSBCT09UU0VDVE9SX09GRlNFVCkNCisJ
aWYgKGxzZWVrKGRldmZkLCBwcm90b29mZnNldCwgU0VFS19TRVQpICE9IHBy
b3Rvb2Zmc2V0KQ0KIAkJZXJyKDEsICJsc2VlayBib290c3RyYXAiKTsNCiAN
Ci0JLyogU3luYyBmaWxlc3lzdGVtcyAodG8gY2xlYW4gaW4tbWVtb3J5IHN1
cGVyYmxvY2s/KSAqLw0KKwkvKiBTeW5jIGZpbGVzeXN0ZW1zICh0byBjbGVh
biBpbi1rZXJuZWwgZGlydHkgcGFnZXMpICovDQogCXN5bmMoKTsNCiANCiAJ
aWYgKHdyaXRlKGRldmZkLCBwcm90b3N0b3JlLCBwcm90b3NpemUpICE9IHBy
b3Rvc2l6ZSkNCkBAIC0zMjEsOSArNDAxLDggQEANCiBzdGF0aWMgY2hhciBz
YmxvY2tbU0JTSVpFXTsNCiANCiBpbnQNCi1sb2FkYmxvY2tudW1zKGJvb3Qs
IGRldmZkKQ0KK2xvYWRibG9ja251bXMoYm9vdCkNCiBjaGFyCSpib290Ow0K
LWludAlkZXZmZDsNCiB7DQogCWludAkJaSwgZmQ7DQogCXN0cnVjdAlzdGF0
CXN0YXRidWY7DQpAQCAtMzMzLDYgKzQxMiw3IEBADQogCWRhZGRyX3QJCWJs
aywgKmFwOw0KIAlzdHJ1Y3QgZGlub2RlCSppcDsNCiAJaW50CQluZGI7DQor
CXNpemVfdAkJbGVuOw0KIA0KIAkvKg0KIAkgKiBPcGVuIDJuZC1sZXZlbCBi
b290IHByb2dyYW0gYW5kIHJlY29yZCB0aGUgYmxvY2sgbnVtYmVycw0KQEAg
LTM1Nyw4ICs0MzcsMzQgQEANCiANCiAJY2xvc2UoZmQpOw0KIA0KKwkvKg0K
KwkgKiBOb3cgb3BlbiByYXcgZGV2aWNlIGZvciBwYXJ0aXRpb24uIFdlIGZp
cnN0IGNvcHkgdGhlIG5hbWUsIHRoZW4NCisJICogdHdlYWsgaXQgdG8gYmUg
L2Rldi9yPHdoYXRldmVyPiByYXRoZXIgdGhhbiAvZGV2Lzx3aGF0ZXZlcj4u
DQorCSAqIFdlIGNvcHkgaXQgc2luY2UgdGhlIG5hbWUgaXMgYSBmaXhlZCBs
ZW5ndGgsIG1pZ2h0IGJlIGF0DQorCSAqIHRoZSBtYXggbGVuZ3RoIGFscmVh
ZHksIGFuZCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuDQorCSAq
Lw0KKwlpZiAoKGxlbiA9IHN0cmxlbihzdGF0ZnNidWYuZl9tbnRmcm9tbmFt
ZSkpID49IE1OQU1FTEVOKQ0KKwkJZXJyeCgxLCAiJXM6IG5hbWUgdG9vIGxv
bmciLCBzdGF0ZnNidWYuZl9tbnRmcm9tbmFtZSk7DQorCXN0cm5jcHkoc3Rh
dGZzYnVmLmZfbW50b25uYW1lLCBzdGF0ZnNidWYuZl9tbnRmcm9tbmFtZSwg
TU5BTUVMRU4pOw0KKw0KKwlpZiAoKGJ1ZiA9IHN0cnJjaHIoc3RhdGZzYnVm
LmZfbW50b25uYW1lLCAnLycpKSA9PSBOVUxMKQ0KKwkJZXJyeCgxLCAiJXM6
IGNhbid0IGZpbmQgcmF3IGRldmljZSIsIHN0YXRmc2J1Zi5mX21udG9ubmFt
ZSk7DQorDQorCS8qDQorCSAqIE5vdyB3ZSBoYXZlIHRoZSBuYW1lLCBhbmQg
d2UgZm91bmQgdGhlIGxhc3QgLy4gTm93IGFkZCBhbiAncicgYWZ0ZXINCisJ
ICogaXQuDQorCSAqLw0KKwlsZW4gLT0gYnVmIC0gc3RhdGZzYnVmLmZfbW50
b25uYW1lOwkvKiAjIGNocnMgbm90IGJlZm9yZSAnLycgKi8NCisJaWYgKGxl
biA8PSAxKQ0KKwkJZXJyeCgxLCAiJXM6IG5hbWUgZW5kcyBpbiBhICcvJyIs
IHN0YXRmc2J1Zi5mX21udG9ubmFtZSk7DQorCWJjb3B5KGJ1ZisxICwgYnVm
KzIsIGxlbik7CS8qIGxlbiAtMSArMSB0byBnZXQgXDAwMCBhdCBlbmQgKi8N
CisJYnVmWzFdID0gJ3InOw0KKw0KKwlpZiAoKGZkID0gb3BlbihzdGF0ZnNi
dWYuZl9tbnRvbm5hbWUsIE9fUkRPTkxZLCAwKSkgPCAwKQ0KKwkJZXJyKDEs
ICJvcGVuOiAlcyIsIGRldik7DQorDQogCS8qIFJlYWQgc3VwZXJibG9jayAq
Lw0KLQlkZXZyZWFkKGRldmZkLCBzYmxvY2ssIGJ0b2RiKFNCT0ZGKSwgU0JT
SVpFLCAic3VwZXJibG9jayIpOw0KKwlkZXZyZWFkKGZkLCBzYmxvY2ssIGJ0
b2RiKFNCT0ZGKSwgU0JTSVpFLCAic3VwZXJibG9jayIpOw0KIAlmcyA9IChz
dHJ1Y3QgZnMgKilzYmxvY2s7DQogDQogCS8qIFJlYWQgaW5vZGUgKi8NCkBA
IC0zNjYsNyArNDcyLDcgQEANCiAJCWVycngoMSwgIk5vIG1lbW9yeSBmb3Ig
ZmlsZXN5c3RlbSBibG9jayIpOw0KIA0KIAlibGsgPSBmc2J0b2RiKGZzLCBp
bm9fdG9fZnNiYShmcywgc3RhdGJ1Zi5zdF9pbm8pKTsNCi0JZGV2cmVhZChk
ZXZmZCwgYnVmLCBibGssIGZzLT5mc19ic2l6ZSwgImlub2RlIik7DQorCWRl
dnJlYWQoZmQsIGJ1ZiwgYmxrLCBmcy0+ZnNfYnNpemUsICJpbm9kZSIpOw0K
IAlpcCA9IChzdHJ1Y3QgZGlub2RlICopKGJ1ZikgKyBpbm9fdG9fZnNibyhm
cywgc3RhdGJ1Zi5zdF9pbm8pOw0KIA0KIAkvKg0KQEAgLTQxNSw3ICs1MjEs
NyBAQA0KIAlpZiAodmVyYm9zZSkNCiAJCXByaW50ZigiJXM6IGJsb2NrIG51
bWJlcnMgKGluZGlyZWN0KTogIiwgYm9vdCk7DQogCWJsayA9IGlwLT5kaV9p
YlswXTsNCi0JZGV2cmVhZChkZXZmZCwgYnVmLCBibGssIGZzLT5mc19ic2l6
ZSwgImluZGlyZWN0IGJsb2NrIik7DQorCWRldnJlYWQoZmQsIGJ1ZiwgYmxr
LCBmcy0+ZnNfYnNpemUsICJpbmRpcmVjdCBibG9jayIpOw0KIAlhcCA9IChk
YWRkcl90ICopYnVmOw0KIAlmb3IgKDsgaSA8IE5JTkRJUihmcykgJiYgKmFw
ICYmIG5kYjsgaSsrLCBhcCsrLCBuZGItLSkgew0KIAkJYmxrID0gZnNidG9k
YihmcywgKmFwKTsNCkBAIC00MzEsNjIgKzUzNyw0MTIgQEANCiAJcmV0dXJu
IDA7DQogfQ0KIA0KKy8qDQorICogTWFrZSBhIGZha2UgYXBtIGZvciB1c2Ug
b24gTmV0QlNELW9ubHkgZGlza3MuIE1ha2VzIHBhcnRpdGlvbiB3aGljaCBp
cw0KKyAqIDFrIGJpZywgMmsgaW50byBkaXNrLiBDb25zdGFudHMgYWxzbyBj
b2RlZCBpbiBnZXRfcGFydGl0aW9uIGJlbG93Lg0KKyAqLw0KIGludA0KLXdy
aXRlYXBwbGVwYXJ0bWFwKGZkKQ0KLQlpbnQgZmQ7DQord3JpdGVhcHBsZXBh
cnRtYXAoaW50IGZkKQ0KIHsNCi0Jc3RydWN0IGRydnJfbWFwIGRtOw0KLQlz
dHJ1Y3QgcGFydG1hcGVudHJ5IHBtZTsNCi0NCiAJLyogYmxvY2sgMCAqLw0K
IAlpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQ0KIAkJcmV0dXJu
IC0xOw0KLQlpZiAocmVhZChmZCwgJmRtLCA1MTIpICE9IDUxMikJCS8qIHJl
YWQgZXhpc3RpbmcgZGlza2xhYmVsICovDQorCWlmIChyZWFkKGZkLCBkbSwg
YnNpemUpICE9IGJzaXplKQkvKiByZWFkIGV4aXN0aW5nIGRpc2tsYWJlbCAq
Lw0KIAkJcmV0dXJuIC0xOw0KIAlpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VU
KSAhPSAwKQ0KIAkJcmV0dXJuIC0xOw0KIA0KLQlkbS5zYlNpZyA9IERSSVZF
Ul9NQVBfTUFHSUM7DQotCWRtLnNiQmxvY2tTaXplID0gNTEyOw0KLQlkbS5z
YkJsa0NvdW50ID0gMDsNCisJZG0tPnNiU2lnID0gaHRvbnMoRFJJVkVSX01B
UF9NQUdJQyk7DQorCWRtLT5zYkJsb2NrU2l6ZSA9IGh0b25zKGJzaXplKTsN
CisJZG0tPnNiQmxrQ291bnQgPSBodG9ubChzZWN0b3Jjb3VudCk7DQorCWRt
LT5zYkRydnJDb3VudCA9IDA7DQogDQotCWlmICh3cml0ZShmZCwgJmRtLCA1
MTIpICE9IDUxMikNCisJaWYgKHdyaXRlKGZkLCBkbSwgYnNpemUpICE9IGJz
aXplKQ0KIAkJcmV0dXJuIC0xOw0KIA0KIAkvKiBibG9jayAxOiBBcHBsZSBQ
YXJ0aXRpb24gTWFwICovDQotCWJ6ZXJvKCZwbWUsIHNpemVvZihwbWUpKTsN
Ci0JcG1lLnBtU2lnID0gRFBNRV9NQUdJQzsNCi0JcG1lLnBtTWFwQmxrQ250
ID0gMjsNCi0JcG1lLnBtUHlQYXJ0U3RhcnQgPSAxOw0KLQlwbWUucG1QYXJ0
QmxrQ250ID0gcG1lLnBtRGF0YUNudCA9IDI7DQotCXN0cmNweShwbWUucG1Q
YXJ0TmFtZSwgIkFwcGxlIik7DQotCXN0cmNweShwbWUucG1QYXJ0VHlwZSwg
IkFwcGxlX3BhcnRpdGlvbl9tYXAiKTsNCisJYnplcm8ocG1lLCBic2l6ZSk7
DQorCXBtZS0+cG1TaWcgPSBQQVJUX0VOVFJZX01BR0lDOw0KKwlwbWUtPnBt
U2lnUGFkID0gMDsNCisJcG1lLT5wbU1hcEJsa0NudCA9IGh0b25sKDIpOw0K
KwlwbWUtPnBtUHlQYXJ0U3RhcnQgPSBodG9ubCgxKTsNCisJcG1lLT5wbVBh
cnRCbGtDbnQgPSBwbWUtPnBtRGF0YUNudCA9IGh0b25sKDMpOw0KKwlzdHJj
cHkocG1lLT5wbVBhcnROYW1lLCAiQXBwbGUiKTsNCisJc3RyY3B5KHBtZS0+
cG1QYXJ0VHlwZSwgIkFwcGxlX3BhcnRpdGlvbl9tYXAiKTsNCiAJDQotCXBt
ZS5wbVBhcnRTdGF0dXMgPSAweDM3Ow0KKwlwbWUtPnBtUGFydFN0YXR1cyA9
IDB4Mzc7DQogDQotCWlmIChsc2VlayhmZCwgNTEyLCBTRUVLX1NFVCkgIT0g
NTEyKQ0KKwlpZiAobHNlZWsoZmQsIGJzaXplLCBTRUVLX1NFVCkgIT0gYnNp
emUpDQogCQlyZXR1cm4gLTE7DQotCWlmICh3cml0ZShmZCwgJnBtZSwgNTEy
KSAhPSA1MTIpDQorCWlmICh3cml0ZShmZCwgcG1lLCBic2l6ZSkgIT0gYnNp
emUpDQogCQlyZXR1cm4gLTE7DQogDQotCS8qIGJsb2NrIDI6IE5ldEJTRCBw
YXJ0aXRpb24gKi8NCi0JYnplcm8oJnBtZSwgc2l6ZW9mKHBtZSkpOw0KLQlw
bWUucG1TaWcgPSBEUE1FX01BR0lDOw0KLQlwbWUucG1NYXBCbGtDbnQgPSAy
Ow0KLQlwbWUucG1QeVBhcnRTdGFydCA9IDQ7DQotCXBtZS5wbVBhcnRCbGtD
bnQgPSBwbWUucG1EYXRhQ250ID0gMHg3ZmZmZmZmZjsNCi0Jc3RyY3B5KHBt
ZS5wbVBhcnROYW1lLCAiTmV0QlNEIik7DQotCXN0cmNweShwbWUucG1QYXJ0
VHlwZSwgIk5ldEJTRC9tYWNwcGMiKTsNCi0JcG1lLnBtUGFydFN0YXR1cyA9
IDB4M2I7DQotCXBtZS5wbUJvb3RTaXplID0gMHg0MDA7DQotCXBtZS5wbUJv
b3RMb2FkID0gMHg0MDAwOw0KLQlwbWUucG1Cb290RW50cnkgPSAweDQwMDA7
DQotCXN0cmNweShwbWUucG1Qcm9jZXNzb3IsICJQb3dlclBDIik7DQotDQor
CS8qIGZpbGwgaW4gZW5vdWdoIG9mIHRoZSBkcml2ZXIgcGFydGl0aW9uIHNv
IHRoYXQNCisJICogbWFrZWRyaXZlcnBhcnQgd2lsbCB3b3JrLiAqLw0KKwlw
bWUtPnBtUGFydEJsa0NudCA9IGh0b25sKDIpOw0KKwlwbWUtPnBtUHlQYXJ0
U3RhcnQgPSBodG9ubCg0KTsNCisJcG1lLT5wbVBhcnRCbGtDbnQgPSBwbWUt
PnBtRGF0YUNudCA9IGh0b25sKDB4N2ZmZmZmZmYpOw0KIAlpZiAobHNlZWso
ZmQsIDEwMjQsIFNFRUtfU0VUKSAhPSAxMDI0KQ0KIAkJcmV0dXJuIC0xOw0K
LQlpZiAod3JpdGUoZmQsICZwbWUsIDUxMikgIT0gNTEyKQ0KKwlpZiAod3Jp
dGUoZmQsIHBtZSwgYnNpemUpICE9IGJzaXplKQ0KIAkJcmV0dXJuIC0xOw0K
IA0KLQlyZXR1cm4gMDsNCisJcmV0dXJuIChtYWtlZHJpdmVycGFydChmZCwg
MikpOw0KK30NCisNCitpbnQNCittYWtlZHJpdmVycGFydChpbnQgZmQsIGlu
dCBwYXJ0aXRpb24pDQorew0KKwlvZmZfdCB3aGVyZSA9IGJzaXplICogcGFy
dGl0aW9uOw0KKw0KKwlpZiAobHNlZWsoZmQsIHdoZXJlLCBTRUVLX1NFVCkg
IT0gd2hlcmUpDQorCQlyZXR1cm4gLTE7DQorCWlmIChyZWFkKGZkLCBwbWUs
IGJzaXplKSAhPSBic2l6ZSkNCisJCXJldHVybiAtMTsNCisNCisJcG1lLT5w
bVNpZyA9IGh0b25zKFBBUlRfRU5UUllfTUFHSUMpOw0KKwlwbWUtPnBtU2ln
UGFkID0gMDsNCisJc3RyY3B5KHBtZS0+cG1QYXJ0TmFtZSwgIk5ldEJTRCIp
Ow0KKwlzdHJjcHkocG1lLT5wbVBhcnRUeXBlLCAiTmV0QlNEL21hY3BwYyIp
Ow0KKwlwbWUtPnBtUGFydFN0YXR1cyA9IGh0b25sKDB4M2IpOw0KKwlwbWUt
PnBtQm9vdFNpemUgPSBodG9ubCgweDQwMCk7DQorCXBtZS0+cG1Cb290TG9h
ZCA9IGh0b25sKDB4NDAwMCk7DQorCXBtZS0+cG1Cb290RW50cnkgPSBodG9u
bCgweDQwMDApOw0KKwlzdHJjcHkocG1lLT5wbVByb2Nlc3NvciwgIlBvd2Vy
UEMiKTsNCisNCisJaWYgKGxzZWVrKGZkLCB3aGVyZSwgU0VFS19TRVQpICE9
IHdoZXJlKQ0KKwkJcmV0dXJuIC0xOw0KKwlpZiAobm93cml0ZSkNCisJCXJl
dHVybiAoMCk7DQorCWlmICh3cml0ZShmZCwgcG1lLCBic2l6ZSkgIT0gYnNp
emUpDQorCQlyZXR1cm4gLTE7DQorDQorCXJldHVybiBmaXh1cF9kcml2ZXIo
ZmQsIG50b2hsKHBtZS0+cG1QeVBhcnRTdGFydCksDQorCSAgICBudG9obChw
bWUtPnBtTWFwQmxrQ250KSk7DQorfQ0KKw0KKy8qDQorICogRml4IHVwIHRo
ZSBkcml2ZXIgZW50cnkgaW4gdGhlIERyaXZlciBEZXNjcmlwdG9yIFJlY29y
ZCBmb3IgYQ0KKyAqIGdpdmVuIGRyaXZlci4gV2Ugd2lsbCBlaXRoZXIgZmlu
ZCBvciBub3QgZmluZCB0aGUgZ2l2ZW4gZHJpdmVyIGluDQorICogdGhlIGxp
c3QuIEFkZCBpdCBpZiBub3QgcHJlc2VudC4NCisgKg0KKyAqIFdlIGFsc28g
c2FuaXR5LWNoZWNrIHRoZSBudW1iZXIgb2YgZHJpdmVycyAtIG9sZGVyIHZl
cnNpb25zIG9mIHRoaXMNCisgKiBwcm9ncmFtIGxlZnQgZ2FyYmFnZSBpbiB0
aGUgZHJpdmVyIGNvdW50LiBJZiB3ZSBmaW5kIGFuIGltcG9zaWJsZSBjb3Vu
dA0KKyAqIChtb3JlIHRoYW4gd2lsbCBmaXQgaW4gb25lIGJsb2NrKSwgd2Ug
anVzdCByZXNldCB0aGUgdGFibGUuDQorICovDQorDQoraW50DQorZml4dXBf
ZHJpdmVyKGludCBmZCwgaW50IHN0YXJ0LCBpbnQgc2l6ZSkNCit7DQorCWlu
dAlkcnZyX2NvdW50LCBpLCBzdGFydG9uZGlzazsNCisNCisJLyogYmxvY2sg
MCAqLw0KKwlpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQ0KKwkJ
cmV0dXJuIC0xOw0KKwlpZiAocmVhZChmZCwgZG0sIGJzaXplKSAhPSBic2l6
ZSkJLyogcmVhZCBleGlzdGluZyBkaXNrbGFiZWwgKi8NCisJCXJldHVybiAt
MTsNCisJaWYgKGxzZWVrKGZkLCAwLCBTRUVLX1NFVCkgIT0gMCkNCisJCXJl
dHVybiAtMTsNCisNCisJLyoNCisJICogRG9lcyB0aGUgY291bnQgb2YgZHJp
dmVycyBtYWtlIHNlbnNlPyBUaGVyZSBjYW4gYmUgYXQgbW9zdA0KKwkgKiA2
MSBkcml2ZXJzIGluIGEgNTEyLWJ5dGUgYmxvY2suIElmIHRoZXJlIGlzIGFu
IGltcG9zc2libGUNCisJICogbnVtYmVyIG9mIGRlc2NyaXB0b3JzLCBjaGFu
Y2VzIGFyZSB0aGF0IGEgcHJldmlvdXMgcnVuIG9mDQorCSAqIHRoaXMgcHJv
Z3JhbSBwdXQgZ2FyYmFnZSBpbiB0aGVyZS4NCisJICovDQorCWRydnJfY291
bnQgPSBudG9ocyhkbS0+c2JEcnZyQ291bnQpOw0KKw0KKwlpZiAoZHJ2cl9j
b3VudCA+IERSVlJfTUFYX0RFU0NSSVBUT1JTKQ0KKwkJZHJ2cl9jb3VudCA9
IDA7DQorDQorCXN0YXJ0b25kaXNrID0gaHRvbmwoc3RhcnQpOw0KKw0KKwlm
b3IgKGk9MDsgaSA8IGRydnJfY291bnQ7IGkrKykNCisJCWlmIChkbS0+c2Jf
ZGRbaV0uZGVzY0Jsb2NrID09IHN0YXJ0b25kaXNrKSB7DQorCQkJYnJlYWs7
DQorCQl9DQorDQorCWlmIChpID09IGRydnJfY291bnQpIHsNCisJCWlmIChk
cnZyX2NvdW50ID09IERSVlJfTUFYX0RFU0NSSVBUT1JTKSB7DQorCQkJZnBy
aW50ZihzdGRlcnIsDQorCQkJCSJObyByb29tIGluIGRyaXZlciB0YWJsZSBm
b3IgbmV3IGRyaXZlci5cbiIpOw0KKwkJCXJldHVybiAoMSk7DQorCQl9DQor
CQlkbS0+c2JEcnZyQ291bnQgPSBodG9ucygrK2RydnJfY291bnQpOw0KKwkJ
ZG0tPnNiX2RkW2ldLmRlc2NCbG9jayA9IHN0YXJ0b25kaXNrOw0KKwl9DQor
DQorCWRtLT5zYl9kZFtpXS5kZXNjU2l6ZSA9IGh0b25zKHNpemUpOw0KKyNp
ZiAwDQorCS8qDQorCSAqIFJpZ2h0IG5vdywgZHJ2cnNbMF0uZGRUeXBlIG92
ZXJsYXBzIHdpdGggdGhlIGZpcnN0DQorCSAqIDE2IGJpdHMgb2YgdGhlIGRp
c2tsYWJlbCB3aGljaCBsaXZlcyA2NCBieXRlcyBpbnRvIHRoZQ0KKwkgKiBz
ZWN0b3IuIFNvIGRvbid0IGZpbGwgdGhpcyBpbiBmb3Igbm93LiBQbHVzIHdl
IGRvbid0DQorCSAqIGtub3cgd2hhdCAiT1MgY29kZSIgdG8gdXNlIGZvciBO
ZXRCU0QuDQorCSAqLw0KKwlkbS0+c2JfZGRbaV0uZGVzY1R5cGUgPSBodG9u
cygxNik7CS8qIFhYWCA/Pz8gKi8NCisjZW5kaWYNCisNCisJaWYgKHdyaXRl
KGZkLCBkbSwgYnNpemUpICE9IGJzaXplKQ0KKwkJcmV0dXJuIC0xOw0KKw0K
KwlyZXR1cm4gKDApOw0KK30NCisNCisvKg0KKyAqIEZpZ3VyZSBvdXQgd2hl
cmUgdG8gc3RvcmUgdGhlIGJvb3QgYmxvY2tzLg0KKyAqDQorICogVGhpcyBw
cm9ncmFtIHN0b3JlcyB0aGUgYm9vdCBsb2FkZXIgYXMgYSAiZHJpdmVyIiBw
YXJ0aXRpb24gaW4NCisgKiBhbiBBcHBsZSBQYXJ0aXRpb24gTWFwLg0KKyAq
DQorICogT3JpZ2luYWxseSwgTmV0QlNEL21hY3BwYyB0b29rIG92ZXIgdGhl
IHdob2xlIGRpc2ssIGFuZCB1c2VkDQorICogYSB0cmFkaXRpb25hbCB1bml4
IGRpc2tsYWJlbCBmb3IgcGFydGl0aW9uaW5nLiBpbnN0YWxsYm9vdCB3b3Vs
ZA0KKyAqIG1ha2UgYSBmYWtlIEFwcGxlIFBhcnRpdGlvbiBNYXAgYW5kIHN0
b3JlIHRoZSBib290IGJsb2NrcywgYWxsIHdpdGhpbg0KKyAqIHRoZSBzdGFy
dGluZyA4ayByZXNlcnZlZCBpbiB0aGUgZmZzIGZpbGUgc3lzdGVtIHNwZWMu
DQorICoNCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gaXMgZW5o
YW5jZWQgaW4gdGhhdCBpdCB3aWxsIHJlYWQgYW4gZXhpc3RpbmcNCisgKiBB
cHBsZSBQYXJ0aXRpb24gTWFwLCBhbmQgaW5zdGFsbCB0aGUgYm9vdCBibG9j
a3MgaW4gYW4gZXhpc3RpbmcuIFdlIG9ubHkNCisgKiBpbnN0YWxsIHRoZSBm
YWtlIHBhcnRpdGlvbiBtYXAgaWYgbm90IG1hcCBleGlzdHMuDQorICoNCisg
KiBIZXJlJ3MgdGhlIHByb2NlZHVyZS4NCisgKg0KKyAqIDEpIElmIHdlIGVp
dGhlciBmaW5kIG5vIGV4aXN0aW5nIHBhcnRpdGlvbiBtYXAsIG9yIHRoZSAt
RiBjb21tYW5kIGxpbmUNCisgKiBvcHRpb24gd2FzIHVzZWQsIHdlIHdyaXRl
IGEgZmFrZSBwYXJ0aXRpb24gbWFwLg0KKyAqDQorICogMikgSWYgd2Ugd2Vy
ZSB0b2xkIGEgc3BlY2lmaWMgcGFydGl0aW9uIHRvIG92ZXJ3cml0ZSAodGhl
IC1QIGNvbW1hbmQNCisgKiBsaW5lIG9wdGlvbiksIHdlIG92ZXJ3cml0ZSBp
dC4NCisgKg0KKyAqIDMpIHdlIHNjYW4gdGhlIHBhcnRpdGlvbiBtYXAgbG9v
a2luZyBmb3IgYW4gZXhpc3RpbmcgZHJpdmVyIHBhcnRpdGlvbiwNCisgKiBm
b3IgYSAiRnJlZSBzcGFjZSIgcGFydGl0aW9uIGJpZyBlbm91Z2ggdG8gaG9s
ZCB0aGUgYm9vdGJsb2NrcywgYW5kDQorICogZm9yIGFuIGVtcHR5IHBhcnRp
dGlvbi4NCisgKg0KKyAqIDQpIElmIHdlIGZpbmQgYSBkcml2ZXIgcGFydGl0
aW9uIGJpZyBlbm91Z2ggdG8gZml0IHRoZSBib290IGJsb2NrcywNCisgKiB3
ZSB1c2UgaXQuIElmIHdlIGZpbmQgYSBkcml2ZXIgcGFydGl0aW9uLCBidXQg
aXQgaXMgTk9UIGJpZyBlbm91Z2ggZm9yDQorICogdGhlIGJvb3QgYmxvY2tz
LCB3ZSBleGl0IHdpdGggYW4gZXJyb3IgbWVzc2FnZS4gV2UgZG9uJ3QganVz
dCBtYWtlDQorICogYSBzZWNvbmQgZHJpdmVyIHBhcnRpdGlvbiBhcyB3ZSBk
b24ndCBrbm93IHdoYXQgd2lsbCBoYXBwZW4gaWYgd2UgaGF2ZQ0KKyAqIG1v
cmUgdGhhbiBvbmUgZGlyaXZlciBwYXJ0aXRpb24uDQorICoNCisgKiA1KSBJ
ZiB3ZSBkaWRuJ3QgZmluZCBhIGRyaXZlciBwYXJ0aXRpb24sIGJ1dCB3ZSBo
YXZlIGFuIGVtcHR5IHBhcnRpdGlvbg0KKyAqIGFuZCB3ZSBoYXZlIGZyZWUg
c3BhY2UgZm9yIHRoZSBkcml2ZXJzLCB3ZSBtYWtlIG9uZS4gV2UgZGVsZXRl
IHNwYWNlDQorICogZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZyZWUgc3BhY2Ug
cGFydGl0aW9uLCBhbmQgZmlsbCBpbiB0aGUgbmV3IHBhcnRpdGlvbg0KKyAq
IGVudHJ5Lg0KKyAqLw0KKw0KK2ludA0KK2dldF9wYXJ0aXRpb24oaW50IGZk
LCBpbnQgcHJvdG9zaXplLCBvZmZfdCAqcHJvdG9vZmZzZXQsIGludCBmbGFn
cywNCisJaW50IGZvcmNlX3BhcnQpDQorew0KKwlpbnQJbWF4X3BhcnRzLCBt
YXhtYXhfcGFydHMsIGZyZWVfcGFydCwgZnJlZV9zaXplLCBpLCBqOw0KKwlp
bnQJbmV3X3N0YXJ0LCBwcm90b2Jsb2NrczsNCisJY2hhcgl0eXBlc3RyWzMy
XSwgKmM7DQorDQorCXByb3RvYmxvY2tzID0gcHJvdG9zaXplID4+IGJzaGlm
dDsJLyogZGl2aWRlIGJ5IGJzaXplICovDQorDQorCWlmICh2ZXJib3NlKQ0K
KwkJcHJpbnRmKCJCbG9ja3MgYXJlICVkIGJ5dGVzIGZvciAlZCBibG9ja3Nc
biIsIHByb3Rvc2l6ZSwgcHJvdG9ibG9ja3MpOw0KKw0KKwkvKiBibG9jayAw
ICovDQorCWlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpICE9IDApDQorCQly
ZXR1cm4gLTE7DQorCWlmIChyZWFkKGZkLCBkbSwgYnNpemUpICE9IGJzaXpl
KQkvKiByZWFkIGV4aXN0aW5nIGRpc2tsYWJlbCAqLw0KKwkJcmV0dXJuIC0x
Ow0KKw0KKwkvKiBEbyB3ZSBsYWNrIGEgdmFsaWQgQXBwbGUgcG0sIG9yIHdh
cyAtRiBwYXNzZWQ/ICovDQorCWlmICgobnRvaHMoZG0tPnNiU2lnKSAhPSAw
eDQ1NTIpIHx8IChmbGFncyAmIFBBUlRfRk9SQ0VfRkFLRSkpIHsNCisJCWlm
ICh2ZXJib3NlKQ0KKwkJCXByaW50ZigiV3JpdGluZyBmYWtlIGFwbSB3aXRo
aW4gYm9vdCBibG9jayBzcGFjZSBvZiAiDQorCQkJICAgICAiZmlyc3QgcGFy
dGl0aW9uXG4iKTsNCisJCWlmIChwcm90b3NpemUgPiAxMDI0KSB7DQorCQkJ
ZnByaW50ZihzdGRlcnIsICJwcm90byBib290IGJsb2NrcyB0b28gYmlnXG4i
KTsNCisJCQlyZXR1cm4gKDEpOw0KKwkJfQ0KKwkJaWYgKG5vd3JpdGUpDQor
CQkJcmV0dXJuICgwKTsNCisJCSpwcm90b29mZnNldCA9IDIwNDg7DQorCQly
ZXR1cm4gKHdyaXRlYXBwbGVwYXJ0bWFwKGZkKSk7DQorCX0NCisNCisJLyog
cmVhZCBmaXJzdCBwYXJ0aXRpb24gdG8gZ2V0IGNvdW50IG9mIHBhcnRpdGlv
bnMgJiB2ZXJpZnkgKi8NCisJaWYgKGxzZWVrKGZkLCBic2l6ZSwgU0VFS19T
RVQpICE9IGJzaXplKQ0KKwkJcmV0dXJuIC0xOw0KKwlpZiAocmVhZChmZCwg
cG1lLCBic2l6ZSkgIT0gYnNpemUpDQorCQlyZXR1cm4gLTE7DQorCWlmIChu
dG9ocyhwbWUtPnBtU2lnKSAhPSBQQVJUX0VOVFJZX01BR0lDKSB7DQorCQlm
cHJpbnRmKHN0ZGVyciwNCisJCSAgICAiQXBwbGUgUGFydGl0aW9uIE1hcCBt
YWdpYyBudW1iZXIgd3JvbmcgZm9yIGJsb2NrIDEuXG4iKTsNCisJCXJldHVy
biAoMSk7DQorCX0NCisJbWF4X3BhcnRzID0gbnRvaGwocG1lLT5wbU1hcEJs
a0NudCk7DQorDQorCS8qIE5vdyBzZWUgaWYgd2Ugd2VyZSBwYXNzZWQgdGhl
IC1QIDxudW0+IGZsYWcgKi8NCisJaWYgKGZsYWdzICYgUEFSVF9GT1JDRV9O
VU1CRVIpIHsNCisJCWlmIChmb3JjZV9wYXJ0ID4gbWF4X3BhcnRzKSB7DQor
CQkJZnByaW50ZihzdGRlcnIsICJQYXJ0aXRpb24gc3BlY2lmaWVkIHdpdGgg
LVAgb3B0aW9uLCINCisJCQkgICAgIiVkLCBub3QgaW4gcGFydGl0aW9uIG1h
cC5cbiIsIGZvcmNlX3BhcnQpOw0KKwkJCXJldHVybiAoMSk7DQorCQl9DQor
CQlpZiAobHNlZWsoZmQsIGJzaXplICogZm9yY2VfcGFydCwgU0VFS19TRVQp
ICE9IGJzaXplICogZm9yY2VfcGFydCkNCisJCQlyZXR1cm4gLTE7DQorCQlp
ZiAocmVhZChmZCwgcG1lLCBic2l6ZSkgIT0gYnNpemUpDQorCQkJcmV0dXJu
IC0xOw0KKwkJKnByb3Rvb2Zmc2V0ID0gbnRvaGwocG1lLT5wbVB5UGFydFN0
YXJ0KTsNCisJCXJldHVybiAobWFrZWRyaXZlcnBhcnQoZmQsIGZvcmNlX3Bh
cnQpKTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBOb3cgc2NhbiB0aGUgcGFydGl0
aW9uIHRhYmxlIGZvciBlaXRoZXIgYW4gZXhpc3RpbmcgZHJpdmVyLCBvcg0K
KwkgKiBmb3IgYSBmcmVlIHBhcnRpdGlvbi4gQWxzbyBub3RlIG1heCBudW1i
ZXIgb2YgcGFydGl0aW9ucyBhdmFpbGFibGUNCisJICogaW4gcGFydGl0aW9u
IG1hcC4NCisJICovDQorCW1heG1heF9wYXJ0cyA9IDA7IGZyZWVfcGFydCA9
IDA7IGZyZWVfc2l6ZSA9IDA7IG5ld19zdGFydCA9IDA7DQorCWZvcihpID0g
MTtpIDw9IG1heF9wYXJ0czsgaSsrKSB7DQorCQlpZiAobnRvaHMocG1lLT5w
bVNpZykgIT0gUEFSVF9FTlRSWV9NQUdJQykNCisJCQlnb3RvIHJlYWRuZXh0
Ow0KKw0KKwkJc3RybmNweSh0eXBlc3RyLCAoY2hhciAqKXBtZS0+cG1QYXJ0
VHlwZSwgc2l6ZW9mKHR5cGVzdHIpKTsNCisJCXR5cGVzdHJbc2l6ZW9mKHR5
cGVzdHIpIC0gMV0gPSAnXDAnOw0KKwkJZm9yKGMgPSB0eXBlc3RyOyAqYzsg
YysrKQ0KKwkJCWlmICgoJ2EnIDw9ICpjKSAmJiAoKmMgPD0gJ3onKSkNCisJ
CQkJKmMgPSAoKmMgLSAnYScgKyAnQScpOw0KKw0KKwkJaWYgKHN0cmNtcChQ
QVJUX1RZUEVfRlJFRSwgdHlwZXN0cikgPT0gMCkgew0KKwkJCS8qDQorCQkJ
ICogSWYgdGhlIGZyZWUgc3BhY2UgcGFydGl0aW9uIGlzIGJpZyBlbm91Z2gg
YW5kDQorCQkJICogZWl0aGVyIHdlIGhhdmVuJ3QgZm91bmQgYSBmcmVlIHBh
cnRpdGlvbiBvciB0aGlzDQorCQkJICogb25lIGlzIHNtYWxsZXIgdGhhbiB0
aGUgb25lIHdlIGZvdW5kLCB1c2UgaXQuDQorCQkJICovDQorCQkJaWYgKCgo
ZnJlZV9wYXJ0ID09IDApIHx8DQorCQkJICAgIChudG9obChwbWUtPnBtUGFy
dEJsa0NudCkgPCBmcmVlX3NpemUpKSAmJiANCisJCQkgICAgKG50b2hsKHBt
ZS0+cG1QYXJ0QmxrQ250KSA+PSBwcm90b2Jsb2NrcykpIHsNCisJCQkJaWYg
KHZlcmJvc2UpIHsNCisJCQkJCXByaW50ZigNCisJCQkJCSAgICJGb3VuZCBm
cmVlIHNwYWNlIGluIHBhcnRpdGlvbiAlZCIsDQorCQkJCQkgICBpKTsNCisJ
CQkJCWlmIChmcmVlX3BhcnQpDQorCQkJCQkJcHJpbnRmKCIgd2hpY2ggaXMg
c21hbGxlciB0aGFuIg0KKwkJCQkJCSAgICAiIHRoYXQgaW4gcGFydGl0aW9u
ICVkIiwNCisJCQkJCQkgICAgZnJlZV9wYXJ0KTsNCisJCQkJCXByaW50Zigi
XG4iKTsNCisJCQkJfQ0KKwkJCQlmcmVlX3BhcnQgPSBpOw0KKwkJCQlmcmVl
X3NpemUgPSBudG9obChwbWUtPnBtUGFydEJsa0NudCk7DQorCQkJCW5ld19z
dGFydCA9IG50b2hsKHBtZS0+cG1QeVBhcnRTdGFydCk7DQorCQkJfQ0KKwkJ
CWdvdG8gcmVhZG5leHQ7DQorCQl9DQorDQorCQlpZiAoc3RyY21wKFBBUlRf
VFlQRV9QQVJUTUFQLCB0eXBlc3RyKSA9PSAwKSB7DQorCQkJbWF4bWF4X3Bh
cnRzID0gbnRvaGwocG1lLT5wbVBhcnRCbGtDbnQpOw0KKwkJCWlmICh2ZXJi
b3NlKQ0KKwkJCQlwcmludGYoDQorCQkJCSAgICAiRm91bmQgcGFydGl0aW9u
IG1hcCB3aXRoICVkIGVudHJpZXMuXG4iLA0KKwkJCQkgICAgbWF4bWF4X3Bh
cnRzKTsNCisJCQlnb3RvIHJlYWRuZXh0Ow0KKwkJfQ0KKw0KKwkJaWYgKHN0
cmNtcChQQVJUX1RZUEVfTkJTRF9QUENCT09ULCB0eXBlc3RyKSA9PSAwKSB7
DQorCQkJaWYgKHZlcmJvc2UpDQorCQkJCXByaW50ZigiRm91bmQgbWFjcHBj
IGJvb3QgcGFydGl0aW9uICMgJWQuIiwNCisJCQkJICAgIGkpOw0KKwkJCWlm
IChudG9obChwbWUtPnBtUGFydEJsa0NudCkgPj0gcHJvdG9ibG9ja3MpIHsN
CisJCQkJaWYgKHZlcmJvc2UpDQorCQkJCQlwcmludGYoIiBVc2luZyBpdC5c
biIpOw0KKwkJCQkqcHJvdG9vZmZzZXQgPSBudG9obChwbWUtPnBtUHlQYXJ0
U3RhcnQpOw0KKwkJCQlyZXR1cm4gKG1ha2Vkcml2ZXJwYXJ0KGZkLCBpKSk7
DQorCQkJfQ0KKwkJCWlmICh2ZXJib3NlKQ0KKwkJCQlwcmludGYoInRvbyBz
bWFsbCEhXG4iKTsNCisJCQlmcHJpbnRmKHN0ZGVyciwgIkZvdW5kIGV4aXN0
aW5nIE5ldEJTRCBib290IHBhcnRpdGlvbiINCisJCQkgICAgIiB3aGljaCBp
cyB0b28gc21hbGwgZm9yIHRoZXNlIGJvb3Rcblx0YmxvY2tzLiINCisJCQkg
ICAgIiBQYXJ0aXRpb24gaGFzICVkIGJsb2NrcywgbmVlZHMgJWQgYmxvY2tz
LlxuIiwNCisJCQkgICAgbnRvaGwocG1lLT5wbVBhcnRCbGtDbnQpLCBwcm90
b2Jsb2Nrcyk7DQorCQkJcmV0dXJuICgxKTsNCisJCX0NCisNCityZWFkbmV4
dDoNCisJCS8qIE5vdyByZWFkIG5leHQgcGFydGl0aW9uIGlmIHRoZXJlIGlz
IG9uZS4gKi8NCisJCWlmICgoaSA8IG1heF9wYXJ0cykgJiYgKHJlYWQoZmQs
IHBtZSwgYnNpemUpICE9IGJzaXplKSkNCisJCQlyZXR1cm4gKC0xKTsNCisJ
fQ0KKw0KKwkvKg0KKwkgKiBJZiB3ZSBnb3QgaGVyZSwgdGhlcmUgaXMgbm8g
ZXhpc3RpbmcgZHJpdmVyIHBhcnRpdGlvbi4gV2UgbmVlZA0KKwkgKiB0byBt
YWtlIG9uZS4NCisJICovDQorDQorCWlmIChmcmVlX3BhcnQgPT0gMCkgew0K
KwkJZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIGZyZWUgc3BhY2Ugb24g
ZGlzayBmb3IiDQorCQkgICAgIiBib290IGJsb2NrLlxuQXQgbGVhc3QgJWQg
Ynl0ZXMgbmVlZGVkLiIsIHByb3Rvc2l6ZSk7DQorCQlyZXR1cm4gKDEpOw0K
Kwl9DQorDQorCS8qIFdpbGwgd2UganVzdCBzdGVhbCB0aGUgZnJlZSBzcGFj
ZSB0aGF0J3MgbGVmdD8gKi8NCisJaWYgKGZyZWVfc2l6ZSA8PSAyICogcHJv
dG9ibG9ja3MpIHsNCisJCWlmICh2ZXJib3NlKQ0KKwkJCXByaW50ZigiVXNp
bmcgZm91bmQgZnJlZXNwYWNlIHBhcnRpdGlvbi5cbiIpOw0KKwkJKnByb3Rv
b2Zmc2V0ID0gbmV3X3N0YXJ0Ow0KKwkJcmV0dXJuIChtYWtlZHJpdmVycGFy
dChmZCwgZnJlZV9wYXJ0KSk7DQorCX0NCisNCisJaWYgKG1heF9wYXJ0cyA+
PSBtYXhtYXhfcGFydHMpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiTm8gZnJl
ZSBzcGFjZSBpbiBwYXJ0aXRpb24gbWFwIHRvIGFkZCBuZXciDQorCQkgICAg
IiBwYXJ0aXRpb24uXG4iKTsNCisJCXJldHVybiAoMSk7DQorCX0NCisNCisJ
LyoNCisJICogTm93IGFjdHVhbGx5IGFkZCB0aGUgcGFydGl0aW9uLiBXZSBu
ZWVkIHRvOiAxKSByZW1vdmUgc3BhY2UgZnJvbQ0KKwkgKiB0aGUgZnJlZSBw
YXJ0aXRpb24gZm9yIHRoZSBuZXcgbWFwIGVudHJ5LCAyKSBtYWtlIGEgbmV3
IHBhcnRpdGlvbiwNCisJICogYW5kIDMpIHVwZGF0ZSBhbGwgb2YgdGhlIHBh
cnRpdGlvbnMgc28gdGhhdCB0aGVpciBwYXJ0aXRvbiBjb3VudA0KKwkgKiBt
YXRjaGVzIHdoYXQgaXQgc2hvdWxkIGJlLg0KKwkgKi8NCisJaWYgKGxzZWVr
KGZkLCBic2l6ZSAqIGZyZWVfcGFydCwgU0VFS19TRVQpICE9IGJzaXplICog
ZnJlZV9wYXJ0KQ0KKwkJcmV0dXJuIC0xOw0KKwlpZiAocmVhZChmZCwgcG1l
LCBic2l6ZSkgIT0gYnNpemUpDQorCQlyZXR1cm4gLTE7DQorDQorCS8qIG5l
d19zdGFydCA9IG50b2hsKHBtZS0+cG1QeVBhcnRTdGFydCk7IFdlIGRpZCB0
aGlzIGFib3ZlICovDQorCXBtZS0+cG1QeVBhcnRTdGFydCA9IGh0b25sKGkg
PSAobmV3X3N0YXJ0ICsgcHJvdG9ibG9ja3MpKTsNCisJcG1lLT5wbVBhcnRC
bGtDbnQgPSBodG9ubChqID0gKG50b2hsKHBtZS0+cG1QYXJ0QmxrQ250KSAt
IHByb3RvYmxvY2tzKSk7DQorDQorCWlmICh2ZXJib3NlKQ0KKwkJcHJpbnRm
KCJVcGRhdGluZyBmcmVlc3BhY2UgcGFydGl0aW9uICVkLlxuUGFydGl0aW9u
IG5vdyBzdGFydHMiDQorCQkgICAgIiBhdCBibG9jayAlZCBmb3Igc2l6ZSAl
ZC5cbiIsIGZyZWVfcGFydCwgaSwgaik7DQorDQorCWlmIChsc2VlayhmZCwg
YnNpemUgKiBmcmVlX3BhcnQsIFNFRUtfU0VUKSAhPSBic2l6ZSAqIGZyZWVf
cGFydCkNCisJCXJldHVybiAtMTsNCisJaWYgKChub3dyaXRlID09IDApICYm
ICh3cml0ZShmZCwgcG1lLCBic2l6ZSkgIT0gYnNpemUpKQ0KKwkJcmV0dXJu
IC0xOw0KKw0KKwkvKiBBY3R1YWxseSB1cGRhdGUgYWxsIG9mIHRoZSBvdGhl
ciBwYXJ0aXRpb25zIG5vdyAqLw0KKwltYXhfcGFydHMrKzsNCisJaWYgKHZl
cmJvc2UpDQorCQlwcmludGYoIkV4cGFuZGluZyBhY3RpdmUgcGFydGl0aW9u
IGNvdW50IHRvICVkLlxuIiwgbWF4X3BhcnRzKTsNCisJaWYgKGxzZWVrKGZk
LCBic2l6ZSwgU0VFS19TRVQpICE9IGJzaXplKQ0KKwkJcmV0dXJuIC0xOw0K
Kwlmb3IoaSA9IDE7IGkgPCBtYXhfcGFydHM7IGkrKykgew0KKwkJaWYgKHJl
YWQoZmQsIHBtZSwgYnNpemUpICE9IGJzaXplKQ0KKwkJCXJldHVybiAoLTEp
Ow0KKwkJaWYgKGxzZWVrKGZkLCAtYnNpemUsIFNFRUtfQ1VSKSA8IDApDQor
CQkJcmV0dXJuICgtMSk7DQorCQlwbWUtPnBtTWFwQmxrQ250ID0gaHRvbmwo
bWF4X3BhcnRzKTsNCisJCWlmICgobm93cml0ZSA9PSAwKSAmJiAod3JpdGUo
ZmQsIHBtZSwgYnNpemUpICE9IGJzaXplKSkNCisJCQlyZXR1cm4gKC0xKTsN
CisJfQ0KKw0KKwkvKiBOb3cgdGhhdCB3ZSBoYXZlIGVmZmVjdGl2bHkgbHNl
ZWtlZCB0byB0aGUgbmV3IHNlY3Rvciwgc2V0IGl0IHVwICovDQorCWlmICh2
ZXJib3NlKQ0KKwkJcHJpbnRmKCJJbnN0YWxsaW5nIG5ldyBib290IGJsb2Nr
cy5cbiIpOw0KKwlwbWUtPnBtU2lnID0gaHRvbnMoUEFSVF9FTlRSWV9NQUdJ
Qyk7DQorCXBtZS0+cG1TaWdQYWQgPSAwOw0KKwlwbWUtPnBtTWFwQmxrQ250
ID0gaHRvbmwobWF4X3BhcnRzKTsNCisJcG1lLT5wbURhdGFDbnQgPSBwbWUt
PnBtUGFydEJsa0NudCA9IGh0b25sKHByb3RvYmxvY2tzKTsNCisJcG1lLT5w
bVB5UGFydFN0YXJ0ID0gaHRvbmwobmV3X3N0YXJ0KTsNCisJaWYgKHZlcmJv
c2UpDQorCQlwcmludGYoIlNpemUgJWQgYmxvY2tzLCBzdGFydGluZyBhdCAl
ZFxuIiwNCisJCSAgICBudG9obChwbWUtPnBtUGFydEJsa0NudCksIG50b2hs
KHBtZS0+cG1QeVBhcnRTdGFydCkpOw0KKwlpZiAoKG5vd3JpdGUgPT0gMCkg
JiYgKHdyaXRlKGZkLCBwbWUsIGJzaXplKSAhPSBic2l6ZSkpDQorCQlyZXR1
cm4gLTE7DQorCSpwcm90b29mZnNldCA9IG5ld19zdGFydDsNCisJcmV0dXJu
IChtYWtlZHJpdmVycGFydChmZCwgbWF4X3BhcnRzKSk7DQogfQ0K
--0-1173438411-967518747=:1045--