Subject: Re: top?
To: Jorgen Pehrson <jp@spektr.ludvika.se>
From: Johnny Billquist <bqt@Update.UU.SE>
List: port-vax
Date: 12/29/1997 17:33:34
  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-384248001-883413214=:1395
Content-Type: TEXT/PLAIN; charset=US-ASCII

> Hi,
> is there a version of top for NetBSD/vax 1.3? I tried to compile
> top3.5beta6, but there was only versions for NetBSD 0.8 and 1.0. And when
> I tried to run it, it failed to run, and said this:
> 
> top: cannot read nswap: kvm_read: Bad address
> top: cannot read nswdev: kvm_read: Bad address
> top: cannot read nswapmap: kvm_read: Bad address
> top: malloc: Undefined error: 0
> 
> I guess the VM system has been rewritten since 1.0?
> Anyone have a new NetBSD 1.3 module for top?

I wrote one on the fly when the new swap system came along. There might be
an official fix too, but here is mine.

	Johnny

Johnny Billquist                  || "I'm on a bus
                                  ||  on a psychedelic trip
email: bqt@update.uu.se           ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol

--0-384248001-883413214=:1395
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="machine.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.VUL.3.93.971229173333.1395G@Zeke.Update.UU.SE>
Content-Description: 

LyoNCiAqIHRvcCAtIGEgdG9wIHVzZXJzIGRpc3BsYXkgZm9yIFVuaXgNCiAq
DQogKiBTWU5PUFNJUzogIEZvciBhIE5ldEJTRC0xLjMgKDQuNEJTRCkgc3lz
dGVtDQogKgkgICAgICBOb3RlIHByb2Nlc3MgcmVzaWRlbnQgc2l6ZXMgY291
bGQgYmUgd3JvbmcsIGJ1dCBwcyBzaG93cw0KICoJICAgICAgemVybyBmb3Ig
dGhlbSB0b28uLg0KICoNCiAqIERFU0NSSVBUSU9OOg0KICogT3JpZ2luYWxs
eSB3cml0dGVuIGZvciBCU0Q0LjQgc3lzdGVtIGJ5IENocmlzdG9zIFpvdWxh
cy4NCiAqIEJhc2VkIG9uIHRoZSBGcmVlQlNEIDIuMCB2ZXJzaW9uIGJ5IFN0
ZXZlbiBXYWxsYWNlICYmIFdvbGZyYW0gU2NobmVpZGVyDQogKiBOZXRCU0Qt
MS4wIHBvcnQgYnkgQXJuZSBIZWxtZQ0KICogTmV0QlNELTEuMyBwb3J0IGJ5
IEpvaG5ueSBCaWxscXVpc3QNCiAqIC4NCiAqIFRoaXMgaXMgdGhlIG1hY2hp
bmUtZGVwZW5kZW50IG1vZHVsZSBmb3IgTmV0QlNELTEuMw0KICogV29ya3Mg
Zm9yOg0KICoJTmV0QlNELTEuMw0KICoNCiAqIExJQlM6IC1sa3ZtDQogKg0K
ICogQ0ZMQUdTOiAtREhBVkVfR0VUT1BUDQogKg0KICogQVVUSE9SOiAgQ2hy
aXN0b3MgWm91bGFzIDxjaHJpc3Rvc0BlZS5jb3JuZWxsLmVkdT4NCiAqICAg
ICAgICAgIFN0ZXZlbiBXYWxsYWNlICA8c3dhbGxhY2VAZnJlZWJzZC5vcmc+
DQogKiAgICAgICAgICBXb2xmcmFtIFNjaG5laWRlciA8d29zY2hAY3MudHUt
YmVybGluLmRlPg0KICoJICAgIEFybmUgSGVsbWUgPGFybmVAYWNtLm9yZz4N
CiAqICAgICAgICAgIEpvaG5ueSBCaWxscXVpc3QgPGJxdEB1cGRhdGUudXUu
c2U+DQogKg0KICogJElkOiBtYWNoaW5lLmMsdiAxLjUgMTk5NS8wMS8wNiAw
MjowNDozOSBzd2FsbGFjZSBFeHAgJA0KICovDQoNCg0KDQojZGVmaW5lIExB
U1RQSUQgICAgICAvKiovICAvKiB1c2UgbGFzdCBwaWQsIGNvbXBpbGVyIGRl
cGVuZGVkICovDQovKiAjZGVmaW5lIExBU1RQSURfRklYRUQgLyoqLyANCiNk
ZWZpbmUgVk1fUkVBTCAgICAgIC8qKi8gIC8qIHVzZSB0aGUgc2FtZSB2YWx1
ZXMgYXMgdm1zdGF0IC1zICovDQojZGVmaW5lIFVTRV9TV0FQICAgICAvKiov
ICAvKiB1c2Ugc3dhcCB1c2FnZSAocHN0YXQgLXMpLCANCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gbXVjaCBjcHUgdGltZSAqLw0K
LyogI2RlZmluZSBERUJVRyAxICAgICAgLyoqLw0KDQojaW5jbHVkZSA8c3lz
L3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3NpZ25hbC5oPg0KI2luY2x1ZGUg
PHN5cy9wYXJhbS5oPg0KDQojaW5jbHVkZSAib3MuaCINCiNpbmNsdWRlIDxz
dGRpby5oPg0KI2luY2x1ZGUgPG5saXN0Lmg+DQojaW5jbHVkZSA8bWF0aC5o
Pg0KI2luY2x1ZGUgPGt2bS5oPg0KI2luY2x1ZGUgPHN5cy9lcnJuby5oPg0K
I2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCiNpbmNsdWRlIDxzeXMvZGlyLmg+
DQojaW5jbHVkZSA8c3lzL2Rrc3RhdC5oPg0KI2luY2x1ZGUgPHN5cy9maWxl
Lmg+DQojaW5jbHVkZSA8c3lzL3RpbWUuaD4NCg0KI2lmZGVmIFVTRV9TV0FQ
DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3lzL21hcC5oPg0K
I2luY2x1ZGUgPHN5cy9jb25mLmg+DQojaW5jbHVkZSA8dm0vdm1fc3dhcC5o
Pg0KI2VuZGlmDQoNCnN0YXRpYyBpbnQgY2hlY2tfbmxpc3QgX19QKChzdHJ1
Y3Qgbmxpc3QgKikpOw0Kc3RhdGljIGludCBnZXRrdmFsIF9fUCgodW5zaWdu
ZWQgbG9uZywgaW50ICosIGludCwgY2hhciAqKSk7DQpleHRlcm4gY2hhciog
cHJpbnRhYmxlIF9fUCgoY2hhciAqKSk7DQoNCiNpbmNsdWRlICJ0b3AuaCIN
CiNpbmNsdWRlICJtYWNoaW5lLmgiDQoNCg0KLyogZ2V0X3Byb2Nlc3NfaW5m
byBwYXNzZXMgYmFjayBhIGhhbmRsZS4gIFRoaXMgaXMgd2hhdCBpdCBsb29r
cyBsaWtlOiAqLw0KDQpzdHJ1Y3QgaGFuZGxlDQp7DQogICAgc3RydWN0IGtp
bmZvX3Byb2MgKipuZXh0X3Byb2M7CS8qIHBvaW50cyB0byBuZXh0IHZhbGlk
IHByb2MgcG9pbnRlciAqLw0KICAgIGludCByZW1haW5pbmc7CQkvKiBudW1i
ZXIgb2YgcG9pbnRlcnMgcmVtYWluaW5nICovDQp9Ow0KDQovKiBkZWNsYXJh
dGlvbnMgZm9yIGxvYWRfYXZnICovDQojaW5jbHVkZSAibG9hZGF2Zy5oIg0K
DQojZGVmaW5lIFBQKHBwLCBmaWVsZCkgKChwcCktPmtwX3Byb2MgLiBmaWVs
ZCkNCiNkZWZpbmUgRVAocHAsIGZpZWxkKSAoKHBwKS0+a3BfZXByb2MgLiBm
aWVsZCkNCiNkZWZpbmUgVlAocHAsIGZpZWxkKSAoKHBwKS0+a3BfZXByb2Mu
ZV92bSAuIGZpZWxkKQ0KDQovKiBkZWZpbmUgd2hhdCB3ZWlnaHRlZCBjcHUg
aXMuICAqLw0KI2RlZmluZSB3ZWlnaHRlZF9jcHUocGN0LCBwcCkgKFBQKChw
cCksIHBfc3d0aW1lKSA9PSAwID8gMC4wIDogXA0KCQkJICgocGN0KSAvICgx
LjAgLSBleHAoUFAoKHBwKSwgcF9zd3RpbWUpICogbG9nY3B1KSkpKQ0KDQov
KiB3aGF0IHdlIGNvbnNpZGVyIHRvIGJlIHByb2Nlc3Mgc2l6ZTogKi8NCiNk
ZWZpbmUgUFJPQ1NJWkUocHApIChWUCgocHApLCB2bV90c2l6ZSkgKyBWUCgo
cHApLCB2bV9kc2l6ZSkgKyBWUCgocHApLCB2bV9zc2l6ZSkpDQoNCi8qIGRl
ZmluaXRpb25zIGZvciBpbmRpY2VzIGluIHRoZSBubGlzdCBhcnJheSAqLw0K
DQoNCnN0YXRpYyBzdHJ1Y3Qgbmxpc3QgbmxzdFtdID0gew0KI2RlZmluZSBY
X0NDUFUJCTANCiAgICB7ICJfY2NwdSIgfSwJCS8qIDAgKi8NCiNkZWZpbmUg
WF9DUF9USU1FCTENCiAgICB7ICJfY3BfdGltZSIgfSwJCS8qIDEgKi8NCiNk
ZWZpbmUgWF9IWgkJMg0KICAgIHsgIl9oeiIgfSwJCSAgICAgICAgLyogMiAq
Lw0KI2RlZmluZSBYX1NUQVRIWgkzDQogICAgeyAiX3N0YXRoeiIgfSwJCS8q
IDMgKi8NCiNkZWZpbmUgWF9BVkVOUlVOCTQNCiAgICB7ICJfYXZlcnVubmFi
bGUiIH0sCQkvKiA0ICovDQoNCiNpZmRlZiBWTV9SRUFMDQojZGVmaW5lIFhf
Q05UICAgICAgICAgICA1DQogICAgeyAiX2NudCIgfSwJCSAgICAgICAgLyog
c3RydWN0IHZtbWV0ZXIgY250ICovDQojZW5kaWYNCg0KI2lmZGVmIExBU1RQ
SUQNCiNpZiAoZGVmaW5lZCBWTV9SRUFMKQ0KI2RlZmluZSBYX0xBU1RQSUQJ
Ng0KI2Vsc2UNCiNkZWZpbmUgWF9MQVNUUElEICAgICAgIDUNCiNlbmRpZg0K
I2lmZGVmIExBU1RQSURfRklYRUQNCiAgICB7ICJfbmV4dHBpZCIgfSwJCQ0K
I2Vsc2UNCiAgICB7ICJfbmV4dHBpZC4xNzgiIH0sCQkvKiBsYXN0cGlkLCBj
b21waWxlciBkZXBlbmRlZCANCgkJCQkgKiBzaG91bGQgYmUgY2hhbmdlZCAN
CgkJCQkgKiBpbiAvc3lzL2tlcm4va2Vybl9mb3JrLmMgKi8NCiNlbmRpZg0K
I2VuZGlmDQoNCiAgICB7IDAgfQ0KfTsNCg0KLyoNCiAqICBUaGVzZSBkZWZp
bml0aW9ucyBjb250cm9sIHRoZSBmb3JtYXQgb2YgdGhlIHBlci1wcm9jZXNz
IGFyZWENCiAqLw0KDQpzdGF0aWMgY2hhciBoZWFkZXJbXSA9DQogICIgIFBJ
RCBYICAgICAgICBQUkkgTklDRSAgIFNJWkUgICBSRVMgU1RBVEUgICBUSU1F
ICAgV0NQVSAgICBDUFUgQ09NTUFORCI7DQovKiAwMTIzNDU2ICAgLS0gZmll
bGQgdG8gZmlsbCBpbiBzdGFydHMgYXQgaGVhZGVyKzYgKi8NCiNkZWZpbmUg
VU5BTUVfU1RBUlQgNg0KDQojZGVmaW5lIFByb2NfZm9ybWF0IFwNCgkiJTVk
ICUtOC44cyAlM2QgJTRkJTdzICU1cyAlLTVzJTdzICU1LjJmJSUgJTUuMmYl
JSAlLjE0cyINCg0KDQovKiBwcm9jZXNzIHN0YXRlIG5hbWVzIGZvciB0aGUg
IlNUQVRFIiBjb2x1bW4gb2YgdGhlIGRpc3BsYXkgKi8NCi8qIHRoZSBleHRy
YSBudWxscyBpbiB0aGUgc3RyaW5nICJydW4iIGFyZSBmb3IgYWRkaW5nIGEg
c2xhc2ggYW5kDQogICB0aGUgcHJvY2Vzc29yIG51bWJlciB3aGVuIG5lZWRl
ZCAqLw0KDQpjaGFyICpzdGF0ZV9hYmJyZXZbXSA9DQp7DQogICAgIiIsICJz
dGFydCIsICJydW5cMFwwXDAiLCAic2xlZXAiLCAic3RvcCIsICJ6b21iIiwg
IldBSVQiDQp9Ow0KDQoNCnN0YXRpYyBrdm1fdCAqa2Q7DQoNCi8qIHZhbHVl
cyB0aGF0IHdlIHN0YXNoIGF3YXkgaW4gX2luaXQgYW5kIHVzZSBpbiBsYXRl
ciByb3V0aW5lcyAqLw0KDQpzdGF0aWMgZG91YmxlIGxvZ2NwdTsNCg0KLyog
dGhlc2UgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBrZXJuZWwgaW4gX2luaXQg
Ki8NCg0Kc3RhdGljICAgICAgICAgIGxvbmcgaHo7DQpzdGF0aWMgbG9hZF9h
dmcgIGNjcHU7DQoNCi8qIHRoZXNlIGFyZSBvZmZzZXRzIG9idGFpbmVkIHZp
YSBubGlzdCBhbmQgdXNlZCBpbiB0aGUgZ2V0XyBmdW5jdGlvbnMgKi8NCg0K
c3RhdGljIHVuc2lnbmVkIGxvbmcgY3BfdGltZV9vZmZzZXQ7DQpzdGF0aWMg
dW5zaWduZWQgbG9uZyBhdmVucnVuX29mZnNldDsNCiNpZmRlZiBMQVNUUElE
DQpzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0cGlkX29mZnNldDsNCnN0YXRp
YyBsb25nIGxhc3RwaWQ7DQojZW5kaWYNCiNpZmRlZiBWTV9SRUFMDQpzdGF0
aWMgdW5zaWduZWQgbG9uZyBjbnRfb2Zmc2V0Ow0Kc3RhdGljIGxvbmcgY250
Ow0KI2VuZGlmDQovKiB0aGVzZSBhcmUgZm9yIGNhbGN1bGF0aW5nIGNwdSBz
dGF0ZSBwZXJjZW50YWdlcyAqLw0KDQpzdGF0aWMgbG9uZyBjcF90aW1lW0NQ
VVNUQVRFU107DQpzdGF0aWMgbG9uZyBjcF9vbGRbQ1BVU1RBVEVTXTsNCnN0
YXRpYyBsb25nIGNwX2RpZmZbQ1BVU1RBVEVTXTsNCg0KLyogdGhlc2UgYXJl
IGZvciBkZXRhaWxpbmcgdGhlIHByb2Nlc3Mgc3RhdGVzICovDQoNCmludCBw
cm9jZXNzX3N0YXRlc1s3XTsNCmNoYXIgKnByb2NzdGF0ZW5hbWVzW10gPSB7
DQogICAgIiIsICIgc3RhcnRpbmcsICIsICIgcnVubmluZywgIiwgIiBzbGVl
cGluZywgIiwgIiBzdG9wcGVkLCAiLA0KICAgICIgem9tYmllLCAiLCAiIEFC
QU5ET05FRCwgIiwNCiAgICBOVUxMDQp9Ow0KDQovKiB0aGVzZSBhcmUgZm9y
IGRldGFpbGluZyB0aGUgY3B1IHN0YXRlcyAqLw0KDQppbnQgY3B1X3N0YXRl
c1tDUFVTVEFURVNdOw0KY2hhciAqY3B1c3RhdGVuYW1lc1tdID0gew0KICAg
ICJ1c2VyIiwgIm5pY2UiLCAic3lzdGVtIiwgImludGVycnVwdCIsICJpZGxl
IiwgTlVMTA0KfTsNCg0KLyogdGhlc2UgYXJlIGZvciBkZXRhaWxpbmcgdGhl
IG1lbW9yeSBzdGF0aXN0aWNzICovDQoNCmludCBtZW1vcnlfc3RhdHNbOF07
DQpjaGFyICptZW1vcnluYW1lc1tdID0gew0KI2lmbmRlZiBWTV9SRUFMDQog
ICAgIlJlYWw6ICIsICJLLyIsICJLICIsICJWaXJ0OiAiLCAiSy8iLA0KICAg
ICJLICIsICJGcmVlOiAiLCAiSyIsIE5VTEwNCiNlbHNlDQojaWYgMA0KICAg
ICJLIEFjdCAiLCAiSyBJbmFjdCAiLCAiSyBXaXJlZCAiLCAiSyBGcmVlICIs
ICIlIFN3YXAsICIsDQogICAgIksvIiwgIksgU1dJTyIsIA0KI2Vsc2UNCiAg
ICAiSyBBY3QgIiwgIksgSW5hY3QgIiwgIksgV2lyZWQgIiwgIksgRnJlZSAi
LCAiJSBTd2FwLCAiLA0KICAgICJLaW4gIiwgIktvdXQiLCANCiNlbmRpZg0K
ICAgIE5VTEwNCiNlbmRpZg0KfTsNCg0KLyogdGhlc2UgYXJlIGZvciBrZWVw
aW5nIHRyYWNrIG9mIHRoZSBwcm9jIGFycmF5ICovDQoNCnN0YXRpYyBpbnQg
bnByb2M7DQpzdGF0aWMgaW50IG9ucHJvYyA9IC0xOw0Kc3RhdGljIGludCBw
cmVmX2xlbjsNCnN0YXRpYyBzdHJ1Y3Qga2luZm9fcHJvYyAqcGJhc2U7DQpz
dGF0aWMgc3RydWN0IGtpbmZvX3Byb2MgKipwcmVmOw0KDQovKiB0aGVzZSBh
cmUgZm9yIGdldHRpbmcgdGhlIG1lbW9yeSBzdGF0aXN0aWNzICovDQoNCnN0
YXRpYyBpbnQgcGFnZXNoaWZ0OwkJLyogbG9nIGJhc2UgMiBvZiB0aGUgcGFn
ZXNpemUgKi8NCg0KLyogZGVmaW5lIHBhZ2V0b2sgaW4gdGVybXMgb2YgcGFn
ZXNoaWZ0ICovDQoNCiNkZWZpbmUgcGFnZXRvayhzaXplKSAoKHNpemUpIDw8
IHBhZ2VzaGlmdCkNCg0KLyogdXNlZnVsIGV4dGVybmFscyAqLw0KbG9uZyBw
ZXJjZW50YWdlcygpOw0KDQppbnQNCm1hY2hpbmVfaW5pdChzdGF0aWNzKQ0K
DQpzdHJ1Y3Qgc3RhdGljcyAqc3RhdGljczsNCg0Kew0KICAgIHJlZ2lzdGVy
IGludCBpID0gMDsNCiAgICByZWdpc3RlciBpbnQgcGFnZXNpemU7DQoNCiAg
ICBpZiAoKGtkID0ga3ZtX29wZW4oTlVMTCwgTlVMTCwgTlVMTCwgT19SRE9O
TFksICJrdm1fb3BlbiIpKSA9PSBOVUxMKQ0KCXJldHVybiAtMTsNCg0KDQog
ICAgLyogZ2V0IHRoZSBsaXN0IG9mIHN5bWJvbHMgd2Ugd2FudCB0byBhY2Nl
c3MgaW4gdGhlIGtlcm5lbCAqLw0KICAgICh2b2lkKSBrdm1fbmxpc3Qoa2Qs
IG5sc3QpOw0KICAgIGlmIChubHN0WzBdLm5fdHlwZSA9PSAwKQ0KICAgIHsN
CglmcHJpbnRmKHN0ZGVyciwgInRvcDogbmxpc3QgZmFpbGVkXG4iKTsNCgly
ZXR1cm4oLTEpOw0KICAgIH0NCg0KICAgIC8qIG1ha2Ugc3VyZSB0aGV5IHdl
cmUgYWxsIGZvdW5kICovDQogICAgaWYgKGkgPiAwICYmIGNoZWNrX25saXN0
KG5sc3QpID4gMCkNCiAgICB7DQoJcmV0dXJuKC0xKTsNCiAgICB9DQoNCiAg
ICAvKiBnZXQgdGhlIHN5bWJvbCB2YWx1ZXMgb3V0IG9mIGttZW0gKi8NCiAg
ICAodm9pZCkgZ2V0a3ZhbChubHN0W1hfU1RBVEhaXS5uX3ZhbHVlLCAoaW50
ICopKCZoeiksIHNpemVvZihoeiksICIhIik7DQogICAgaWYgKCFoeikgew0K
CSh2b2lkKSBnZXRrdmFsKG5sc3RbWF9IWl0ubl92YWx1ZSwgKGludCAqKSgm
aHopLCBzaXplb2YoaHopLA0KCQkgICAgICAgbmxzdFtYX0haXS5uX25hbWUp
Ow0KICAgIH0NCg0KDQojaWYgKGRlZmluZWQgREVCVUcpDQogICAgZnByaW50
ZihzdGRlcnIsICJIZXJ0ejogJWRcbiIsIGh6KTsgDQojZW5kaWYNCg0KICAg
ICh2b2lkKSBnZXRrdmFsKG5sc3RbWF9DQ1BVXS5uX3ZhbHVlLCAgIChpbnQg
KikoJmNjcHUpLAlzaXplb2YoY2NwdSksDQoJICAgIG5sc3RbWF9DQ1BVXS5u
X25hbWUpOw0KDQogICAgLyogc3Rhc2ggYXdheSBjZXJ0YWluIG9mZnNldHMg
Zm9yIGxhdGVyIHVzZSAqLw0KICAgIGNwX3RpbWVfb2Zmc2V0ID0gbmxzdFtY
X0NQX1RJTUVdLm5fdmFsdWU7DQogICAgYXZlbnJ1bl9vZmZzZXQgPSBubHN0
W1hfQVZFTlJVTl0ubl92YWx1ZTsNCiNpZmRlZiBMQVNUUElEDQogICAgbGFz
dHBpZF9vZmZzZXQgPSAgbmxzdFtYX0xBU1RQSURdLm5fdmFsdWU7DQojZW5k
aWYNCiNpZmRlZiBWTV9SRUFMDQogICAgY250X29mZnNldCA9IG5sc3RbWF9D
TlRdLm5fdmFsdWU7DQojZW5kaWYNCg0KICAgIC8qIHRoaXMgaXMgdXNlZCBp
biBjYWxjdWxhdGluZyBXQ1BVIC0tIGNhbGN1bGF0ZSBpdCBhaGVhZCBvZiB0
aW1lICovDQogICAgbG9nY3B1ID0gbG9nKGxvYWRkb3VibGUoY2NwdSkpOw0K
DQogICAgcGJhc2UgPSBOVUxMOw0KICAgIHByZWYgPSBOVUxMOw0KICAgIG5w
cm9jID0gMDsNCiAgICBvbnByb2MgPSAtMTsNCiAgICAvKiBnZXQgdGhlIHBh
Z2Ugc2l6ZSB3aXRoICJnZXRwYWdlc2l6ZSIgYW5kIGNhbGN1bGF0ZSBwYWdl
c2hpZnQgZnJvbSBpdCAqLw0KICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUo
KTsNCiAgICBwYWdlc2hpZnQgPSAwOw0KICAgIHdoaWxlIChwYWdlc2l6ZSA+
IDEpDQogICAgew0KCXBhZ2VzaGlmdCsrOw0KCXBhZ2VzaXplID4+PSAxOw0K
ICAgIH0NCg0KICAgIC8qIHdlIG9ubHkgbmVlZCB0aGUgYW1vdW50IG9mIGxv
ZygyKTEwMjQgZm9yIG91ciBjb252ZXJzaW9uICovDQogICAgcGFnZXNoaWZ0
IC09IExPRzEwMjQ7DQoNCiAgICAvKiBmaWxsIGluIHRoZSBzdGF0aWNzIGlu
Zm9ybWF0aW9uICovDQogICAgc3RhdGljcy0+cHJvY3N0YXRlX25hbWVzID0g
cHJvY3N0YXRlbmFtZXM7DQogICAgc3RhdGljcy0+Y3B1c3RhdGVfbmFtZXMg
PSBjcHVzdGF0ZW5hbWVzOw0KICAgIHN0YXRpY3MtPm1lbW9yeV9uYW1lcyA9
IG1lbW9yeW5hbWVzOw0KDQogICAgLyogYWxsIGRvbmUhICovDQogICAgcmV0
dXJuKDApOw0KfQ0KDQpjaGFyICpmb3JtYXRfaGVhZGVyKHVuYW1lX2ZpZWxk
KQ0KDQpyZWdpc3RlciBjaGFyICp1bmFtZV9maWVsZDsNCg0Kew0KICAgIHJl
Z2lzdGVyIGNoYXIgKnB0cjsNCg0KICAgIHB0ciA9IGhlYWRlciArIFVOQU1F
X1NUQVJUOw0KICAgIHdoaWxlICgqdW5hbWVfZmllbGQgIT0gJ1wwJykNCiAg
ICB7DQoJKnB0cisrID0gKnVuYW1lX2ZpZWxkKys7DQogICAgfQ0KDQogICAg
cmV0dXJuKGhlYWRlcik7DQp9DQoNCnN0YXRpYyBpbnQgc3dhcHBnc2luID0g
LTE7DQpzdGF0aWMgaW50IHN3YXBwZ3NvdXQgPSAtMTsNCmV4dGVybiBzdHJ1
Y3QgdGltZXZhbCB0aW1lb3V0Ow0KDQp2b2lkDQpnZXRfc3lzdGVtX2luZm8o
c2kpDQoNCnN0cnVjdCBzeXN0ZW1faW5mbyAqc2k7DQoNCnsNCiAgICBsb25n
IHRvdGFsOw0KICAgIGxvYWRfYXZnIGF2ZW5ydW5bM107DQoNCiAgICAvKiBn
ZXQgdGhlIGNwX3RpbWUgYXJyYXkgKi8NCiAgICAodm9pZCkgZ2V0a3ZhbChj
cF90aW1lX29mZnNldCwgKGludCAqKWNwX3RpbWUsIHNpemVvZihjcF90aW1l
KSwNCgkJICAgbmxzdFtYX0NQX1RJTUVdLm5fbmFtZSk7DQogICAgKHZvaWQp
IGdldGt2YWwoYXZlbnJ1bl9vZmZzZXQsIChpbnQgKilhdmVucnVuLCBzaXpl
b2YoYXZlbnJ1biksDQoJCSAgIG5sc3RbWF9BVkVOUlVOXS5uX25hbWUpOw0K
DQojaWZkZWYgTEFTVFBJRA0KICAgICh2b2lkKSBnZXRrdmFsKGxhc3RwaWRf
b2Zmc2V0LCAoaW50ICopKCZsYXN0cGlkKSwgc2l6ZW9mKGxhc3RwaWQpLA0K
CQkgICAiISIpOw0KI2VuZGlmDQoNCiAgICAvKiBjb252ZXJ0IGxvYWQgYXZl
cmFnZXMgdG8gZG91YmxlcyAqLw0KICAgIHsNCglyZWdpc3RlciBpbnQgaTsN
CglyZWdpc3RlciBkb3VibGUgKmluZm9sb2FkcDsNCglsb2FkX2F2ZyAqYXZl
bnJ1bnA7DQoNCiNpZmRlZiBub3R5ZXQNCglzdHJ1Y3QgbG9hZGF2ZyBzeXNs
b2FkOw0KCWludCBzaXplOw0KCWdldGtlcm5pbmZvKEtJTkZPX0xPQURBVkcs
ICZzeXNsb2FkLCAmc2l6ZSwgMCk7DQojZW5kaWYNCg0KCWluZm9sb2FkcCA9
IHNpLT5sb2FkX2F2ZzsNCglhdmVucnVucCA9IGF2ZW5ydW47DQoJZm9yIChp
ID0gMDsgaSA8IDM7IGkrKykNCgl7DQojaWZkZWYgbm90eWV0DQoJICAgICpp
bmZvbG9hZHArKyA9ICgoZG91YmxlKSBzeXNsb2FkLmxkYXZnW2ldKSAvIHN5
c2xvYWQuZnNjYWxlOw0KI2VuZGlmDQoJICAgICppbmZvbG9hZHArKyA9IGxv
YWRkb3VibGUoKmF2ZW5ydW5wKyspOw0KCX0NCiAgICB9DQoNCiAgICAvKiBj
b252ZXJ0IGNwX3RpbWUgY291bnRzIHRvIHBlcmNlbnRhZ2VzICovDQogICAg
dG90YWwgPSBwZXJjZW50YWdlcyhDUFVTVEFURVMsIGNwdV9zdGF0ZXMsIGNw
X3RpbWUsIGNwX29sZCwgY3BfZGlmZik7DQoNCiAgICAvKiBzdW0gbWVtb3J5
IHN0YXRpc3RpY3MgKi8NCiAgICB7DQoNCiNpZm5kZWYgVk1fUkVBTA0KCXN0
cnVjdCB2bXRvdGFsIHRvdGFsOw0KCWludCBzaXplID0gc2l6ZW9mKHRvdGFs
KTsNCglzdGF0aWMgaW50IG1pYltdID0geyBDVExfVk0sIFZNX01FVEVSIH07
DQoNCgkvKiBnZXQgdG90YWwgLS0gc3lzdGVtd2lkZSBtYWluIG1lbW9yeSB1
c2FnZSBzdHJ1Y3R1cmUgKi8NCglpZiAoc3lzY3RsKG1pYiwgMiwgJnRvdGFs
LCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSB7DQoJICAgICh2b2lkKSBmcHJpbnRm
KHN0ZGVyciwgInRvcDogc3lzY3RsIGZhaWxlZDogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7DQoJICAgIGJ6ZXJvKCZ0b3RhbCwgc2l6ZW9mKHRvdGFsKSk7
DQoJfQ0KCS8qIGNvbnZlcnQgbWVtb3J5IHN0YXRzIHRvIEtieXRlcyAqLw0K
CW1lbW9yeV9zdGF0c1swXSA9IC0xOw0KCW1lbW9yeV9zdGF0c1sxXSA9IHBh
Z2V0b2sodG90YWwudF9hcm0pOw0KCW1lbW9yeV9zdGF0c1syXSA9IHBhZ2V0
b2sodG90YWwudF9ybSk7DQoJbWVtb3J5X3N0YXRzWzNdID0gLTE7DQoJbWVt
b3J5X3N0YXRzWzRdID0gcGFnZXRvayh0b3RhbC50X2F2bSk7DQoJbWVtb3J5
X3N0YXRzWzVdID0gcGFnZXRvayh0b3RhbC50X3ZtKTsNCgltZW1vcnlfc3Rh
dHNbNl0gPSAtMTsNCgltZW1vcnlfc3RhdHNbN10gPSBwYWdldG9rKHRvdGFs
LnRfZnJlZSk7DQogICAgfQ0KI2Vsc2UNCglzdHJ1Y3Qgdm1tZXRlciBzdW07
DQoJc3RhdGljIHVuc2lnbmVkIGludCBzd2FwX2RlbGF5ID0gMDsNCg0KICAg
ICAgICAodm9pZCkgZ2V0a3ZhbChjbnRfb2Zmc2V0LCAoaW50ICopKCZzdW0p
LCBzaXplb2Yoc3VtKSwNCgkJICAgIl9jbnQiKTsNCg0KCS8qIGNvbnZlcnQg
bWVtb3J5IHN0YXRzIHRvIEtieXRlcyAqLw0KCW1lbW9yeV9zdGF0c1swXSA9
IHBhZ2V0b2soc3VtLnZfYWN0aXZlX2NvdW50KTsNCgltZW1vcnlfc3RhdHNb
MV0gPSBwYWdldG9rKHN1bS52X2luYWN0aXZlX2NvdW50KTsNCgltZW1vcnlf
c3RhdHNbMl0gPSBwYWdldG9rKHN1bS52X3dpcmVfY291bnQpOw0KCW1lbW9y
eV9zdGF0c1szXSA9IHBhZ2V0b2soc3VtLnZfZnJlZV9jb3VudCk7DQoNCiAg
ICAgICAgaWYgKHN3YXBwZ3NpbiA8IDApIHsNCgkgICAgbWVtb3J5X3N0YXRz
WzVdID0gMDsNCgkgICAgbWVtb3J5X3N0YXRzWzZdID0gMDsNCgl9IGVsc2Ug
ew0KCSAgICBtZW1vcnlfc3RhdHNbNV0gPSBwYWdldG9rKCgoc3VtLnZfcHN3
cGluIC0gc3dhcHBnc2luKSkpOw0KCSAgICBtZW1vcnlfc3RhdHNbNl0gPSBw
YWdldG9rKCgoc3VtLnZfcHN3cG91dCAtIHN3YXBwZ3NvdXQpKSk7DQoJfQ0K
ICAgICAgICBzd2FwcGdzaW4gPSBzdW0udl9wc3dwaW47DQoJc3dhcHBnc291
dCA9IHN1bS52X3Bzd3BvdXQ7DQoNCiNpZmRlZiBVU0VfU1dBUA0KICAgICAg
ICBpZiAoKG1lbW9yeV9zdGF0c1s1XSA+IDAgfHwgbWVtb3J5X3N0YXRzWzZd
KSA+IDAgfHwgc3dhcF9kZWxheSA9PSAwKSB7DQoJICAgIG1lbW9yeV9zdGF0
c1s0XSA9IHN3YXBtb2RlKCk7DQoJfQ0KICAgICAgICAvKiBzd2FwX2RlbGF5
Kys7IFhYWCBBcm5lICovDQojZWxzZQ0KICAgICAgICBtZW1vcnlfc3RhdHNb
NF0gPSAwOw0KI2VuZGlmDQoNCg0KCW1lbW9yeV9zdGF0c1s3XSA9IC0xOw0K
ICAgIH0NCiNlbmRpZg0KICAgIC8qIHNldCBhcnJheXMgYW5kIHN0cmluZ3Mg
Ki8NCiAgICBzaS0+Y3B1c3RhdGVzID0gY3B1X3N0YXRlczsNCiAgICBzaS0+
bWVtb3J5ID0gbWVtb3J5X3N0YXRzOw0KI2lmZGVmIExBU1RQSUQNCiAgICBp
ZihsYXN0cGlkID4gMCkgew0KCXNpLT5sYXN0X3BpZCA9IGxhc3RwaWQ7DQog
ICAgfSBlbHNlIHsNCglzaS0+bGFzdF9waWQgPSAtMTsNCiAgICB9DQojZWxz
ZQ0KICAgIHNpLT5sYXN0X3BpZCA9IC0xOw0KI2VuZGlmDQoNCn0NCg0Kc3Rh
dGljIHN0cnVjdCBoYW5kbGUgaGFuZGxlOw0KDQpjYWRkcl90IGdldF9wcm9j
ZXNzX2luZm8oc2ksIHNlbCwgY29tcGFyZSkNCg0Kc3RydWN0IHN5c3RlbV9p
bmZvICpzaTsNCnN0cnVjdCBwcm9jZXNzX3NlbGVjdCAqc2VsOw0KaW50ICgq
Y29tcGFyZSkoKTsNCg0Kew0KICAgIHJlZ2lzdGVyIGludCBpOw0KICAgIHJl
Z2lzdGVyIGludCB0b3RhbF9wcm9jczsNCiAgICByZWdpc3RlciBpbnQgYWN0
aXZlX3Byb2NzOw0KICAgIHJlZ2lzdGVyIHN0cnVjdCBraW5mb19wcm9jICoq
cHJlZnA7DQogICAgcmVnaXN0ZXIgc3RydWN0IGtpbmZvX3Byb2MgKnBwOw0K
DQogICAgLyogdGhlc2UgYXJlIGNvcGllZCBvdXQgb2Ygc2VsIGZvciBzcGVl
ZCAqLw0KICAgIGludCBzaG93X2lkbGU7DQogICAgaW50IHNob3dfc3lzdGVt
Ow0KICAgIGludCBzaG93X3VpZDsNCiAgICBpbnQgc2hvd19jb21tYW5kOw0K
DQogICAgDQogICAgcGJhc2UgPSBrdm1fZ2V0cHJvY3Moa2QsIEtFUk5fUFJP
Q19BTEwsIDAsICZucHJvYyk7DQogICAgaWYgKG5wcm9jID4gb25wcm9jKQ0K
CXByZWYgPSAoc3RydWN0IGtpbmZvX3Byb2MgKiopIHJlYWxsb2MocHJlZiwg
c2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jICopDQoJCSogKG9ucHJvYyA9IG5w
cm9jKSk7DQogICAgaWYgKHByZWYgPT0gTlVMTCB8fCBwYmFzZSA9PSBOVUxM
KSB7DQoJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAidG9wOiBPdXQgb2YgbWVt
b3J5LlxuIik7DQoJcXVpdCgyMyk7DQogICAgfQ0KICAgIC8qIGdldCBhIHBv
aW50ZXIgdG8gdGhlIHN0YXRlcyBzdW1tYXJ5IGFycmF5ICovDQogICAgc2kt
PnByb2NzdGF0ZXMgPSBwcm9jZXNzX3N0YXRlczsNCg0KICAgIC8qIHNldCB1
cCBmbGFncyB3aGljaCBkZWZpbmUgd2hhdCB3ZSBhcmUgZ29pbmcgdG8gc2Vs
ZWN0ICovDQogICAgc2hvd19pZGxlID0gc2VsLT5pZGxlOw0KICAgIHNob3df
c3lzdGVtID0gc2VsLT5zeXN0ZW07DQogICAgc2hvd191aWQgPSBzZWwtPnVp
ZCAhPSAtMTsNCiAgICBzaG93X2NvbW1hbmQgPSBzZWwtPmNvbW1hbmQgIT0g
TlVMTDsNCg0KICAgIC8qIGNvdW50IHVwIHByb2Nlc3Mgc3RhdGVzIGFuZCBn
ZXQgcG9pbnRlcnMgdG8gaW50ZXJlc3RpbmcgcHJvY3MgKi8NCiAgICB0b3Rh
bF9wcm9jcyA9IDA7DQogICAgYWN0aXZlX3Byb2NzID0gMDsNCiAgICBtZW1z
ZXQoKGNoYXIgKilwcm9jZXNzX3N0YXRlcywgMCwgc2l6ZW9mKHByb2Nlc3Nf
c3RhdGVzKSk7DQogICAgcHJlZnAgPSBwcmVmOw0KICAgIGZvciAocHAgPSBw
YmFzZSwgaSA9IDA7IGkgPCBucHJvYzsgcHArKywgaSsrKQ0KICAgIHsNCgkv
Kg0KCSAqICBQbGFjZSBwb2ludGVycyB0byBlYWNoIHZhbGlkIHByb2Mgc3Ry
dWN0dXJlIGluIHByZWZbXS4NCgkgKiAgUHJvY2VzcyBzbG90cyB0aGF0IGFy
ZSBhY3R1YWxseSBpbiB1c2UgaGF2ZSBhIG5vbi16ZXJvDQoJICogIHN0YXR1
cyBmaWVsZC4gIFByb2Nlc3NlcyB3aXRoIFBfU1lTVEVNIHNldCBhcmUgc3lz
dGVtDQoJICogIHByb2Nlc3Nlcy0tLXRoZXNlIGdldCBpZ25vcmVkIHVubGVz
cyBzaG93X3N5c3Byb2NzIGlzIHNldC4NCgkgKi8NCglpZiAoUFAocHAsIHBf
c3RhdCkgIT0gMCAmJg0KCSAgICAoc2hvd19zeXN0ZW0gfHwgKChQUChwcCwg
cF9mbGFnKSAmIFBfU1lTVEVNKSA9PSAwKSkpDQoJew0KCSAgICB0b3RhbF9w
cm9jcysrOw0KCSAgICBwcm9jZXNzX3N0YXRlc1sodW5zaWduZWQgY2hhcikg
UFAocHAsIHBfc3RhdCldKys7DQoJICAgIGlmICgoUFAocHAsIHBfc3RhdCkg
IT0gU1pPTUIpICYmDQoJCShzaG93X2lkbGUgfHwgKFBQKHBwLCBwX3BjdGNw
dSkgIT0gMCkgfHwgDQoJCSAoUFAocHAsIHBfc3RhdCkgPT0gU1JVTikpICYm
DQoJCSghc2hvd191aWQgfHwgRVAocHAsIGVfcGNyZWQucF9ydWlkKSA9PSAo
dWlkX3Qpc2VsLT51aWQpKQ0KCSAgICB7DQoJCSpwcmVmcCsrID0gcHA7DQoJ
CWFjdGl2ZV9wcm9jcysrOw0KCSAgICB9DQoJfQ0KICAgIH0NCg0KICAgIC8q
IGlmIHJlcXVlc3RlZCwgc29ydCB0aGUgImludGVyZXN0aW5nIiBwcm9jZXNz
ZXMgKi8NCiAgICBpZiAoY29tcGFyZSAhPSBOVUxMKQ0KICAgIHsNCglxc29y
dCgoY2hhciAqKXByZWYsIGFjdGl2ZV9wcm9jcywgc2l6ZW9mKHN0cnVjdCBr
aW5mb19wcm9jICopLCBjb21wYXJlKTsNCiAgICB9DQoNCiAgICAvKiByZW1l
bWJlciBhY3RpdmUgYW5kIHRvdGFsIGNvdW50cyAqLw0KICAgIHNpLT5wX3Rv
dGFsID0gdG90YWxfcHJvY3M7DQogICAgc2ktPnBfYWN0aXZlID0gcHJlZl9s
ZW4gPSBhY3RpdmVfcHJvY3M7DQoNCiAgICAvKiBwYXNzIGJhY2sgYSBoYW5k
bGUgKi8NCiAgICBoYW5kbGUubmV4dF9wcm9jID0gcHJlZjsNCiAgICBoYW5k
bGUucmVtYWluaW5nID0gYWN0aXZlX3Byb2NzOw0KICAgIHJldHVybigoY2Fk
ZHJfdCkmaGFuZGxlKTsNCn0NCg0KY2hhciBmbXRbMTI4XTsJCS8qIHN0YXRp
YyBhcmVhIHdoZXJlIHJlc3VsdCBpcyBidWlsdCAqLw0KDQpjaGFyICpmb3Jt
YXRfbmV4dF9wcm9jZXNzKGhhbmRsZSwgZ2V0X3VzZXJpZCkNCg0KY2FkZHJf
dCBoYW5kbGU7DQpjaGFyICooKmdldF91c2VyaWQpKCk7DQoNCnsNCiAgICBy
ZWdpc3RlciBzdHJ1Y3Qga2luZm9fcHJvYyAqcHA7DQogICAgcmVnaXN0ZXIg
bG9uZyBjcHV0aW1lOw0KICAgIHJlZ2lzdGVyIGRvdWJsZSBwY3Q7DQogICAg
c3RydWN0IGhhbmRsZSAqaHA7DQoNCiAgICAvKiBmaW5kIGFuZCByZW1lbWJl
ciB0aGUgbmV4dCBwcm9jIHN0cnVjdHVyZSAqLw0KICAgIGhwID0gKHN0cnVj
dCBoYW5kbGUgKiloYW5kbGU7DQogICAgcHAgPSAqKGhwLT5uZXh0X3Byb2Mr
Kyk7DQogICAgaHAtPnJlbWFpbmluZy0tOw0KICAgIA0KDQogICAgLyogZ2V0
IHRoZSBwcm9jZXNzJ3MgdXNlciBzdHJ1Y3QgYW5kIHNldCBjcHV0aW1lICov
DQogICAgaWYgKChQUChwcCwgcF9mbGFnKSAmIFBfSU5NRU0pID09IDApIHsN
CgkvKg0KCSAqIFByaW50IHN3YXBwZWQgcHJvY2Vzc2VzIGFzIDxwbmFtZT4N
CgkgKi8NCgljaGFyICpjb21tID0gUFAocHAsIHBfY29tbSk7DQojZGVmaW5l
IENPTVNJWiBzaXplb2YoUFAocHAsIHBfY29tbSkpDQoJY2hhciBidWZbQ09N
U0laXTsNCgkodm9pZCkgc3RybmNweShidWYsIGNvbW0sIENPTVNJWik7DQoJ
Y29tbVswXSA9ICc8JzsNCgkodm9pZCkgc3RybmNweSgmY29tbVsxXSwgYnVm
LCBDT01TSVogLSAyKTsNCgljb21tW0NPTVNJWiAtIDJdID0gJ1wwJzsNCgko
dm9pZCkgc3RybmNhdChjb21tLCAiPiIsIENPTVNJWiAtIDEpOw0KCWNvbW1b
Q09NU0laIC0gMV0gPSAnXDAnOw0KICAgIH0NCg0KI2lmIDANCiAgICAvKiBU
aGlzIGRvZXMgbm90IHByb2R1Y2UgdGhlIGNvcnJlY3QgcmVzdWx0cyAqLw0K
ICAgIGNwdXRpbWUgPSBQUChwcCwgcF91dGlja3MpICsgUFAocHAsIHBfc3Rp
Y2tzKSArIFBQKHBwLCBwX2l0aWNrcyk7DQojZW5kaWYNCiAgICBjcHV0aW1l
ID0gUFAocHAsIHBfcnRpbWUpLnR2X3NlYzsJLyogVGhpcyBkb2VzIG5vdCBj
b3VudCBpbnRlcnJ1cHRzICovDQoNCiAgICAvKiBjYWxjdWxhdGUgdGhlIGJh
c2UgZm9yIGNwdSBwZXJjZW50YWdlcyAqLw0KICAgIHBjdCA9IHBjdGRvdWJs
ZShQUChwcCwgcF9wY3RjcHUpKTsNCg0KICAgIC8qIGZvcm1hdCB0aGlzIGVu
dHJ5ICovDQogICAgc3ByaW50ZihmbXQsDQoJICAgIFByb2NfZm9ybWF0LA0K
CSAgICBQUChwcCwgcF9waWQpLA0KCSAgICAoKmdldF91c2VyaWQpKEVQKHBw
LCBlX3BjcmVkLnBfcnVpZCkpLA0KCSAgICBQUChwcCwgcF9wcmlvcml0eSkg
LSBQWkVSTywNCgkgICAgUFAocHAsIHBfbmljZSkgLSBOWkVSTywNCgkgICAg
Zm9ybWF0X2socGFnZXRvayhQUk9DU0laRShwcCkpKSwNCgkgICAgZm9ybWF0
X2socGFnZXRvayhWUChwcCwgdm1fcnNzaXplKSkpLA0KCSAgICBzdGF0ZV9h
YmJyZXZbKHVuc2lnbmVkIGNoYXIpIFBQKHBwLCBwX3N0YXQpXSwNCgkgICAg
Zm9ybWF0X3RpbWUoY3B1dGltZSksDQoJICAgIDEwMDAwLjAgKiB3ZWlnaHRl
ZF9jcHUocGN0LCBwcCkgLyBoeiwNCgkgICAgMTAwMDAuMCAqIHBjdCAvIGh6
LA0KCSAgICBwcmludGFibGUoUFAocHAsIHBfY29tbSkpKTsNCg0KICAgIC8q
IHJldHVybiB0aGUgcmVzdWx0ICovDQogICAgcmV0dXJuKGZtdCk7DQp9DQoN
Cg0KLyoNCiAqIGNoZWNrX25saXN0KG5sc3QpIC0gY2hlY2tzIHRoZSBubGlz
dCB0byBzZWUgaWYgYW55IHN5bWJvbHMgd2VyZSBub3QNCiAqCQlmb3VuZC4g
IEZvciBldmVyeSBzeW1ib2wgdGhhdCB3YXMgbm90IGZvdW5kLCBhIG9uZS1s
aW5lDQogKgkJbWVzc2FnZSBpcyBwcmludGVkIHRvIHN0ZGVyci4gIFRoZSBy
b3V0aW5lIHJldHVybnMgdGhlDQogKgkJbnVtYmVyIG9mIHN5bWJvbHMgTk9U
IGZvdW5kLg0KICovDQoNCnN0YXRpYyBpbnQgY2hlY2tfbmxpc3QobmxzdCkN
Cg0KcmVnaXN0ZXIgc3RydWN0IG5saXN0ICpubHN0Ow0KDQp7DQogICAgcmVn
aXN0ZXIgaW50IGk7DQoNCiAgICAvKiBjaGVjayB0byBzZWUgaWYgd2UgZ290
IEFMTCB0aGUgc3ltYm9scyB3ZSByZXF1ZXN0ZWQgKi8NCiAgICAvKiB0aGlz
IHdpbGwgd3JpdGUgb25lIGxpbmUgdG8gc3RkZXJyIGZvciBldmVyeSBzeW1i
b2wgbm90IGZvdW5kICovDQoNCiAgICBpID0gMDsNCiAgICB3aGlsZSAobmxz
dC0+bl9uYW1lICE9IE5VTEwpDQogICAgew0KCWlmIChubHN0LT5uX3R5cGUg
PT0gMCkNCgl7DQoJICAgIC8qIHRoaXMgb25lIHdhc24ndCBmb3VuZCAqLw0K
CSAgICAodm9pZCkgZnByaW50ZihzdGRlcnIsICJrZXJuZWw6IG5vIHN5bWJv
bCBuYW1lZCBgJXMnXG4iLA0KCQkJICAgbmxzdC0+bl9uYW1lKTsNCgkgICAg
aSA9IDE7DQoJfQ0KCW5sc3QrKzsNCiAgICB9DQoNCiAgICByZXR1cm4oaSk7
DQp9DQoNCg0KLyoNCiAqICBnZXRrdmFsKG9mZnNldCwgcHRyLCBzaXplLCBy
ZWZzdHIpIC0gZ2V0IGEgdmFsdWUgb3V0IG9mIHRoZSBrZXJuZWwuDQogKgki
b2Zmc2V0IiBpcyB0aGUgYnl0ZSBvZmZzZXQgaW50byB0aGUga2VybmVsIGZv
ciB0aGUgZGVzaXJlZCB2YWx1ZSwNCiAqICAJInB0ciIgcG9pbnRzIHRvIGEg
YnVmZmVyIGludG8gd2hpY2ggdGhlIHZhbHVlIGlzIHJldHJpZXZlZCwNCiAq
ICAJInNpemUiIGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGFuZCB0aGUg
b2JqZWN0IHRvIHJldHJpZXZlKSwNCiAqICAJInJlZnN0ciIgaXMgYSByZWZl
cmVuY2Ugc3RyaW5nIHVzZWQgd2hlbiBwcmludGluZyBlcnJvciBtZWVzc2Fn
ZXMsDQogKgkgICAgaWYgInJlZnN0ciIgc3RhcnRzIHdpdGggYSAnIScsIHRo
ZW4gYSBmYWlsdXJlIG9uIHJlYWQgd2lsbCBub3QNCiAqICAJICAgIGJlIGZh
dGFsICh0aGlzIG1heSBzZWVtIGxpa2UgYSBzaWxseSB3YXkgdG8gZG8gdGhp
bmdzLCBidXQgSQ0KICogIAkgICAgcmVhbGx5IGRpZG4ndCB3YW50IHRoZSBv
dmVyaGVhZCBvZiBhbm90aGVyIGFyZ3VtZW50KS4NCiAqICAJDQogKi8NCg0K
c3RhdGljIGludCBnZXRrdmFsKG9mZnNldCwgcHRyLCBzaXplLCByZWZzdHIp
DQoNCnVuc2lnbmVkIGxvbmcgb2Zmc2V0Ow0KaW50ICpwdHI7DQppbnQgc2l6
ZTsNCmNoYXIgKnJlZnN0cjsNCg0Kew0KICAgIGlmIChrdm1fcmVhZChrZCwg
b2Zmc2V0LCAoY2hhciAqKSBwdHIsIHNpemUpICE9IHNpemUpDQogICAgew0K
CWlmICgqcmVmc3RyID09ICchJykNCgl7DQoJICAgIHJldHVybigwKTsNCgl9
DQoJZWxzZQ0KCXsNCgkgICAgZnByaW50ZihzdGRlcnIsICJ0b3A6IGt2bV9y
ZWFkIGZvciAlczogJXNcbiIsDQoJCXJlZnN0ciwgc3RyZXJyb3IoZXJybm8p
KTsNCgkgICAgcXVpdCgyMyk7DQoJfQ0KICAgIH0NCiAgICByZXR1cm4oMSk7
DQp9DQogICAgDQovKiBjb21wYXJpc29uIHJvdXRpbmUgZm9yIHFzb3J0ICov
DQoNCi8qDQogKiAgcHJvY19jb21wYXJlIC0gY29tcGFyaXNvbiBmdW5jdGlv
biBmb3IgInFzb3J0Ig0KICoJQ29tcGFyZXMgdGhlIHJlc291cmNlIGNvbnN1
bXB0aW9uIG9mIHR3byBwcm9jZXNzZXMgdXNpbmcgZml2ZQ0KICogIAlkaXN0
aW5jdCBrZXlzLiAgVGhlIGtleXMgKGluIGRlc2NlbmRpbmcgb3JkZXIgb2Yg
aW1wb3J0YW5jZSkgYXJlOg0KICogIAlwZXJjZW50IGNwdSwgY3B1IHRpY2tz
LCBzdGF0ZSwgcmVzaWRlbnQgc2V0IHNpemUsIHRvdGFsIHZpcnR1YWwNCiAq
ICAJbWVtb3J5IHVzYWdlLiAgVGhlIHByb2Nlc3Mgc3RhdGVzIGFyZSBvcmRl
cmVkIGFzIGZvbGxvd3MgKGZyb20gbGVhc3QNCiAqICAJdG8gbW9zdCBpbXBv
cnRhbnQpOiAgV0FJVCwgem9tYmllLCBzbGVlcCwgc3RvcCwgc3RhcnQsIHJ1
bi4gIFRoZQ0KICogIAlhcnJheSBkZWNsYXJhdGlvbiBiZWxvdyBtYXBzIGEg
cHJvY2VzcyBzdGF0ZSBpbmRleCBpbnRvIGEgbnVtYmVyDQogKiAgCXRoYXQg
cmVmbGVjdHMgdGhpcyBvcmRlcmluZy4NCiAqLw0KDQpzdGF0aWMgdW5zaWdu
ZWQgY2hhciBzb3J0ZWRfc3RhdGVbXSA9DQp7DQogICAgMCwJLyogbm90IHVz
ZWQJCSovDQogICAgMywJLyogc2xlZXAJCSovDQogICAgMSwJLyogQUJBTkRP
TkVEIChXQUlUKQkqLw0KICAgIDYsCS8qIHJ1bgkJCSovDQogICAgNSwJLyog
c3RhcnQJCSovDQogICAgMiwJLyogem9tYmllCQkqLw0KICAgIDQJLyogc3Rv
cAkJCSovDQp9Ow0KIA0KaW50DQpwcm9jX2NvbXBhcmUocHAxLCBwcDIpDQoN
CnN0cnVjdCBwcm9jICoqcHAxOw0Kc3RydWN0IHByb2MgKipwcDI7DQoNCnsN
CiAgICByZWdpc3RlciBzdHJ1Y3Qga2luZm9fcHJvYyAqcDE7DQogICAgcmVn
aXN0ZXIgc3RydWN0IGtpbmZvX3Byb2MgKnAyOw0KICAgIHJlZ2lzdGVyIGlu
dCByZXN1bHQ7DQogICAgcmVnaXN0ZXIgcGN0Y3B1IGxyZXN1bHQ7DQoNCiAg
ICAvKiByZW1vdmUgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uICovDQogICAg
cDEgPSAqKHN0cnVjdCBraW5mb19wcm9jICoqKSBwcDE7DQogICAgcDIgPSAq
KHN0cnVjdCBraW5mb19wcm9jICoqKSBwcDI7DQoNCiAgICAvKiBjb21wYXJl
IHBlcmNlbnQgY3B1IChwY3RjcHUpICovDQogICAgaWYgKChscmVzdWx0ID0g
UFAocDIsIHBfcGN0Y3B1KSAtIFBQKHAxLCBwX3BjdGNwdSkpID09IDApDQog
ICAgew0KCS8qIHVzZSBjcHRpY2tzIHRvIGJyZWFrIHRoZSB0aWUgKi8NCglp
ZiAoKHJlc3VsdCA9IFBQKHAyLCBwX2NwdGlja3MpIC0gUFAocDEsIHBfY3B0
aWNrcykpID09IDApDQoJew0KCSAgICAvKiB1c2UgcHJvY2VzcyBzdGF0ZSB0
byBicmVhayB0aGUgdGllICovDQoJICAgIGlmICgocmVzdWx0ID0gc29ydGVk
X3N0YXRlWyh1bnNpZ25lZCBjaGFyKSBQUChwMiwgcF9zdGF0KV0gLQ0KCQkJ
ICBzb3J0ZWRfc3RhdGVbKHVuc2lnbmVkIGNoYXIpIFBQKHAxLCBwX3N0YXQp
XSkgID09IDApDQoJICAgIHsNCgkJLyogdXNlIHByaW9yaXR5IHRvIGJyZWFr
IHRoZSB0aWUgKi8NCgkJaWYgKChyZXN1bHQgPSBQUChwMiwgcF9wcmlvcml0
eSkgLSBQUChwMSwgcF9wcmlvcml0eSkpID09IDApDQoJCXsNCgkJICAgIC8q
IHVzZSByZXNpZGVudCBzZXQgc2l6ZSAocnNzaXplKSB0byBicmVhayB0aGUg
dGllICovDQoJCSAgICBpZiAoKHJlc3VsdCA9IFZQKHAyLCB2bV9yc3NpemUp
IC0gVlAocDEsIHZtX3Jzc2l6ZSkpID09IDApDQoJCSAgICB7DQoJCQkvKiB1
c2UgdG90YWwgbWVtb3J5IHRvIGJyZWFrIHRoZSB0aWUgKi8NCgkJCXJlc3Vs
dCA9IFBST0NTSVpFKHAyKSAtIFBST0NTSVpFKHAxKTsNCgkJICAgIH0NCgkJ
fQ0KCSAgICB9DQoJfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KCXJlc3Vs
dCA9IGxyZXN1bHQgPCAwID8gLTEgOiAxOw0KICAgIH0NCg0KICAgIHJldHVy
bihyZXN1bHQpOw0KfQ0KDQoNCi8qDQogKiBwcm9jX293bmVyKHBpZCkgLSBy
ZXR1cm5zIHRoZSB1aWQgdGhhdCBvd25zIHByb2Nlc3MgInBpZCIsIG9yIC0x
IGlmDQogKgkJdGhlIHByb2Nlc3MgZG9lcyBub3QgZXhpc3QuDQogKgkJSXQg
aXMgRVhUUkVNTFkgSU1QT1JUQU5UIHRoYXQgdGhpcyBmdW5jdGlvbiB3b3Jr
IGNvcnJlY3RseS4NCiAqCQlJZiB0b3AgcnVucyBzZXR1aWQgcm9vdCAoYXMg
aW4gU1ZSNCksIHRoZW4gdGhpcyBmdW5jdGlvbg0KICoJCWlzIHRoZSBvbmx5
IHRoaW5nIHRoYXQgc3RhbmRzIGluIHRoZSB3YXkgb2YgYSBzZXJpb3VzDQog
KgkJc2VjdXJpdHkgcHJvYmxlbS4gIEl0IHZhbGlkYXRlcyByZXF1ZXN0cyBm
b3IgdGhlICJraWxsIg0KICoJCWFuZCAicmVuaWNlIiBjb21tYW5kcy4NCiAq
Lw0KDQppbnQgcHJvY19vd25lcihwaWQpDQoNCmludCBwaWQ7DQoNCnsNCiAg
ICByZWdpc3RlciBpbnQgY250Ow0KICAgIHJlZ2lzdGVyIHN0cnVjdCBraW5m
b19wcm9jICoqcHJlZnA7DQogICAgcmVnaXN0ZXIgc3RydWN0IGtpbmZvX3By
b2MgKnBwOw0KDQogICAgcHJlZnAgPSBwcmVmOw0KICAgIGNudCA9IHByZWZf
bGVuOw0KICAgIHdoaWxlICgtLWNudCA+PSAwKQ0KICAgIHsNCglwcCA9ICpw
cmVmcCsrOwkNCglpZiAoUFAocHAsIHBfcGlkKSA9PSAocGlkX3QpcGlkKQ0K
CXsNCgkgICAgcmV0dXJuKChpbnQpRVAocHAsIGVfcGNyZWQucF9ydWlkKSk7
DQoJfQ0KICAgIH0NCiAgICByZXR1cm4oLTEpOw0KfQ0KDQoNCiNpZmRlZiBV
U0VfU1dBUA0KLyoNCiAqIHN3YXBtb2RlIGhhcyBiZWVuIHNuaXRjaGVkIGFu
ZCBtb2RpZmllZCBmcm9tIHN3YXBsaXN0LmMNCiAqIGluIHRoZSBzd2FwY3Rs
IGNvZGUuDQogKi8NCg0KaW50DQpzd2FwbW9kZSgpDQp7DQoJc3RydWN0CXN3
YXBlbnQgKnNlcCwgKmZzZXA7DQoJaW50CXRvdGFsc2l6ZSwgdG90YWxpbnVz
ZTsNCglpbnQJcm5zd2FwLCBuc3dhcCA9IHN3YXBjdGwoU1dBUF9OU1dBUCwg
MCwgMCk7DQoNCglpZiAobnN3YXAgPCAxKSB7DQoJICByZXR1cm4gMC4wOw0K
CX0NCg0KCWZzZXAgPSBzZXAgPSAoc3RydWN0IHN3YXBlbnQgKiltYWxsb2Mo
bnN3YXAgKiBzaXplb2YoKnNlcCkpOw0KCWlmIChzZXAgPT0gTlVMTCkNCgkJ
ZnByaW50ZihzdGRlcnIsICJtYWxsb2MiKTsNCglybnN3YXAgPSBzd2FwY3Rs
KFNXQVBfU1RBVFMsICh2b2lkICopc2VwLCBuc3dhcCk7DQoNCgl0b3RhbHNp
emUgPSB0b3RhbGludXNlID0gMDsNCglmb3IgKDsgcm5zd2FwLS0gPiAwOyBz
ZXArKykgew0KCQl0b3RhbHNpemUgKz0gc2VwLT5zZV9uYmxrczsNCgkJdG90
YWxpbnVzZSArPSBzZXAtPnNlX2ludXNlOw0KCX0NCglpZiAoZnNlcCkNCgkJ
KHZvaWQpZnJlZShmc2VwKTsNCg0KCXJldHVybiAgKGludCkoKChkb3VibGUp
dG90YWxpbnVzZSAvIChkb3VibGUpdG90YWxzaXplICogMTAwLjApICsgMC41
KTsNCn0NCg0KDQojZW5kaWYNCg0K
--0-384248001-883413214=:1395--