Subject: RFC: progressbars for fsck_ffs
To: None <tech-userlevel@netbsd.org>
From: Chris Gilbert <chris@netbsd.org>
List: tech-userlevel
Date: 11/17/2002 23:07:58
This is a multi-part message in MIME format.

--Multipart_Sun__17_Nov_2002_23:07:58_+0000_08171600
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hi,

Having had to fsck a few large disks recently I thought it'd be handy to
see progress.  So in a few spare minutes I decided to take the progress
bar code from ftp and add it into fsck_ffs.  Attached is the patch for
this.

Note I'm considering checking this in as the default.  Yes it makes us
look linuxy, but I like the idea I know something was happening rather
than nothing being displayed for extended periods.

Note you may get some fun effects if you are fscking multiple disks at
the same time, I'd be grateful for feedback on how good/bad that looks.

Chris
--Multipart_Sun__17_Nov_2002_23:07:58_+0000_08171600
Content-Type: application/octet-stream;
 name="fsck_ffs.progressbars.patch"
Content-Disposition: attachment;
 filename="fsck_ffs.progressbars.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGZzY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9iYXNlc3JjL3NiaW4v
ZnNja19mZnMvZnNjay5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIx
LjI5IGZzY2suaAotLS0gZnNjay5oCTIwMDIvMDkvMjggMjA6MTE6MDYJMS4yOQorKysgZnNjay5o
CTIwMDIvMTEvMTcgMjI6NTE6NDIKQEAgLTI3Niw0ICsyNzYsNyBAQCBzdGF0aWMgX19pbmxpbmUg
dV9pbnQ2NF90IGlzd2FwNjQoeCkKIAllbHNlIHJldHVybiB4OwogfQogCi0KKy8qIHByb2dyZXNz
YmFyIHVwZGF0ZXMgKi8KK2ludCBwcm9ncmVzczsKK3ZvaWQgc2V0dHR5d2lkdGgoaW50IGEpOwor
dm9pZCBwcm9ncmVzc2Jhcihjb25zdCBjaGFyICpkZXYsIGNvbnN0IGNoYXIgKnBoYXNlLCBsb25n
IGhvd21hbnksIGxvbmcgdG90YWwsIGludCBsYXN0KTsKSW5kZXg6IGZzY2tfZmZzLjgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmFzZXNyYy9zYmluL2ZzY2tfZmZzL2ZzY2tfZmZzLjgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEgZnNja19mZnMuOAot
LS0gZnNja19mZnMuOAkyMDAyLzEwLzAxIDEzOjQwOjMxCTEuMzEKKysrIGZzY2tfZmZzLjgJMjAw
Mi8xMS8xNyAyMjo1MTo0MgpAQCAtMjM0LDYgKzIzNCw4IEBAIHdoaWNoIGlzIGFzc3VtZWQgdG8g
YmUgYWZmaXJtYXRpdmU7CiBkbyBub3Qgb3BlbiB0aGUgZmlsZSBzeXN0ZW0gZm9yIHdyaXRpbmcu
CiAuSXQgRmwgcAogU3BlY2lmeSBgYHByZWVuJycgbW9kZSwgZGVzY3JpYmVkIGFib3ZlLgorLkl0
IEZsIFAKK0Rpc2FibGUgdGhlIGRpc3BsYXlpbmcgb2YgcHJvZ3Jlc3MgYmFycy4KIC5JdCBGbCB5
CiBBc3N1bWUgYSB5ZXMgcmVzcG9uc2UgdG8gYWxsIHF1ZXN0aW9ucyBhc2tlZCBieQogLk5tICIi
IDsKSW5kZXg6IG1haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9iYXNlc3JjL3Ni
aW4vZnNja19mZnMvbWFpbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAg
LXIxLjQyIG1haW4uYwotLS0gbWFpbi5jCTIwMDIvMDkvMjggMjA6MTE6MDYJMS40MgorKysgbWFp
bi5jCTIwMDIvMTEvMTcgMjI6NTE6NDIKQEAgLTk4LDcgKzk4LDcgQEAgbWFpbihhcmdjLCBhcmd2
KQogCWZvcmNlaW1hZ2UgPSAwOwogCWVuZGlhbiA9IDA7CiAJaXNhcHBsZXVmcyA9IDA7Ci0Jd2hp
bGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYUI6YjpjOmRGZm06bnB5IikpICE9IC0xKSB7
CisJd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYUI6YjpjOmRGZm06bnBQeSIpKSAh
PSAtMSkgewogCQlzd2l0Y2ggKGNoKSB7CiAJCWNhc2UgJ2EnOgogCQkJaXNhcHBsZXVmcyA9IDE7
CkBAIC0xNTEsNiArMTUxLDEwIEBAIG1haW4oYXJnYywgYXJndikKIAkJCXByZWVuKys7CiAJCQli
cmVhazsKIAorCQljYXNlICdQJzoKKwkJCXByb2dyZXNzID0gMDsKKwkJCWJyZWFrOworCQkJCiAJ
CWNhc2UgJ3knOgogCQkJeWZsYWcrKzsKIAkJCW5mbGFnID0gMDsKQEAgLTE3MSw2ICsxNzUsMTIg
QEAgbWFpbihhcmdjLCBhcmd2KQogCQkodm9pZClzaWduYWwoU0lHSU5ULCBjYXRjaCk7CiAJaWYg
KHByZWVuKQogCQkodm9pZClzaWduYWwoU0lHUVVJVCwgY2F0Y2hxdWl0KTsKKwlpZiAocHJvZ3Jl
c3MpCisJeworCQlzZXR0dHl3aWR0aCgwKTsKKwkgICAgCSh2b2lkKXNpZ25hbChTSUdXSU5DSCwg
c2V0dHR5d2lkdGgpOworCX0KKwkJICAgIAogCXNpZ25hbChTSUdJTkZPLCBpbmZvaGFuZGxlcik7
CiAKIAl3aGlsZSAoYXJnYy0tID4gMCkKQEAgLTI0NCw2ICsyNTQsOCBAQCBjaGVja2ZpbGVzeXMo
ZmlsZXN5cywgbW50cHQsIGF1eGRhdGEsIGNoCiAJfQogCXBhc3MxKCk7CiAKKwlpZiAocHJvZ3Jl
c3MpCisJICAgIHByb2dyZXNzYmFyKGNkZXZuYW1lKCksICIxIiwgMTAsMTAsIDEpOwogCS8qCiAJ
ICogMWI6IGxvY2F0ZSBmaXJzdCByZWZlcmVuY2VzIHRvIGR1cGxpY2F0ZXMsIGlmIGFueQogCSAq
LwpAQCAtMjU0LDYgKzI2Niw4IEBAIGNoZWNrZmlsZXN5cyhmaWxlc3lzLCBtbnRwdCwgYXV4ZGF0
YSwgY2gKIAkJCXBmYXRhbCgiSU5URVJOQUwgRVJST1I6IGR1cHMgd2l0aCBzb2Z0ZGVwXG4iKTsK
IAkJcHJpbnRmKCIqKiBQaGFzZSAxYiAtIFJlc2NhbiBGb3IgTW9yZSBEVVBTXG4iKTsKIAkJcGFz
czFiKCk7CisJCWlmIChwcm9ncmVzcykKKwkJICAgIHByb2dyZXNzYmFyKGNkZXZuYW1lKCksICIx
YiIsIDEwLDEwLCAxKTsKIAl9CiAKIAkvKgpAQCAtMjYyLDYgKzI3Niw4IEBAIGNoZWNrZmlsZXN5
cyhmaWxlc3lzLCBtbnRwdCwgYXV4ZGF0YSwgY2gKIAlpZiAocHJlZW4gPT0gMCkKIAkJcHJpbnRm
KCIqKiBQaGFzZSAyIC0gQ2hlY2sgUGF0aG5hbWVzXG4iKTsKIAlwYXNzMigpOworCWlmIChwcm9n
cmVzcykKKwkJICAgIHByb2dyZXNzYmFyKGNkZXZuYW1lKCksICIyIiwgMTAsMTAsIDEpOwogCiAJ
LyoKIAkgKiAzOiBzY2FuIGlub2RlcyBsb29raW5nIGZvciBkaXNjb25uZWN0ZWQgZGlyZWN0b3Jp
ZXMKQEAgLTI2OSw2ICsyODUsOCBAQCBjaGVja2ZpbGVzeXMoZmlsZXN5cywgbW50cHQsIGF1eGRh
dGEsIGNoCiAJaWYgKHByZWVuID09IDApCiAJCXByaW50ZigiKiogUGhhc2UgMyAtIENoZWNrIENv
bm5lY3Rpdml0eVxuIik7CiAJcGFzczMoKTsKKwlpZiAocHJvZ3Jlc3MpCisJCSAgICBwcm9ncmVz
c2JhcihjZGV2bmFtZSgpLCAiMyIsIDEwLDEwLCAxKTsKIAogCS8qCiAJICogNDogc2NhbiBpbm9k
ZXMgbG9va2luZyBmb3IgZGlzY29ubmVjdGVkIGZpbGVzOyBjaGVjayByZWZlcmVuY2UgY291bnRz
CkBAIC0yNzYsNiArMjk0LDggQEAgY2hlY2tmaWxlc3lzKGZpbGVzeXMsIG1udHB0LCBhdXhkYXRh
LCBjaAogCWlmIChwcmVlbiA9PSAwKQogCQlwcmludGYoIioqIFBoYXNlIDQgLSBDaGVjayBSZWZl
cmVuY2UgQ291bnRzXG4iKTsKIAlwYXNzNCgpOworCWlmIChwcm9ncmVzcykKKwkJICAgIHByb2dy
ZXNzYmFyKGNkZXZuYW1lKCksICI0IiwgMTAsMTAsIDEpOwogCiAJLyoKIAkgKiA1OiBjaGVjayBh
bmQgcmVwYWlyIHJlc291cmNlIGNvdW50cyBpbiBjeWxpbmRlciBncm91cHMKQEAgLTI4Myw2ICsz
MDMsOCBAQCBjaGVja2ZpbGVzeXMoZmlsZXN5cywgbW50cHQsIGF1eGRhdGEsIGNoCiAJaWYgKHBy
ZWVuID09IDApCiAJCXByaW50ZigiKiogUGhhc2UgNSAtIENoZWNrIEN5bCBncm91cHNcbiIpOwog
CXBhc3M1KCk7CisJaWYgKHByb2dyZXNzKQorCQkgICAgcHJvZ3Jlc3NiYXIoY2Rldm5hbWUoKSwg
IjUiLCAxMCwxMCwgMSk7CiAKIAkvKgogCSAqIHByaW50IG91dCBzdW1tYXJ5IHN0YXRpc3RpY3MK
SW5kZXg6IHBhc3MxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmFzZXNyYy9zYmlu
L2ZzY2tfZmZzL3Bhc3MxLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlmZiAtdSAtcCAt
cjEuMjUgcGFzczEuYwotLS0gcGFzczEuYwkyMDAyLzA5LzI4IDIwOjExOjA2CTEuMjUKKysrIHBh
c3MxLmMJMjAwMi8xMS8xNyAyMjo1MTo0MwpAQCAtMTAyLDYgKzEwMiw3IEBAIHBhc3MxKCkKIAkJ
CSAgICBjICogMTAwIC8gc2Jsb2NrLT5mc19uY2cpOwogCQkJZ290X3NpZ2luZm8gPSAwOwogCQl9
CisJCXByb2dyZXNzYmFyKGNkZXZuYW1lKCksICIxIiwgYywgc2Jsb2NrLT5mc19uY2csIDApOwog
CQlmb3IgKGkgPSAwOyBpIDwgc2Jsb2NrLT5mc19pcGc7IGkrKywgaW51bWJlcisrKSB7CiAJCQlp
ZiAoaW51bWJlciA8IFJPT1RJTk8pCiAJCQkJY29udGludWU7CkluZGV4OiBwYXNzMWIuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9iYXNlc3JjL3NiaW4vZnNja19mZnMvcGFzczFiLmMs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQgcGFzczFiLmMKLS0t
IHBhc3MxYi5jCTIwMDIvMDUvMDYgMDM6MTc6NDMJMS4xNAorKysgcGFzczFiLmMJMjAwMi8xMS8x
NyAyMjo1MTo0MwpAQCAtNzgsNiArNzgsNyBAQCBwYXNzMWIoKQogCQkJICAgIGMgKiAxMDAgLyBz
YmxvY2stPmZzX25jZyk7CiAJCQlnb3Rfc2lnaW5mbyA9IDA7CiAJCX0KKwkJcHJvZ3Jlc3NiYXIo
Y2Rldm5hbWUoKSwgIjFiIiwgYywgc2Jsb2NrLT5mc19uY2csIDApOwogCQlmb3IgKGkgPSAwOyBp
IDwgc2Jsb2NrLT5mc19pcGc7IGkrKywgaW51bWJlcisrKSB7CiAJCQlpZiAoaW51bWJlciA8IFJP
T1RJTk8pCiAJCQkJY29udGludWU7CkluZGV4OiBwYXNzMi5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnNyb290L2Jhc2VzcmMvc2Jpbi9mc2NrX2Zmcy9wYXNzMi5jLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMyCmRpZmYgLXUgLXAgLXIxLjMyIHBhc3MyLmMKLS0tIHBhc3MyLmMJMjAwMi8wOS8y
OCAyMDoxMTowNgkxLjMyCisrKyBwYXNzMi5jCTIwMDIvMTEvMTcgMjI6NTE6NDQKQEAgLTE0OSw2
ICsxNDksNyBAQCBwYXNzMigpCiAJCQkgICAgKGludCkoKGlucHAgLSBpbnBzb3J0KSAqIDEwMCAv
IGlucGxhc3QpKTsKIAkJCWdvdF9zaWdpbmZvID0gMDsKIAkJfQorCQlwcm9ncmVzc2JhcihjZGV2
bmFtZSgpLCAiMiIsIChpbnBwIC0gaW5wc29ydCksIGlucGxhc3QsIDApOwogCQlpbnAgPSAqaW5w
cDsKIAkJaWYgKGlucC0+aV9pc2l6ZSA9PSAwKQogCQkJY29udGludWU7CkluZGV4OiBwYXNzMy5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L2Jhc2VzcmMvc2Jpbi9mc2NrX2Zmcy9wYXNz
My5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXUgLXAgLXIxLjEzIHBhc3MzLmMK
LS0tIHBhc3MzLmMJMjAwMi8wNS8wNiAwMzoxNzo0MwkxLjEzCisrKyBwYXNzMy5jCTIwMDIvMTEv
MTcgMjI6NTE6NDQKQEAgLTYwLDE0ICs2MCwxNSBAQCBwYXNzMygpCiAJaW50IGxvb3BjbnQ7CiAK
IAlmb3IgKGlucHAgPSAmaW5wc29ydFtpbnBsYXN0IC0gMV07IGlucHAgPj0gaW5wc29ydDsgaW5w
cC0tKSB7CisJICAgIAlpbnQgaW5waW5kZXggPSBpbnBwIC0gaW5wc29ydDsKIAkJaWYgKGdvdF9z
aWdpbmZvKSB7Ci0JCQlpbnQgaW5waW5kZXggPSBpbnBwIC0gaW5wc29ydDsKIAkJCWZwcmludGYo
c3RkZXJyLAogCQkJICAgICIlczogcGhhc2UgMzogZGlyICVkIG9mICVkICglZCUlKVxuIiwgY2Rl
dm5hbWUoKSwKIAkJCSAgICAoaW50KShpbnBsYXN0IC0gaW5waW5kZXggLSAxKSwgKGludClpbnBs
YXN0LAogCQkJICAgIChpbnQpKChpbnBsYXN0IC0gaW5waW5kZXggLSAxKSAqIDEwMCAvIGlucGxh
c3QpKTsKIAkJCWdvdF9zaWdpbmZvID0gMDsKIAkJfQorCQlwcm9ncmVzc2JhcihjZGV2bmFtZSgp
LCAiMyIsIChpbnBsYXN0IC0gaW5waW5kZXggLSAxKSwgaW5wbGFzdCwgMCk7CiAJCWlucCA9ICpp
bnBwOwogCQlpZiAoaW5wLT5pX251bWJlciA9PSBST09USU5PIHx8CiAJCSAgICAhKGlucC0+aV9w
YXJlbnQgPT0gMCB8fCBzdGF0ZW1hcFtpbnAtPmlfbnVtYmVyXSA9PSBEU1RBVEUpKQpJbmRleDog
cGFzczQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9iYXNlc3JjL3NiaW4vZnNja19m
ZnMvcGFzczQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1wIC1yMS4xNSBw
YXNzNC5jCi0tLSBwYXNzNC5jCTIwMDIvMDUvMDYgMDM6MTc6NDMJMS4xNQorKysgcGFzczQuYwky
MDAyLzExLzE3IDIyOjUxOjQ0CkBAIC03Niw2ICs3Niw3IEBAIHBhc3M0KCkKIAkJCSAgICBpbnVt
YmVyICogMTAwIC8gbGFzdGlubyk7CiAJCQlnb3Rfc2lnaW5mbyA9IDA7CiAJCX0KKwkJcHJvZ3Jl
c3NiYXIoY2Rldm5hbWUoKSwgIjQiLCBpbnVtYmVyLCBsYXN0aW5vLCAwKTsKIAkJaWRlc2MuaWRf
bnVtYmVyID0gaW51bWJlcjsKIAkJc3dpdGNoIChzdGF0ZW1hcFtpbnVtYmVyXSkgewogCkluZGV4
OiBwYXNzNS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L2Jhc2VzcmMvc2Jpbi9mc2Nr
X2Zmcy9wYXNzNS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMx
IHBhc3M1LmMKLS0tIHBhc3M1LmMJMjAwMi8wOS8yOCAyMDoxMTowNgkxLjMxCisrKyBwYXNzNS5j
CTIwMDIvMTEvMTcgMjI6NTE6NDQKQEAgLTIwNCw2ICsyMDQsNyBAQCBwYXNzNSgpCiAJCQkgICAg
YyAqIDEwMCAvIGZzLT5mc19uY2cpOwogCQkJZ290X3NpZ2luZm8gPSAwOwogCQl9CisJCXByb2dy
ZXNzYmFyKGNkZXZuYW1lKCksICI1IiwgYywgZnMtPmZzX25jZywgMCk7CiAJCWdldGJsaygmY2di
bGssIGNndG9kKGZzLCBjKSwgZnMtPmZzX2Nnc2l6ZSk7CiAJCW1lbWNweShjZywgY2dibGsuYl91
bi5iX2NnLCBmcy0+ZnNfY2dzaXplKTsKIAkJaWYoKGRvc3dhcCAmJiAhbmVlZHN3YXApIHx8ICgh
ZG9zd2FwICYmIG5lZWRzd2FwKSkKSW5kZXg6IHV0aWxpdGllcy5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnNyb290L2Jhc2VzcmMvc2Jpbi9mc2NrX2Zmcy91dGlsaXRpZXMuYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCB1dGlsaXRpZXMuYwotLS0gdXRpbGl0
aWVzLmMJMjAwMi8wOS8yOCAyMDoxMTowNgkxLjM0CisrKyB1dGlsaXRpZXMuYwkyMDAyLzExLzE3
IDIyOjUxOjQ1CkBAIC00NCw2ICs0NCw4IEBAIF9fUkNTSUQoIiROZXRCU0Q6IHV0aWxpdGllcy5j
LHYgMS4zNCAyMDAKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjaW5jbHVkZSA8c3lzL3R0eS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogCiAjaW5j
bHVkZSA8dWZzL3Vmcy9kaW5vZGUuaD4KICNpbmNsdWRlIDx1ZnMvdWZzL2Rpci5oPgpAQCAtNTcs
NiArNTksNyBAQCBfX1JDU0lEKCIkTmV0QlNEOiB1dGlsaXRpZXMuYyx2IDEuMzQgMjAwCiAjaW5j
bHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KIAogI2luY2x1ZGUgImZzdXRpbC5oIgogI2luY2x1ZGUgImZz
Y2suaCIKQEAgLTY5NiwzICs2OTksNzMgQEAgaW5mb2hhbmRsZXIoaW50IHNpZykKIAlnb3Rfc2ln
aW5mbyA9IDE7CiB9CiAKK2ludCB0dHl3aWR0aCA9IDgwOworaW50IHByb2dyZXNzID0gMTsKKwor
I2RlZmluZQlCVUZMRUZUCShzaXplb2YoYnVmKSAtIGxlbikKKwordm9pZAorcHJvZ3Jlc3NiYXIo
Y29uc3QgY2hhciAqZGV2LCBjb25zdCBjaGFyICpwaGFzZSwgbG9uZyBjdXJyZW50LCBsb25nIHRv
dGFsLAorCWludCBsYXN0KQoreworCXN0YXRpYyBpbnQgbGFzdHBlcmNlbnRhZ2UgPSAtMTsKKyAg
ICBjaGFyIGJ1ZlsyNTZdOworICAgIGludCBsZW4sIHBlcmNlbnRhZ2U7CisgICAgaW50IGJhcmxl
bmd0aDsKKyAgICBpbnQgaTsKKyAgICBpbnQgbGVuZ3RoZXh0cmFzOworI2RlZmluZQlCQVJPVkVS
SEVBRAkxNgkJLyogbm9uIGAqJyBwb3J0aW9uIG9mIHByb2dyZXNzIGJhciAqLworCQkJCQkvKgor
CQkJCQkgKiBzdGFycyBzaG91bGQgY29udGFpbiBhdCBsZWFzdAorCQkJCQkgKiBzaXplb2YoYnVm
KSAtIEJBUk9WRVJIRUFEIGVudHJpZXMKKwkJCQkJICovCisgICAgc3RhdGljIGNvbnN0IGNoYXIJ
c3RhcnNbXSA9CisiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisiKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioi
CisiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioiOworCisgICAgaWYgKCFwcm9ncmVzcykKKwlyZXR1cm47
CisgICAgCisgICAgbGVuID0gMDsKKyAgICBsZW5ndGhleHRyYXMgPSBzdHJsZW4oZGV2KSArIHN0
cmxlbihwaGFzZSk7CisgICAgcGVyY2VudGFnZSA9IChjdXJyZW50ICogMTAwKSAvIHRvdGFsOwor
ICAgIHBlcmNlbnRhZ2UgPSBNQVgocGVyY2VudGFnZSwgMCk7CisgICAgcGVyY2VudGFnZSA9IE1J
TihwZXJjZW50YWdlLCAxMDApOworCisgICAgaWYgKChwZXJjZW50YWdlID09IGxhc3RwZXJjZW50
YWdlKSAmJiAobGFzdCA9PSAwKSkKKwkgICAgcmV0dXJuOworICAgIGxhc3RwZXJjZW50YWdlID0g
cGVyY2VudGFnZTsKKyAgICAKKyAgICBsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBCVUZMRUZU
LCAiJXM6IHBoYXNlICVzICIsIGRldiwgcGhhc2UpOworCisgICAgYmFybGVuZ3RoID0gTUlOKHNp
emVvZihidWYpIC0gMSwgdHR5d2lkdGgpIC0gMTYgLSBsZW5ndGhleHRyYXM7CisgICAgaWYgKGJh
cmxlbmd0aCA+IDApIHsKKwlpID0gYmFybGVuZ3RoICogcGVyY2VudGFnZSAvIDEwMDsKKwlsZW4g
Kz0gc25wcmludGYoYnVmICsgbGVuLCBCVUZMRUZULAorCQkifCUuKnMlKnN8ICIsIGksIHN0YXJz
LCBiYXJsZW5ndGggLSBpLCAiIik7CisgICAgfQorICAgIGxlbiArPSBzbnByaW50ZihidWYgKyBs
ZW4sIEJVRkxFRlQsICIlM2QlJSIsIHBlcmNlbnRhZ2UpOworICAgIGlmIChsYXN0KQorCWxlbiAr
PSBzbnByaW50ZihidWYgKyBsZW4sIEJVRkxFRlQsICJcbiIsIHBlcmNlbnRhZ2UpOworICAgIGVs
c2UKKwkgICAgbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgQlVGTEVGVCwgIlxyIiwgcGVyY2Vu
dGFnZSk7CisgICAgd3JpdGUoZmlsZW5vKHN0ZG91dCksIGJ1ZiwgbGVuKTsKK30KKworLyoKKyAq
IFVwZGF0ZSB0aGUgZ2xvYmFsIHR0eXdpZHRoIHZhbHVlLCB1c2luZyBUSU9DR1dJTlNaLgorICov
Cit2b2lkCitzZXR0dHl3aWR0aChpbnQgYSkKK3sKKwlzdHJ1Y3Qgd2luc2l6ZSB3aW5zaXplOwor
CWludCBvZXJybm8gPSBlcnJubzsKKworCWlmIChpb2N0bChmaWxlbm8oc3Rkb3V0KSwgVElPQ0dX
SU5TWiwgJndpbnNpemUpICE9IC0xICYmCisJICAgIHdpbnNpemUud3NfY29sICE9IDApCisJCXR0
eXdpZHRoID0gd2luc2l6ZS53c19jb2w7CisJZWxzZQorCQl0dHl3aWR0aCA9IDgwOworCWVycm5v
ID0gb2Vycm5vOworfQo=

--Multipart_Sun__17_Nov_2002_23:07:58_+0000_08171600--