Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Oct 2007 10:55:24 +1000
From:      Andrew Li <andrew2.li@citi.com>
To:        current@freebsd.org
Cc:        dpk@dpk.net, netchild@freebsd.org
Subject:   Patch for Extend ktrace/kdump output
Message-ID:  <1193100923.3538.71.camel@al68835rh>

next in thread | raw e-mail | index | archive | help

--=-eLqfxyP7z2mElmnuJkS0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

I'm working with Alexander Leidinger on the ktrace project mentioned on
the ideas page (http://www.freebsd.org/projects/ideas/#p-ktrace). The
patch attached is a continuance of David Kirchner's work (details here 
http://lists.freebsd.org/pipermail/freebsd-arch/2006-April/005107.html).

The attached patch modifies the kdump output for struct sockaddr and all
stat(2) calls to show a more readable output. 

For sockaddr, the new kdump shows:

  2345 telnet CALL connect(0x3,0xbfbfe600,0x1c)
  2345 telnet SOCK {AF_INET, 127.0.0.1:8000}
  2345 telnet RET connect 0

Where as the old one will show:

  2345 telnet CALL connect(0x3,0xbfbfe600,0x1c)
  2345 telnet RET connect 0

For stat(2),

  34534 stat CALL stat(0x8048614,0xbfbfe908)
  34534 stat STAT {dev=100, ino=383524, mode=-rw-r--r-- , nlink=1,
uid=1000, gid=1000, rdev=1528768, atime=1192715539, stime=1192471088,
ctime=1192471088, birthtime=1192471088, size=17898, blksize=4096,
blocks=36, flags=0x0}
  34534 stat RET stat 0

With the original ktrace/kdump, the above will be displayed like this:

  34536 stat CALL stat(0x8048614,0xbfbfe908)
  34536 stat RET stat 0

This is my first patch for FreeBSD, any feedback you may have is much
appreciated. 

$ uname -a
FreeBSD elmo 7.0-CURRENT FreeBSD 7.0-CURRENT #82: Fri Oct 19 16:34:25
EST 2007   root@elmo:/usr/obj_current/var/src_current/sys/GENERIC   i386

Andrew

--=-eLqfxyP7z2mElmnuJkS0
Content-Disposition: attachment; filename=ktrace.patch
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name=ktrace.patch; charset=

KioqIC4vc3lzL2tlcm4va2Vybl9rdHJhY2UuYy5vcmlnCVRodSBBdWcgMzAgMDc6MTc6MTEgMjAw
Nw0KLS0tIC4vc3lzL2tlcm4va2Vybl9rdHJhY2UuYwlNb24gT2N0IDIyIDEyOjE4OjI2IDIwMDcN
CioqKioqKioqKioqKioqKg0KKioqIDUxLDU2ICoqKioNCi0tLSA1MSw1OCAtLS0tDQogICNpbmNs
dWRlIDxzeXMvcHJvYy5oPg0KICAjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPg0KICAjaW5jbHVkZSA8
c3lzL3Zub2RlLmg+DQorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQorICNpbmNsdWRlIDxzeXMv
c3RhdC5oPg0KICAjaW5jbHVkZSA8c3lzL2t0cmFjZS5oPg0KICAjaW5jbHVkZSA8c3lzL3N4Lmg+
DQogICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQoqKioqKioqKioqKioqKioNCioqKiAxMDcsMTEz
ICoqKioNCiAgCXNpemVvZihzdHJ1Y3Qga3RyX2dlbmlvKSwJCS8qIEtUUl9HRU5JTyAqLw0KICAJ
c2l6ZW9mKHN0cnVjdCBrdHJfcHNpZyksCQkvKiBLVFJfUFNJRyAqLw0KICAJc2l6ZW9mKHN0cnVj
dCBrdHJfY3N3KSwJCQkvKiBLVFJfQ1NXICovDQohIAkwCQkJCQkvKiBLVFJfVVNFUiAqLw0KICB9
Ow0KICANCiAgc3RhdGljIFNUQUlMUV9IRUFEKCwga3RyX3JlcXVlc3QpIGt0cl9mcmVlOw0KLS0t
IDEwOSwxMTcgLS0tLQ0KICAJc2l6ZW9mKHN0cnVjdCBrdHJfZ2VuaW8pLAkJLyogS1RSX0dFTklP
ICovDQogIAlzaXplb2Yoc3RydWN0IGt0cl9wc2lnKSwJCS8qIEtUUl9QU0lHICovDQogIAlzaXpl
b2Yoc3RydWN0IGt0cl9jc3cpLAkJCS8qIEtUUl9DU1cgKi8NCiEgCTAsCQkJCQkvKiBLVFJfVVNF
UiAqLw0KISAJMCwJCQkJCS8qIEtUUl9TT0NLQUREUiAqLw0KISAJMAkJCQkJLyogS1RSX1NUQVQg
Ki8NCiAgfTsNCiAgDQogIHN0YXRpYyBTVEFJTFFfSEVBRCgsIGt0cl9yZXF1ZXN0KSBrdHJfZnJl
ZTsNCioqKioqKioqKioqKioqKg0KKioqIDU1Miw1NTcgKioqKg0KLS0tIDU1Niw2MTAgLS0tLQ0K
ICAJa2MtPnVzZXIgPSB1c2VyOw0KICAJa3RyX2VucXVldWVyZXF1ZXN0KGN1cnRocmVhZCwgcmVx
KTsNCiAgfQ0KKyANCisgdm9pZA0KKyBrdHJzb2NrYWRkcihzaW4pDQorIAlzdHJ1Y3Qgc29ja2Fk
ZHIgKnNpbjsNCisgew0KKyAJc3RydWN0IGt0cl9yZXF1ZXN0ICpyZXE7DQorIAljaGFyICpidWYg
PSBOVUxMOw0KKyANCisgCWlmIChzaW4gJiYgc2luLT5zYV9sZW4gPiAwKSB7DQorIAkJYnVmID0g
bWFsbG9jKHNpbi0+c2FfbGVuLCBNX0tUUkFDRSwgTV9XQUlUT0spOw0KKyAJCWJjb3B5KHNpbiwg
YnVmLCBzaW4tPnNhX2xlbik7DQorIAl9DQorIAlyZXEgPSBrdHJfZ2V0cmVxdWVzdChLVFJfU09D
S0FERFIpOw0KKyAJaWYgKHJlcSA9PSBOVUxMKSB7DQorIAkJaWYgKGJ1ZiAhPSBOVUxMKQ0KKyAJ
CQlmcmVlKGJ1ZiwgTV9LVFJBQ0UpOw0KKyAJCXJldHVybjsNCisgCX0NCisgCWlmIChzaW4gJiYg
c2luLT5zYV9sZW4gPiAwKSB7DQorIAkJcmVxLT5rdHJfYnVmZmVyID0gYnVmOw0KKyAJCXJlcS0+
a3RyX2hlYWRlci5rdHJfbGVuID0gc2luLT5zYV9sZW47DQorIAl9DQorIAlrdHJfc3VibWl0cmVx
dWVzdChjdXJ0aHJlYWQsIHJlcSk7DQorIH0NCisgDQorIHZvaWQNCisga3Ryc3RhdChzdGF0cCkN
CisgCXN0cnVjdCBzdGF0ICpzdGF0cDsNCisgew0KKyAJc3RydWN0IGt0cl9yZXF1ZXN0ICpyZXE7
DQorIAlzdHJ1Y3Qgc3RhdCAqYnVmID0gTlVMTDsNCisgDQorIAlpZiAoc3RhdHApIHsNCisgCQli
dWYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGF0KSwgTV9LVFJBQ0UsIE1fV0FJVE9LKTsNCisg
CQkqYnVmID0gKnN0YXRwOw0KKyAJfQ0KKyAJcmVxID0ga3RyX2dldHJlcXVlc3QoS1RSX1NUQVQp
Ow0KKyAJaWYgKHJlcSA9PSBOVUxMKSB7DQorIAkJaWYgKGJ1ZiAhPSBOVUxMKQ0KKyAJCQlmcmVl
KGJ1ZiwgTV9LVFJBQ0UpOw0KKyAJCXJldHVybjsNCisgCX0NCisgCWlmIChzdGF0cCkgew0KKyAJ
CXJlcS0+a3RyX2J1ZmZlciA9IGJ1ZjsNCisgCQlyZXEtPmt0cl9oZWFkZXIua3RyX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc3RhdCk7DQorIAl9DQorIA0KKyAJa3RyX3N1Ym1pdHJlcXVlc3QoY3VydGhy
ZWFkLCByZXEpOw0KKyB9DQogICNlbmRpZiAvKiBLVFJBQ0UgKi8NCiAgDQogIC8qIEludGVyZmFj
ZSBhbmQgY29tbW9uIHJvdXRpbmVzICovDQoqKiogLi9zeXMva2Vybi92ZnNfc3lzY2FsbHMuYy5v
cmlnCU1vbiBTZXAgMTAgMTA6MDA6MTYgMjAwNw0KLS0tIC4vc3lzL2tlcm4vdmZzX3N5c2NhbGxz
LmMJTW9uIE9jdCAyMiAxMjoxNzowMCAyMDA3DQoqKioqKioqKioqKioqKioNCioqKiAzOCw0MyAq
KioqDQotLS0gMzgsNDQgLS0tLQ0KICBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vybi92
ZnNfc3lzY2FsbHMuYyx2IDEuNDQzIDIwMDcvMDkvMTAgMDA6MDA6MTYgcndhdHNvbiBFeHAgJCIp
Ow0KICANCiAgI2luY2x1ZGUgIm9wdF9jb21wYXQuaCINCisgI2luY2x1ZGUgIm9wdF9rdHJhY2Uu
aCINCiAgI2luY2x1ZGUgIm9wdF9tYWMuaCINCiAgDQogICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4N
CioqKioqKioqKioqKioqKg0KKioqIDY3LDcyICoqKioNCi0tLSA2OCw3NiAtLS0tDQogICNpbmNs
dWRlIDxzeXMvamFpbC5oPg0KICAjaW5jbHVkZSA8c3lzL3N5c2NhbGxzdWJyLmg+DQogICNpbmNs
dWRlIDxzeXMvc3lzY3RsLmg+DQorICNpZmRlZiBLVFJBQ0UNCisgI2luY2x1ZGUgPHN5cy9rdHJh
Y2UuaD4NCisgI2VuZGlmDQogIA0KICAjaW5jbHVkZSA8bWFjaGluZS9zdGRhcmcuaD4NCiAgDQoq
KioqKioqKioqKioqKioNCioqKiAyMTE4LDIxMjMgKioqKg0KLS0tIDIxMjIsMjEzMSAtLS0tDQog
IAlpZiAoZXJyb3IpDQogIAkJcmV0dXJuIChlcnJvcik7DQogIAkqc2JwID0gc2I7DQorICNpZmRl
ZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NUQVQpKQ0KKyAJCWt0cnN0YXQoJnNi
KTsNCisgI2VuZGlmDQogIAlyZXR1cm4gKDApOw0KICB9DQogIA0KKioqKioqKioqKioqKioqDQoq
KiogMjE2OSwyMTc0ICoqKioNCi0tLSAyMTc3LDIxODYgLS0tLQ0KICAJaWYgKGVycm9yKQ0KICAJ
CXJldHVybiAoZXJyb3IpOw0KICAJKnNicCA9IHNiOw0KKyAjaWZkZWYgS1RSQUNFDQorIAlpZiAo
S1RSUE9JTlQodGQsIEtUUl9TVEFUKSkNCisgCQlrdHJzdGF0KCZzYik7DQorICNlbmRpZg0KICAJ
cmV0dXJuICgwKTsNCiAgfQ0KICANCioqKiAuL3N5cy9rZXJuL2tlcm5fZGVzY3JpcC5jLm9yaWcJ
VHVlIEF1ZyAgNyAwMDoyNjowMCAyMDA3DQotLS0gLi9zeXMva2Vybi9rZXJuX2Rlc2NyaXAuYwlT
YXQgT2N0IDIwIDIwOjE3OjAzIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDM5LDQ0ICoqKioN
Ci0tLSAzOSw0NSAtLS0tDQogIA0KICAjaW5jbHVkZSAib3B0X2NvbXBhdC5oIg0KICAjaW5jbHVk
ZSAib3B0X2RkYi5oIg0KKyAjaW5jbHVkZSAib3B0X2t0cmFjZS5oIg0KICANCiAgI2luY2x1ZGUg
PHN5cy9wYXJhbS5oPg0KICAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQoqKioqKioqKioqKioqKioN
CioqKiA2OSw3NCAqKioqDQotLS0gNzAsNzggLS0tLQ0KICAjaW5jbHVkZSA8c3lzL3N5c3Byb3Rv
Lmg+DQogICNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+DQogICNpbmNsdWRlIDxzeXMvdm5vZGUuaD4N
CisgI2lmZGVmIEtUUkFDRQ0KKyAjaW5jbHVkZSA8c3lzL2t0cmFjZS5oPg0KKyAjZW5kaWYNCiAg
DQogICNpbmNsdWRlIDxzZWN1cml0eS9hdWRpdC9hdWRpdC5oPg0KICANCioqKioqKioqKioqKioq
Kg0KKioqIDExMjksMTEzNCAqKioqDQotLS0gMTEzMywxMTQyIC0tLS0NCiAgDQogIAllcnJvciA9
IGZvX3N0YXQoZnAsIHNicCwgdGQtPnRkX3VjcmVkLCB0ZCk7DQogIAlmZHJvcChmcCwgdGQpOw0K
KyAjaWZkZWYgS1RSQUNFDQorIAlpZiAoZXJyb3IgPT0gMCAmJiBLVFJQT0lOVCh0ZCwgS1RSX1NU
QVQpKQ0KKyAJCWt0cnN0YXQoc2JwKTsNCisgI2VuZGlmDQogIAlyZXR1cm4gKGVycm9yKTsNCiAg
fQ0KICANCioqKiAuL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYy5vcmlnCU1vbiBBdWcgMjcgMTU6
MTk6NDUgMjAwNw0KLS0tIC4vc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCU1vbiBPY3QgMjIgMTI6
MTU6MDIgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMjI3LDIzMiAqKioqDQotLS0gMjI3LDIz
NiAtLS0tDQogIAlpZiAoZXJyb3IpDQogIAkJcmV0dXJuIChlcnJvcik7DQogIAlzbyA9IGZwLT5m
X2RhdGE7DQorICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NPQ0tBRERS
KSkNCisgCQlrdHJzb2NrYWRkcihzYSk7DQorICNlbmRpZg0KICAjaWZkZWYgTUFDDQogIAlTT0NL
X0xPQ0soc28pOw0KICAJZXJyb3IgPSBtYWNfY2hlY2tfc29ja2V0X2JpbmQodGQtPnRkX3VjcmVk
LCBzbywgc2EpOw0KKioqKioqKioqKioqKioqDQoqKiogNDU0LDQ1OSAqKioqDQotLS0gNDU4LDQ2
NyAtLS0tDQogIAkJLyogY2hlY2sgc2FfbGVuIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQgKi8NCiAg
CQlpZiAoKm5hbWVsZW4gPiBzYS0+c2FfbGVuKQ0KICAJCQkqbmFtZWxlbiA9IHNhLT5zYV9sZW47
DQorICNpZmRlZiBLVFJBQ0UNCisgCQlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQor
IAkJCWt0cnNvY2thZGRyKHNhKTsNCisgI2VuZGlmDQogIAkJKm5hbWUgPSBzYTsNCiAgCQlzYSA9
IE5VTEw7DQogIAl9DQoqKioqKioqKioqKioqKioNCioqKiA1NDgsNTUzICoqKioNCi0tLSA1NTYs
NTY1IC0tLS0NCiAgCQllcnJvciA9IEVBTFJFQURZOw0KICAJCWdvdG8gZG9uZTE7DQogIAl9DQor
ICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwgS1RSX1NPQ0tBRERSKSkNCisgCQlr
dHJzb2NrYWRkcihzYSk7DQorICNlbmRpZg0KICAjaWZkZWYgTUFDDQogIAlTT0NLX0xPQ0soc28p
Ow0KICAJZXJyb3IgPSBtYWNfY2hlY2tfc29ja2V0X2Nvbm5lY3QodGQtPnRkX3VjcmVkLCBzbywg
c2EpOw0KKioqKioqKioqKioqKioqDQoqKiogMTA3MCwxMDc1ICoqKioNCi0tLSAxMDgyLDEwOTEg
LS0tLQ0KICAJfQ0KICBvdXQ6DQogIAlmZHJvcChmcCwgdGQpOw0KKyAjaWZkZWYgS1RSQUNFDQor
IAlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQorIAkJa3Ryc29ja2FkZHIoZnJvbXNh
KTsNCisgI2VuZGlmDQogIAlpZiAoZnJvbXNhKQ0KICAJCUZSRUUoZnJvbXNhLCBNX1NPTkFNRSk7
DQogIA0KKioqKioqKioqKioqKioqDQoqKiogMTQ3NCwxNDc5ICoqKioNCi0tLSAxNDkwLDE0OTkg
LS0tLQ0KICAJZWxzZQ0KICAJCWxlbiA9IE1JTigqYWxlbiwgKCpzYSktPnNhX2xlbik7DQogIAkq
YWxlbiA9IGxlbjsNCisgI2lmZGVmIEtUUkFDRQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBLVFJfU09D
S0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKCpzYSk7DQorICNlbmRpZg0KICBiYWQ6DQogIAlmZHJv
cChmcCwgdGQpOw0KICAJaWYgKGVycm9yICYmICpzYSkgew0KKioqKioqKioqKioqKioqDQoqKiog
MTU3MSwxNTc2ICoqKioNCi0tLSAxNTkxLDE2MDAgLS0tLQ0KICAJZWxzZQ0KICAJCWxlbiA9IE1J
TigqYWxlbiwgKCpzYSktPnNhX2xlbik7DQogIAkqYWxlbiA9IGxlbjsNCisgI2lmZGVmIEtUUkFD
RQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBLVFJfU09DS0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKCpz
YSk7DQorICNlbmRpZg0KICBiYWQ6DQogIAlpZiAoZXJyb3IgJiYgKnNhKSB7DQogIAkJZnJlZSgq
c2EsIE1fU09OQU1FKTsNCioqKioqKioqKioqKioqKg0KKioqIDIzNDcsMjM1MiAqKioqDQotLS0g
MjM3MSwyMzgwIC0tLS0NCiAgCWVycm9yID0gZ2V0c29jayh0ZC0+dGRfcHJvYy0+cF9mZCwgdWFw
LT5zZCwgJmZwLCBOVUxMKTsNCiAgCWlmIChlcnJvcikNCiAgCQlnb3RvIHNjdHBfYmFkOw0KKyAj
aWZkZWYgS1RSQUNFDQorIAlpZiAoS1RSUE9JTlQodGQsIEtUUl9TT0NLQUREUikpDQorIAkJa3Ry
c29ja2FkZHIodG8pOw0KKyAjZW5kaWYNCiAgDQogIAlpb3ZbMF0uaW92X2Jhc2UgPSB1YXAtPm1z
ZzsNCiAgCWlvdlswXS5pb3ZfbGVuID0gdWFwLT5tbGVuOw0KKioqKioqKioqKioqKioqDQoqKiog
MjQ1MCwyNDU1ICoqKioNCi0tLSAyNDc4LDI0ODcgLS0tLQ0KICAJZXJyb3IgPSBjb3B5aW5pb3Yo
dWFwLT5pb3YsIHVhcC0+aW92bGVuLCAmaW92LCBFTVNHU0laRSk7DQogIAlpZiAoZXJyb3IpDQog
IAkJZ290byBzY3RwX2JhZDE7DQorICNpZmRlZiBLVFJBQ0UNCisgCWlmIChLVFJQT0lOVCh0ZCwg
S1RSX1NPQ0tBRERSKSkNCisgCQlrdHJzb2NrYWRkcih0byk7DQorICNlbmRpZg0KICANCiAgCXNv
ID0gKHN0cnVjdCBzb2NrZXQgKilmcC0+Zl9kYXRhOw0KICAjaWZkZWYgTUFDDQoqKioqKioqKioq
KioqKioNCioqKiAyNjMzLDI2MzggKioqKg0KLS0tIDI2NjUsMjY3NCAtLS0tDQogIAkJCWdvdG8g
b3V0Ow0KICAJCX0NCiAgCX0NCisgI2lmZGVmIEtUUkFDRQ0KKyAJaWYgKEtUUlBPSU5UKHRkLCBL
VFJfU09DS0FERFIpKQ0KKyAJCWt0cnNvY2thZGRyKGZyb21zYSk7DQorICNlbmRpZg0KICAJaWYg
KHVhcC0+bXNnX2ZsYWdzKSB7DQogIAkJZXJyb3IgPSBjb3B5b3V0KCZtc2dfZmxhZ3MsIHVhcC0+
bXNnX2ZsYWdzLCBzaXplb2YgKGludCkpOw0KICAJCWlmIChlcnJvcikgew0KKioqIC4vc3lzL3N5
cy9rdHJhY2UuaC5vcmlnCVR1ZSBEZWMgMjcgMDk6MDk6MDkgMjAwNQ0KLS0tIC4vc3lzL3N5cy9r
dHJhY2UuaAlTYXQgT2N0IDIwIDIwOjE1OjQxIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDE1
MSwxNTYgKioqKg0KLS0tIDE1MSwxNjggLS0tLQ0KICAjZGVmaW5lIEtUUl9VU0VSCTcNCiAgDQog
IC8qDQorICAqIEtUUl9TT0NLQUREUiAtIHNvY2tldCBhZGRyZXNzIGNhbGxzDQorICAqLw0KKyAj
ZGVmaW5lIEtUUl9TT0NLQUREUgk4DQorIHN0cnVjdCBzb2NrYWRkcjsNCisgDQorIC8qDQorICAq
IEtUUl9TVEFUIC0gZmlsZSBzdGF0IGNhbGxzDQorICAqLw0KKyAjZGVmaW5lIEtUUl9TVEFUCTkN
Cisgc3RydWN0IHN0YXQ7DQorIA0KKyAvKg0KICAgKiBLVFJfRFJPUCAtIElmIHRoaXMgYml0IGlz
IHNldCBpbiBrdHJfdHlwZSwgdGhlbiBhdCBsZWFzdCBvbmUgZXZlbnQNCiAgICogYmV0d2VlbiB0
aGUgcHJldmlvdXMgcmVjb3JkIGFuZCB0aGlzIHJlY29yZCB3YXMgZHJvcHBlZC4NCiAgICovDQoq
KioqKioqKioqKioqKioNCioqKiAxNjcsMTcyICoqKioNCi0tLSAxNzksMTg2IC0tLS0NCiAgI2Rl
ZmluZQlLVFJGQUNfUFNJRwkoMTw8S1RSX1BTSUcpDQogICNkZWZpbmUgS1RSRkFDX0NTVwkoMTw8
S1RSX0NTVykNCiAgI2RlZmluZSBLVFJGQUNfVVNFUgkoMTw8S1RSX1VTRVIpDQorICNkZWZpbmUg
S1RSRkFDX1NPQ0tBRERSCSgxPDxLVFJfU09DS0FERFIpDQorICNkZWZpbmUgS1RSRkFDX1NUQVQJ
KDE8PEtUUl9TVEFUKQ0KICAvKg0KICAgKiB0cmFjZSBmbGFncyAoYWxzbyBpbiBwX3RyYWNlZmxh
Z3MpDQogICAqLw0KKioqKioqKioqKioqKioqDQoqKiogMTg1LDE5MCAqKioqDQotLS0gMTk5LDIw
NiAtLS0tDQogIHZvaWQJa3Ryc3lzcmV0KGludCwgaW50LCByZWdpc3Rlcl90KTsNCiAgdm9pZAlr
dHJwcm9jZXhpdChzdHJ1Y3QgdGhyZWFkICopOw0KICB2b2lkCWt0cnVzZXJyZXQoc3RydWN0IHRo
cmVhZCAqKTsNCisgdm9pZAlrdHJzb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKik7DQorIHZvaWQJ
a3Ryc3RhdChzdHJ1Y3Qgc3RhdCAqKTsNCiAgDQogICNlbHNlDQogIA0KKioqIC4vdXNyLmJpbi9r
ZHVtcC9rZHVtcC5jLm9yaWcJVHVlIEp1bCAxMCAxMDowMTozMCAyMDA3DQotLS0gLi91c3IuYmlu
L2tkdW1wL2tkdW1wLmMJTW9uIE9jdCAyMiAyMjozMzoyNSAyMDA3DQoqKioqKioqKioqKioqKioN
CioqKiA1OCw2OSAqKioqDQotLS0gNTgsODMgLS0tLQ0KICAjaW5jbHVkZSA8c3lzL2t0cmFjZS5o
Pg0KICAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQogICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQor
ICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKyAjaW5jbHVkZSA8c3lzL3VuLmg+DQorICNpZmRlZiBJ
UFgNCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyAjaW5jbHVkZSA8bmV0aXB4L2lweC5oPg0K
KyAjZW5kaWYNCisgI2lmZGVmIE5FVEFUQUxLDQorICNpbmNsdWRlIDxuZXRhdGFsay9hdC5oPg0K
KyAjZW5kaWYNCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiAgI2luY2x1ZGUgPGRsZmNuLmg+
DQogICNpbmNsdWRlIDxlcnIuaD4NCisgI2luY2x1ZGUgPGdycC5oPg0KKyAjaW5jbHVkZSA8aW50
dHlwZXMuaD4NCiAgI2luY2x1ZGUgPGxvY2FsZS5oPg0KKyAjaW5jbHVkZSA8cHdkLmg+DQogICNp
bmNsdWRlIDxzdGRpby5oPg0KICAjaW5jbHVkZSA8c3RkbGliLmg+DQogICNpbmNsdWRlIDxzdHJp
bmcuaD4NCisgI2luY2x1ZGUgPHRpbWUuaD4NCiAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAjaW5j
bHVkZSA8dmlzLmg+DQogICNpbmNsdWRlICJrdHJhY2UuaCINCioqKioqKioqKioqKioqKg0KKioq
IDgwLDkyICoqKioNCiAgdm9pZCBrdHJwc2lnKHN0cnVjdCBrdHJfcHNpZyAqKTsNCiAgdm9pZCBr
dHJjc3coc3RydWN0IGt0cl9jc3cgKik7DQogIHZvaWQga3RydXNlcihpbnQsIHVuc2lnbmVkIGNo
YXIgKik7DQogIHZvaWQgdXNhZ2Uodm9pZCk7DQogIGNvbnN0IGNoYXIgKmlvY3RsbmFtZSh1X2xv
bmcpOw0KICANCiEgaW50IHRpbWVzdGFtcCwgZGVjaW1hbCwgZmFuY3kgPSAxLCBzdXBwcmVzc2Rh
dGEsIHRhaWwsIHRocmVhZHMsIG1heGRhdGE7DQogIGNvbnN0IGNoYXIgKnRyYWNlZmlsZSA9IERF
Rl9UUkFDRUZJTEU7DQogIHN0cnVjdCBrdHJfaGVhZGVyIGt0cl9oZWFkZXI7DQogIA0KICAjZGVm
aW5lIGVxcyhzMSwgczIpCShzdHJjbXAoKHMxKSwgKHMyKSkgPT0gMCkNCiAgDQogIGludA0KLS0t
IDk0LDExMCAtLS0tDQogIHZvaWQga3RycHNpZyhzdHJ1Y3Qga3RyX3BzaWcgKik7DQogIHZvaWQg
a3RyY3N3KHN0cnVjdCBrdHJfY3N3ICopOw0KICB2b2lkIGt0cnVzZXIoaW50LCB1bnNpZ25lZCBj
aGFyICopOw0KKyB2b2lkIGt0cnNvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqKTsNCisgdm9pZCBr
dHJzdGF0KHN0cnVjdCBzdGF0ICopOw0KICB2b2lkIHVzYWdlKHZvaWQpOw0KICBjb25zdCBjaGFy
ICppb2N0bG5hbWUodV9sb25nKTsNCiAgDQohIGludCB0aW1lc3RhbXAsIGRlY2ltYWwsIGZhbmN5
ID0gMSwgc3VwcHJlc3NkYXRhLCB0YWlsLCB0aHJlYWRzLCBtYXhkYXRhLA0KISAgICAgcmVzb2x2
ID0gMDsNCiAgY29uc3QgY2hhciAqdHJhY2VmaWxlID0gREVGX1RSQUNFRklMRTsNCiAgc3RydWN0
IGt0cl9oZWFkZXIga3RyX2hlYWRlcjsNCiAgDQorICNkZWZpbmUgVElNRV9GT1JNQVQJIiViICVl
ICVUICVZIg0KICAjZGVmaW5lIGVxcyhzMSwgczIpCShzdHJjbXAoKHMxKSwgKHMyKSkgPT0gMCkN
CiAgDQogIGludA0KKioqKioqKioqKioqKioqDQoqKiogMTAwLDEwNiAqKioqDQogIA0KICAJKHZv
aWQpIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOw0KICANCiEgCXdoaWxlICgoY2ggPSBnZXRvcHQo
YXJnYyxhcmd2LCJmOmRFbG06bnA6SFJzVHQ6IikpICE9IC0xKQ0KICAJCXN3aXRjaCgoY2hhcilj
aCkgew0KICAJCWNhc2UgJ2YnOg0KICAJCQl0cmFjZWZpbGUgPSBvcHRhcmc7DQotLS0gMTE4LDEy
NCAtLS0tDQogIA0KICAJKHZvaWQpIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOw0KICANCiEgCXdo
aWxlICgoY2ggPSBnZXRvcHQoYXJnYyxhcmd2LCJmOmRFbG06bnA6SFJyc1R0OiIpKSAhPSAtMSkN
CiAgCQlzd2l0Y2goKGNoYXIpY2gpIHsNCiAgCQljYXNlICdmJzoNCiAgCQkJdHJhY2VmaWxlID0g
b3B0YXJnOw0KKioqKioqKioqKioqKioqDQoqKiogMTIwLDEyNSAqKioqDQotLS0gMTM4LDE0NiAt
LS0tDQogIAkJY2FzZSAncCc6DQogIAkJCXBpZCA9IGF0b2kob3B0YXJnKTsNCiAgCQkJYnJlYWs7
DQorIAkJY2FzZSAncic6DQorIAkJCXJlc29sdiA9IDE7DQorIAkJCWJyZWFrOw0KICAJCWNhc2Ug
J3MnOg0KICAJCQlzdXBwcmVzc2RhdGEgPSAxOw0KICAJCQlicmVhazsNCioqKioqKioqKioqKioq
Kg0KKioqIDIwOSwyMTQgKioqKg0KLS0tIDIzMCwyNDEgLS0tLQ0KICAJCWNhc2UgS1RSX1VTRVI6
DQogIAkJCWt0cnVzZXIoa3RybGVuLCBtKTsNCiAgCQkJYnJlYWs7DQorIAkJY2FzZSBLVFJfU09D
S0FERFI6DQorIAkJCWt0cnNvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKiltKTsNCisgCQkJYnJl
YWs7DQorIAkJY2FzZSBLVFJfU1RBVDoNCisgCQkJa3Ryc3RhdCgoc3RydWN0IHN0YXQgKiltKTsN
CisgCQkJYnJlYWs7DQogIAkJZGVmYXVsdDoNCiAgCQkJcHJpbnRmKCJcbiIpOw0KICAJCQlicmVh
azsNCioqKioqKioqKioqKioqKg0KKioqIDI2MCwyNjUgKioqKg0KLS0tIDI4NywyOTggLS0tLQ0K
ICAJY2FzZSBLVFJfVVNFUjoNCiAgCQl0eXBlID0gIlVTRVIiOw0KICAJCWJyZWFrOw0KKyAJY2Fz
ZSBLVFJfU09DS0FERFI6DQorIAkJdHlwZSA9ICJTT0NLIjsNCisgCQlicmVhazsNCisgCWNhc2Ug
S1RSX1NUQVQ6DQorIAkJdHlwZSA9ICJTVEFUIjsNCisgCQlicmVhazsNCiAgCWRlZmF1bHQ6DQog
IAkJKHZvaWQpc3ByaW50Zih1bmtub3duLCAiVU5LTk9XTiglZCkiLCBrdGgtPmt0cl90eXBlKTsN
CiAgCQl0eXBlID0gdW5rbm93bjsNCioqKioqKioqKioqKioqKg0KKioqIDExMTUsMTEyMCAqKioq
DQotLS0gMTE0OCwxMjk0IC0tLS0NCiAgfQ0KICANCiAgdm9pZA0KKyBrdHJzb2NrYWRkcihzdHJ1
Y3Qgc29ja2FkZHIgKmt0cykNCisgew0KKyAvKg0KKyAgVE9ETzogU3VwcG9ydCBhZGRpdGlvbmFs
IGFkZHJlc3MgZmFtaWxpZXMNCisgCSNpbmNsdWRlIDxuZXRhdG0vYXRtLmg+DQorIAlzdHJ1Y3Qg
c29ja2FkZHJfYXRtCSphdG07DQorIAkjaW5jbHVkZSA8bmV0bmF0bS9uYXRtLmg+DQorIAlzdHJ1
Y3Qgc29ja2FkZHJfbmF0bQkqbmF0bTsNCisgCSNpbmNsdWRlIDxuZXRzbWIvbmV0Ymlvcy5oPg0K
KyAJc3RydWN0IHNvY2thZGRyX25iCSpuYjsNCisgKi8NCisgCWNoYXIgYWRkcls2NF07DQorIA0K
KyAJcHJpbnRmKCJ7ICIpOw0KKyAJc29ja2Fwcm90b25hbWUoa3RzLT5zYV9mYW1pbHkpOw0KKyAJ
c3dpdGNoKGt0cy0+c2FfZmFtaWx5KSB7DQorIAljYXNlIEFGX0lORVQ6IHsNCisgCQlzdHJ1Y3Qg
c29ja2FkZHJfaW4JKmluOw0KKyANCisgCQlpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilrdHM7
DQorIAkJcHJpbnRmKCIsICVzOiV1IH1cbiIsIGluZXRfbnRvYShpbi0+c2luX2FkZHIpLA0KKyAJ
CQludG9ocyhpbi0+c2luX3BvcnQpKTsNCisgCQlicmVhazsNCisgCX0NCisgI2lmZGVmIE5FVEFU
QUxLDQorIAljYXNlIEFGX0FQUExFVEFMSzogew0KKyAJCXN0cnVjdCBzb2NrYWRkcl9hdAkqYXQ7
DQorIAkJc3RydWN0IG5ldHJhbmdlCQkqbnI7DQorIA0KKyAJCWF0ID0gKHN0cnVjdCBzb2NrYWRk
cl9hdCAqKWt0czsNCisgCQluciA9ICZhdC0+c2F0X3JhbmdlLnJfbmV0cmFuZ2U7DQorIAkJcHJp
bnRmKCIsICVkLiVkLCAlZC0lZCwgJWQgfVxuIiwgbnRvaHMoYXQtPnNhdF9hZGRyLnNfbmV0KSwN
CisgCQkJYXQtPnNhdF9hZGRyLnNfbm9kZSwgbnRvaHMobnItPm5yX2ZpcnN0bmV0KSwNCisgCQkJ
bnRvaHMobnItPm5yX2xhc3RuZXQpLCBuci0+bnJfcGhhc2UpOw0KKyAJCWJyZWFrOw0KKyAJfQ0K
KyAjZW5kaWYNCisgCWNhc2UgQUZfSU5FVDY6IHsNCisgCQlzdHJ1Y3Qgc29ja2FkZHJfaW42CSpp
bjY7DQorIA0KKyAJCWluNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopa3RzOw0KKyAJCWluZXRf
bnRvcChBRl9JTkVUNiwgJmluNi0+c2luNl9hZGRyLCBhZGRyLCBzaXplb2YoYWRkcikpOw0KKyAJ
CXByaW50ZigiLCBbJXNdOiV1IH1cbiIsIGFkZHIsIGh0b25zKGluNi0+c2luNl9wb3J0KSk7DQor
IAkJYnJlYWs7DQorIAl9DQorICNpZmRlZiBJUFgNCisgCWNhc2UgQUZfSVBYOiB7DQorIAkJc3Ry
dWN0IHNvY2thZGRyX2lweAkqaXB4Ow0KKyANCisgCQlpcHggPSAoc3RydWN0IHNvY2thZGRyX2lw
eCAqKWt0czsNCisgCQlwcmludGYoIiwgJXMgfVxuIiwgaXB4X250b2EoaXB4LT5zaXB4X2FkZHIp
KTsNCisgCQlicmVhazsNCisgCX0NCisgI2VuZGlmDQorIAljYXNlIEFGX1VOSVg6IHsNCisgCQlz
dHJ1Y3Qgc29ja2FkZHJfdW4JKnVuOw0KKyANCisgCQl1biA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4g
KilrdHM7DQorIAkJcHJpbnRmKCIsICUuKnMgfVxuIiwgdW4tPnN1bl9sZW4sIHVuLT5zdW5fcGF0
aCk7DQorIAkJYnJlYWs7DQorIAl9DQorIAlkZWZhdWx0Og0KKyAJCXByaW50ZigiVU5LTk9XTiBG
QU1JTFkgfVxuIik7DQorIAl9DQorIH0NCisgDQorIHZvaWQNCisga3Ryc3RhdChzdHJ1Y3Qgc3Rh
dCAqc3RhdHApDQorIHsNCisgCWNoYXIgbW9kZVsxMl0sIHRpbWVzdHJbUEFUSF9NQVggKyA0XTsN
CisgCXN0cnVjdCBwYXNzd2QgKnB3ZDsNCisgCXN0cnVjdCBncm91cCAgKmdycDsNCisgCXN0cnVj
dCB0bSAqdG07DQorIA0KKyAJc3RybW9kZShzdGF0cC0+c3RfbW9kZSwgbW9kZSk7DQorIAlwcmlu
dGYoIntkZXY9JWp1LCBpbm89JWp1LCBtb2RlPSVzLCBubGluaz0lanUsICIsDQorIAkJKHVpbnRt
YXhfdClzdGF0cC0+c3RfZGV2LCAodWludG1heF90KXN0YXRwLT5zdF9pbm8sIG1vZGUsDQorIAkJ
KHVpbnRtYXhfdClzdGF0cC0+c3RfbmxpbmspOw0KKyAJaWYgKHJlc29sdiA9PSAwIHx8IChwd2Qg
PSBnZXRwd3VpZChzdGF0cC0+c3RfdWlkKSkgPT0gTlVMTCkNCisgCQlwcmludGYoInVpZD0lanUs
ICIsICh1aW50bWF4X3Qpc3RhdHAtPnN0X3VpZCk7DQorIAllbHNlDQorIAkJcHJpbnRmKCJ1aWQ9
XCIlc1wiLCAiLCBwd2QtPnB3X25hbWUpOw0KKyAJaWYgKHJlc29sdiA9PSAwIHx8IChncnAgPSBn
ZXRncmdpZChzdGF0cC0+c3RfZ2lkKSkgPT0gTlVMTCkNCisgCQlwcmludGYoImdpZD0lanUsICIs
ICh1aW50bWF4X3Qpc3RhdHAtPnN0X2dpZCk7DQorIAllbHNlDQorIAkJcHJpbnRmKCJnaWQ9XCIl
c1wiLCAiLCBncnAtPmdyX25hbWUpOw0KKyAJcHJpbnRmKCJyZGV2PSVqdSwgIiwgKHVpbnRtYXhf
dClzdGF0cC0+c3RfcmRldik7DQorIAlwcmludGYoImF0aW1lPSIpOw0KKyAJaWYgKHJlc29sdiA9
PSAwKQ0KKyAJCXByaW50ZigiJWxkIiwgc3RhdHAtPnN0X2F0aW1lc3BlYy50dl9zZWMpOw0KKyAJ
ZWxzZSB7DQorIAkJdG0gPSBsb2NhbHRpbWUoJnN0YXRwLT5zdF9hdGltZXNwZWMudHZfc2VjKTsN
CisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVfRk9STUFU
LCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlmIChzdGF0
cC0+c3RfYXRpbWVzcGVjLnR2X25zZWMgIT0gMCkNCisgCQlwcmludGYoIi4lMDlsZCwgIiwgc3Rh
dHAtPnN0X2F0aW1lc3BlYy50dl9uc2VjKTsNCisgCWVsc2UNCisgCQlwcmludGYoIiwgIik7DQor
IAlwcmludGYoInN0aW1lPSIpOw0KKyAJaWYgKHJlc29sdiA9PSAwKQ0KKyAJCXByaW50ZigiJWxk
Iiwgc3RhdHAtPnN0X210aW1lc3BlYy50dl9zZWMpOw0KKyAJZWxzZSB7DQorIAkJdG0gPSBsb2Nh
bHRpbWUoJnN0YXRwLT5zdF9tdGltZXNwZWMudHZfc2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0
aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVfRk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJc
IiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlmIChzdGF0cC0+c3RfbXRpbWVzcGVjLnR2X25z
ZWMgIT0gMCkNCisgCQlwcmludGYoIi4lMDlsZCwgIiwgc3RhdHAtPnN0X210aW1lc3BlYy50dl9u
c2VjKTsNCisgCWVsc2UNCisgCQlwcmludGYoIiwgIik7DQorIAlwcmludGYoImN0aW1lPSIpOw0K
KyAJaWYgKHJlc29sdiA9PSAwKQ0KKyAJCXByaW50ZigiJWxkIiwgc3RhdHAtPnN0X2N0aW1lc3Bl
Yy50dl9zZWMpOw0KKyAJZWxzZSB7DQorIAkJdG0gPSBsb2NhbHRpbWUoJnN0YXRwLT5zdF9jdGlt
ZXNwZWMudHZfc2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0
ciksIFRJTUVfRk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisg
CX0NCisgCWlmIChzdGF0cC0+c3RfY3RpbWVzcGVjLnR2X25zZWMgIT0gMCkNCisgCQlwcmludGYo
Ii4lMDlsZCwgIiwgc3RhdHAtPnN0X2N0aW1lc3BlYy50dl9uc2VjKTsNCisgCWVsc2UNCisgCQlw
cmludGYoIiwgIik7DQorIAlwcmludGYoImJpcnRodGltZT0iKTsNCisgCWlmIChyZXNvbHYgPT0g
MCkNCisgCQlwcmludGYoIiVsZCIsIHN0YXRwLT5zdF9iaXJ0aHRpbWVzcGVjLnR2X3NlYyk7DQor
IAllbHNlIHsNCisgCQl0bSA9IGxvY2FsdGltZSgmc3RhdHAtPnN0X2JpcnRodGltZXNwZWMudHZf
c2VjKTsNCisgCQkodm9pZClzdHJmdGltZSh0aW1lc3RyLCBzaXplb2YodGltZXN0ciksIFRJTUVf
Rk9STUFULCB0bSk7DQorIAkJcHJpbnRmKCJcIiVzXCIiLCB0aW1lc3RyKTsNCisgCX0NCisgCWlm
IChzdGF0cC0+c3RfYmlydGh0aW1lc3BlYy50dl9uc2VjICE9IDApDQorIAkJcHJpbnRmKCIuJTA5
bGQsICIsIHN0YXRwLT5zdF9iaXJ0aHRpbWVzcGVjLnR2X25zZWMpOw0KKyAJZWxzZQ0KKyAJCXBy
aW50ZigiLCAiKTsNCisgCXByaW50Zigic2l6ZT0lamQsIGJsa3NpemU9JWp1LCBibG9ja3M9JWpk
LCBmbGFncz0weCV4fVxuIiwNCisgCQkodWludG1heF90KXN0YXRwLT5zdF9zaXplLCAodWludG1h
eF90KXN0YXRwLT5zdF9ibGtzaXplLA0KKyAJCShpbnRtYXhfdClzdGF0cC0+c3RfYmxvY2tzLCBz
dGF0cC0+c3RfZmxhZ3MpOw0KKyB9DQorIA0KKyB2b2lkDQogIHVzYWdlKHZvaWQpDQogIHsNCiAg
CSh2b2lkKWZwcmludGYoc3RkZXJyLA0KKioqIC4vdXNyLmJpbi9rZHVtcC9ta3N1YnIub3JpZwlU
dWUgQXByIDEwIDA1OjE2OjI0IDIwMDcNCi0tLSAuL3Vzci5iaW4va2R1bXAvbWtzdWJyCVNhdCBP
Y3QgMjAgMjA6MTU6MDcgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMzM3LDM0MiAqKioqDQot
LS0gMzM3LDM0MyAtLS0tDQogIGF1dG9fc3dpdGNoX3R5cGUgIm1pbmhlcml0bmFtZSIgIklOSEVS
SVRfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL21tYW4uaCINCiAgYXV0b19zd2l0Y2hf
dHlwZSAicXVvdGFjdGxuYW1lIiAiUV9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInVmcy91
ZnMvcXVvdGEuaCINCiAgYXV0b19pZl90eXBlICJzb2NrZG9tYWlubmFtZSIgIlBGX1tbOmFsbnVt
Ol1dK1tbOnNwYWNlOl1dKyIgInN5cy9zb2NrZXQuaCINCisgYXV0b19pZl90eXBlICJzb2NrYXBy
b3RvbmFtZSIgIkFGX1tbOmFsbnVtOl1dK1tbOnNwYWNlOl1dKyIgInN5cy9zb2NrZXQuaCINCiAg
YXV0b19pZl90eXBlICJzb2NraXBwcm90b25hbWUiICJJUFBST1RPX1tbOmFsbnVtOl1dK1tbOnNw
YWNlOl1dKyIgIm5ldGluZXQvaW4uaCINCiAgYXV0b19zd2l0Y2hfdHlwZSAic29ja29wdG5hbWUi
ICJTT19bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9zb2NrZXQuaCINCiAgYXV0b19z
d2l0Y2hfdHlwZSAic29ja3R5cGVuYW1lIiAiU09DS19bQS1aXStbWzpzcGFjZTpdXStbMS05XStb
MC05XSoiICJzeXMvc29ja2V0LmgiDQoqKiogLi91c3IuYmluL2tkdW1wL2tkdW1wLjEub3JpZwlG
cmkgTm92IDE4IDIxOjM2OjI4IDIwMDUNCi0tLSAuL3Vzci5iaW4va2R1bXAva2R1bXAuMQlNb24g
T2N0IDIyIDIyOjEwOjAyIDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDk2LDEwNiAqKioqDQog
IHNhbWUgdHJhY2UgZmlsZS4NCiAgLkl0IEZsIFINCiAgRGlzcGxheSByZWxhdGl2ZSB0aW1lc3Rh
bXBzICh0aW1lIHNpbmNlIHByZXZpb3VzIGVudHJ5KS4NCiAgLkl0IEZsIHMNCiAgU3VwcHJlc3Mg
ZGlzcGxheSBvZiBJL08gZGF0YS4NCiAgLkl0IEZsIFQNCiAgRGlzcGxheSBhYnNvbHV0ZSB0aW1l
c3RhbXBzIGZvciBlYWNoIGVudHJ5IChzZWNvbmRzIHNpbmNlIGVwb2NoKS4NCiEgLkl0IEZsIHQg
QXIgY25pc3V3DQogIFNlZSB0aGUNCiAgLkZsIHQNCiAgb3B0aW9uIG9mDQotLS0gOTYsMTA5IC0t
LS0NCiAgc2FtZSB0cmFjZSBmaWxlLg0KICAuSXQgRmwgUg0KICBEaXNwbGF5IHJlbGF0aXZlIHRp
bWVzdGFtcHMgKHRpbWUgc2luY2UgcHJldmlvdXMgZW50cnkpLg0KKyAuSXQgRmwgcg0KKyBUcmFu
c2xhdGUgdWlkLCBnaWQgYW5kIHRpbWVzcGVjcyBmb3IgU1RBVCByZWNvcmRzIGludG8gdXNlcm5h
bWUsDQorIGdyb3VwbmFtZSBhbmQgbG9jYWwgdGltZSwgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHRo
ZW0gYXMgbnVtYmVycy4NCiAgLkl0IEZsIHMNCiAgU3VwcHJlc3MgZGlzcGxheSBvZiBJL08gZGF0
YS4NCiAgLkl0IEZsIFQNCiAgRGlzcGxheSBhYnNvbHV0ZSB0aW1lc3RhbXBzIGZvciBlYWNoIGVu
dHJ5IChzZWNvbmRzIHNpbmNlIGVwb2NoKS4NCiEgLkl0IEZsIHQgQXIgY25pa3N0dXcNCiAgU2Vl
IHRoZQ0KICAuRmwgdA0KICBvcHRpb24gb2YNCioqKioqKioqKioqKioqKg0KKioqIDE2NSwxNzEg
KioqKg0KLS0tIDE2OCwxNzYgLS0tLQ0KICAuSXQgTGkgUkVUIFRhIHJldHVybiBmcm9tIHN5c2Nh
bGwgVGEgc3lzY2FsbCBuYW1lIGFuZCByZXR1cm4gdmFsdWUNCiAgLkl0IExpIE5BTUkgVGEgZmls
ZSBuYW1lIGxvb2t1cCBUYSBwYXRoIHRvIGZpbGUNCiAgLkl0IExpIEdFTklPIFRhIGdlbmVyYWwg
SS9PIFRhIGZkLCByZWFkL3dyaXRlLCBudW1iZXIgb2YgYnl0ZXMNCisgLkl0IExpIFNPQ0sgVGEg
c29ja2FkZHIgc3lzY2FsbCBUYSBzdHJ1Y3Qgc29ja2FkZHIgdmFsdWVzDQogIC5JdCBMaSBTSUcg
VGEgc2lnbmFsIFRhIHNpZ25hbCBuYW1lLCBoYW5kbGVyLCBtYXNrLCBjb2RlDQorIC5JdCBMaSBT
VEFUIFRhIHN0YXQgc3lzY2FsbCBUYSBzdHJ1Y3Qgc3RhdCB2YWx1ZXMNCiAgLkl0IExpIENTVyBU
YSBjb250ZXh0IHN3aXRjaCBUYSBzdG9wL3Jlc3VtZSB1c2VyL2tlcm5lbA0KICAuSXQgTGkgVVNF
UiBUYSBkYXRhIGZyb20gdXNlciBwcm9jZXNzIFRhIHRoZSBkYXRhDQogIC5FbA0KKioqIC4vdXNy
LmJpbi9rdHJhY2Uva3RyYWNlLmgub3JpZwlTdW4gQXByIDI4IDIzOjAwOjE2IDIwMDINCi0tLSAu
L3Vzci5iaW4va3RyYWNlL2t0cmFjZS5oCVNhdCBPY3QgMjAgMjA6MTM6NTkgMjAwNw0KKioqKioq
KioqKioqKioqDQoqKiogMzUsNDEgKioqKg0KICAgKi8NCiAgDQogICNkZWZpbmUgREVGX1BPSU5U
UyAoS1RSRkFDX1NZU0NBTEwgfCBLVFJGQUNfU1lTUkVUIHwgS1RSRkFDX05BTUVJIHwgXA0KISAJ
CSAgS1RSRkFDX0dFTklPIHwgS1RSRkFDX1BTSUcgfCBLVFJGQUNfVVNFUikNCiAgDQogICNkZWZp
bmUgQUxMX1BPSU5UUyAoREVGX1BPSU5UUyB8IEtUUkZBQ19DU1cpDQogIA0KLS0tIDM1LDQyIC0t
LS0NCiAgICovDQogIA0KICAjZGVmaW5lIERFRl9QT0lOVFMgKEtUUkZBQ19TWVNDQUxMIHwgS1RS
RkFDX1NZU1JFVCB8IEtUUkZBQ19OQU1FSSB8IFwNCiEgCQkgIEtUUkZBQ19HRU5JTyB8IEtUUkZB
Q19QU0lHIHwgS1RSRkFDX1VTRVIgfCBcDQohIAkJICBLVFJGQUNfU09DS0FERFIgfCBLVFJGQUNf
U1RBVCkNCiAgDQogICNkZWZpbmUgQUxMX1BPSU5UUyAoREVGX1BPSU5UUyB8IEtUUkZBQ19DU1cp
DQogIA0KKioqIC4vdXNyLmJpbi9rdHJhY2Uva3RyYWNlLjEub3JpZwlUdWUgTm92ICA3IDAyOjE3
OjUwIDIwMDYNCi0tLSAuL3Vzci5iaW4va3RyYWNlL2t0cmFjZS4xCU1vbiBPY3QgMjIgMjI6MTE6
MDQgMjAwNw0KKioqKioqKioqKioqKioqDQoqKiogMTE3LDEzMSAqKioqDQogIC5JdCBDbSBpDQog
IHRyYWNlDQogIC5UbiBJL08NCiAgLkl0IENtIHMNCiAgdHJhY2Ugc2lnbmFsIHByb2Nlc3NpbmcN
CiAgLkl0IENtIHUNCiAgdXNlcmxhbmQgdHJhY2VzDQogIC5JdCBDbSB3DQogIGNvbnRleHQgc3dp
dGNoZXMNCiAgLkl0IENtICsNCiAgdHJhY2UgdGhlIGRlZmF1bHQgc2V0IG9mIHRyYWNlIHBvaW50
cyAtDQohIC5DbSBjICwgbiAsIGkgLCBzICwgdQ0KICAuRWwNCiAgLkl0IEFyIGNvbW1hbmQNCiAg
RXhlY3V0ZQ0KLS0tIDExNywxMzUgLS0tLQ0KICAuSXQgQ20gaQ0KICB0cmFjZQ0KICAuVG4gSS9P
DQorIC5JdCBDbSBrDQorIHRyYWNlIHNvY2thZGRyIGNvbnRlbnQNCiAgLkl0IENtIHMNCiAgdHJh
Y2Ugc2lnbmFsIHByb2Nlc3NpbmcNCisgLkl0IENtIHQNCisgdHJhY2Ugc3RhdCBzdHJ1Y3QgZm9y
IHN0YXQoMikNCiAgLkl0IENtIHUNCiAgdXNlcmxhbmQgdHJhY2VzDQogIC5JdCBDbSB3DQogIGNv
bnRleHQgc3dpdGNoZXMNCiAgLkl0IENtICsNCiAgdHJhY2UgdGhlIGRlZmF1bHQgc2V0IG9mIHRy
YWNlIHBvaW50cyAtDQohIC5DbSBjICwgbiAsIGkgLCBrICwgcyAsIHQgLCB1DQogIC5FbA0KICAu
SXQgQXIgY29tbWFuZA0KICBFeGVjdXRlDQoqKiogLi91c3IuYmluL2t0cmFjZS9zdWJyLmMub3Jp
ZwlTYXQgTm92IDI3IDE3OjUxOjM4IDIwMDQNCi0tLSAuL3Vzci5iaW4va3RyYWNlL3N1YnIuYwlT
YXQgT2N0IDIwIDIwOjEzOjU5IDIwMDcNCioqKioqKioqKioqKioqKg0KKioqIDcxLDc5ICoqKioN
Ci0tLSA3MSw4NSAtLS0tDQogIAkJY2FzZSAnaSc6DQogIAkJCWZhY3MgfD0gS1RSRkFDX0dFTklP
Ow0KICAJCQlicmVhazsNCisgCQljYXNlICdrJzoNCisgCQkJZmFjcyB8PSBLVFJGQUNfU09DS0FE
RFI7DQorIAkJCWJyZWFrOw0KICAJCWNhc2UgJ3MnOg0KICAJCQlmYWNzIHw9IEtUUkZBQ19QU0lH
Ow0KICAJCQlicmVhazsNCisgCQljYXNlICd0JzoNCisgCQkJZmFjcyB8PSBLVFJGQUNfU1RBVDsN
CisgCQkJYnJlYWs7DQogIAkJY2FzZSAndSc6DQogIAkJCWZhY3MgfD0gS1RSRkFDX1VTRVI7DQog
IAkJCWJyZWFrOw0K

--=-eLqfxyP7z2mElmnuJkS0--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1193100923.3538.71.camel>