Subject: Re: bin/34630: GNU sdiff(1) replacement
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, unex@linija.org>
From: Mindaugas <unex@linija.org>
List: netbsd-bugs
Date: 09/26/2006 19:35:04
The following reply was made to PR bin/34630; it has been noted by GNATS.

From: Mindaugas <unex@linija.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: bin/34630: GNU sdiff(1) replacement
Date: Tue, 26 Sep 2006 22:32:49 +0300

 This is a multi-part message in MIME format.
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: text/plain; charset=US-ASCII
 Content-Transfer-Encoding: 7bit
 
 strtonum.c is added separate.
 It is not in our libc.
 
 -- 
 Best regards,
 Mindaugas
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="common.c"
 Content-Disposition: attachment;
  filename="common.c"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGNvbW1vbi5jLHYgMS40IDIwMDYvMDUvMjUgMDM6
 MjA6MzIgcmF5IEV4cCAkCSovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
 aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCiNpbmNsdWRlIDxlcnIuaD4KI2luY2x1ZGUg
 PHN0ZGxpYi5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5jbHVkZSAiY29tbW9uLmgiCgp2b2lk
 CmNsZWFudXAoY29uc3QgY2hhciAqZmlsZW5hbWUpCnsKCWlmICh1bmxpbmsoZmlsZW5hbWUpKQoJ
 CWVycigyLCAiY291bGQgbm90IGRlbGV0ZTogJXMiLCBmaWxlbmFtZSk7CglleGl0KDIpOwp9Cg==
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="common.h"
 Content-Disposition: attachment;
  filename="common.h"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGNvbW1vbi5oLHYgMS4yIDIwMDYvMDUvMjUgMDM6
 MjA6MzIgcmF5IEV4cCAkCSovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
 aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCl9fZGVhZCB2b2lkIGNsZWFudXAoY29uc3Qg
 Y2hhciAqKTsKCmxvbmcgbG9uZwpzdHJ0b251bShjb25zdCBjaGFyICpudW1zdHIsIGxvbmcgbG9u
 ZyBtaW52YWwsIGxvbmcgbG9uZyBtYXh2YWwsCgljb25zdCBjaGFyICoqZXJyc3RycCk7Cg==
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="edit.c"
 Content-Disposition: attachment;
  filename="edit.c"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGVkaXQuYyx2IDEuMTQgMjAwNi8wNS8yNSAwMzoy
 MDozMiByYXkgRXhwICQgKi8KCi8qCiAqIFdyaXR0ZW4gYnkgUmF5bW9uZCBMYWkgPHJheUBjeXRo
 Lm5ldD4uCiAqIFB1YmxpYyBkb21haW4uCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5j
 bHVkZSA8c3lzL3dhaXQuaD4KCiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8ZXJyLmg+CiNp
 bmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K
 I2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2luY2x1ZGUgImNvbW1vbi5oIgojaW5jbHVkZSAiZXh0ZXJu
 LmgiCgpzdGF0aWMgdm9pZCBlZGl0KGNvbnN0IGNoYXIgKik7CgovKgogKiBUYWtlcyB0aGUgbmFt
 ZSBvZiBhIGZpbGUgYW5kIG9wZW5zIGl0IHdpdGggYW4gZWRpdG9yLgogKi8Kc3RhdGljIHZvaWQK
 ZWRpdChjb25zdCBjaGFyICpmaWxlbmFtZSkKewoJaW50IHN0YXR1czsKCXBpZF90IHBpZDsKCWNv
 bnN0IGNoYXIgKmVkaXRvcjsKCgllZGl0b3IgPSBnZXRlbnYoIlZJU1VBTCIpOwoJaWYgKGVkaXRv
 ciA9PSBOVUxMKQoJCWVkaXRvciA9IGdldGVudigiRURJVE9SIik7CglpZiAoZWRpdG9yID09IE5V
 TEwpCgkJZWRpdG9yID0gInZpIjsKCgkvKiBTdGFydCBlZGl0b3Igb24gdGVtcG9yYXJ5IGZpbGUu
 ICovCglzd2l0Y2ggKHBpZCA9IGZvcmsoKSkgewoJY2FzZSAwOgoJCS8qIGNoaWxkICovCgkJZXhl
 Y2xwKGVkaXRvciwgZWRpdG9yLCBmaWxlbmFtZSwgKHZvaWQgKilOVUxMKTsKCQl3YXJuKCJjb3Vs
 ZCBub3QgZXhlY3V0ZSBlZGl0b3I6ICVzIiwgZWRpdG9yKTsKCQljbGVhbnVwKGZpbGVuYW1lKTsK
 CWNhc2UgLTE6CgkJd2FybigiY291bGQgbm90IGZvcmsiKTsKCQljbGVhbnVwKGZpbGVuYW1lKTsK
 CX0KCgkvKiBwYXJlbnQgKi8KCS8qIFdhaXQgZm9yIGVkaXRvciB0byBleGl0LiAqLwoJaWYgKHdh
 aXRwaWQocGlkLCAmc3RhdHVzLCAwKSA9PSAtMSkgewoJCXdhcm4oIndhaXRwaWQiKTsKCQljbGVh
 bnVwKGZpbGVuYW1lKTsKCX0KCgkvKiBDaGVjayB0aGF0IGVkaXRvciB0ZXJtaW5hdGVkIG5vcm1h
 bGx5LiAqLwoJaWYgKCFXSUZFWElURUQoc3RhdHVzKSkgewoJCXdhcm4oIiVzIHRlcm1pbmF0ZWQg
 YWJub3JtYWxseSIsIGVkaXRvcik7CgkJY2xlYW51cChmaWxlbmFtZSk7Cgl9Cn0KCi8qCiAqIFBh
 cnNlIGVkaXQgY29tbWFuZC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KICov
 CmludAplcGFyc2UoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpsZWZ0LCBjb25zdCBjaGFy
 ICpyaWdodCkKewoJRklMRSAqZmlsZTsKCXNpemVfdCBucmVhZCwgbndyaXR0ZW47CglpbnQgZmQ7
 CgljaGFyICpmaWxlbmFtZTsKCWNoYXIgYnVmW0JVRlNJWl0sICp0ZXh0OwoKCS8qIFNraXAgd2hp
 dGVzcGFjZS4gKi8KCXdoaWxlIChpc3NwYWNlKChpbnQpKCpjbWQpKSkKCQkrK2NtZDsKCgl0ZXh0
 ID0gTlVMTDsKCXN3aXRjaCAoKmNtZCkgewoJY2FzZSAnXDAnOgoJCS8qIEVkaXQgZW1wdHkgZmls
 ZS4gKi8KCQlicmVhazsKCgljYXNlICdiJzoKCQkvKiBCb3RoIHN0cmluZ3MuICovCgkJaWYgKGxl
 ZnQgPT0gTlVMTCkKCQkJZ290byBSSUdIVDsKCQlpZiAocmlnaHQgPT0gTlVMTCkKCQkJZ290byBM
 RUZUOwoKCQkvKiBOZWl0aGVyIGNvbHVtbiBpcyBibGFuaywgc28gcHJpbnQgYm90aC4gKi8KCQlp
 ZiAoYXNwcmludGYoJnRleHQsICIlc1xuJXNcbiIsIGxlZnQsIHJpZ2h0KSA9PSAtMSkKCQkJZXJy
 KDIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5Iik7CgkJYnJlYWs7CgoJY2FzZSAnbCc6CkxF
 RlQ6CgkJLyogU2tpcCBpZiB0aGVyZSBpcyBubyBsZWZ0IGNvbHVtbi4gKi8KCQlpZiAobGVmdCA9
 PSBOVUxMKQoJCQlicmVhazsKCgkJaWYgKGFzcHJpbnRmKCZ0ZXh0LCAiJXNcbiIsIGxlZnQpID09
 IC0xKQoJCQllcnIoMiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiKTsKCgkJYnJlYWs7CgoJ
 Y2FzZSAncic6ClJJR0hUOgoJCS8qIFNraXAgaWYgdGhlcmUgaXMgbm8gcmlnaHQgY29sdW1uLiAq
 LwoJCWlmIChyaWdodCA9PSBOVUxMKQoJCQlicmVhazsKCgkJaWYgKGFzcHJpbnRmKCZ0ZXh0LCAi
 JXNcbiIsIHJpZ2h0KSA9PSAtMSkKCQkJZXJyKDIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5
 Iik7CgoJCWJyZWFrOwoKCWRlZmF1bHQ6CgkJcmV0dXJuICgtMSk7Cgl9CgoJLyogQ3JlYXRlIHRl
 bXAgZmlsZS4gKi8KCWlmIChhc3ByaW50ZigmZmlsZW5hbWUsICIlcy9zZGlmZi5YWFhYWFhYWFhY
 IiwgdG1wZGlyKSA9PSAtMSkKCQllcnIoMiwgImFzcHJpbnRmIik7CglpZiAoKGZkID0gbWtzdGVt
 cChmaWxlbmFtZSkpID09IC0xKQoJCWVycigyLCAibWtzdGVtcCIpOwoJaWYgKHRleHQgIT0gTlVM
 TCkgewoJCXNpemVfdCBsZW47CgoJCWxlbiA9IHN0cmxlbih0ZXh0KTsKCQlpZiAoKG53cml0dGVu
 ID0gd3JpdGUoZmQsIHRleHQsIGxlbikpID09IC0xIHx8CgkJICAgIG53cml0dGVuICE9IGxlbikg
 ewoJCQl3YXJuKCJlcnJvciB3cml0aW5nIHRvIHRlbXAgZmlsZSIpOwoJCQljbGVhbnVwKGZpbGVu
 YW1lKTsKCQl9Cgl9CgljbG9zZShmZCk7CgoJLyogdGV4dCBpcyBubyBsb25nZXIgdXNlZC4gKi8K
 CWZyZWUodGV4dCk7CgoJLyogRWRpdCB0ZW1wIGZpbGUuICovCgllZGl0KGZpbGVuYW1lKTsKCgkv
 KiBPcGVuIHRlbXBvcmFyeSBmaWxlLiAqLwoJaWYgKCEoZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAi
 ciIpKSkgewoJCXdhcm4oImNvdWxkIG5vdCBvcGVuIGVkaXRlZCBmaWxlOiAlcyIsIGZpbGVuYW1l
 KTsKCQljbGVhbnVwKGZpbGVuYW1lKTsKCX0KCgkvKiBDb3B5IHRlbXBvcmFyeSBmaWxlIGNvbnRl
 bnRzIHRvIG91dHB1dCBmaWxlLiAqLwoJZm9yIChucmVhZCA9IHNpemVvZihidWYpOyBucmVhZCA9
 PSBzaXplb2YoYnVmKTspIHsKCQlucmVhZCA9IGZyZWFkKGJ1Ziwgc2l6ZW9mKCpidWYpLCBzaXpl
 b2YoYnVmKSwgZmlsZSk7CgkJLyogVGVzdCBmb3IgZXJyb3Igb3IgZW5kIG9mIGZpbGUuICovCgkJ
 aWYgKG5yZWFkICE9IHNpemVvZihidWYpICYmCgkJICAgIChmZXJyb3IoZmlsZSkgfHwgIWZlb2Yo
 ZmlsZSkpKSB7CgkJCXdhcm54KCJlcnJvciByZWFkaW5nIGVkaXRlZCBmaWxlOiAlcyIsIGZpbGVu
 YW1lKTsKCQkJY2xlYW51cChmaWxlbmFtZSk7CgkJfQoKCQkvKgoJCSAqIElmIHdlIGhhdmUgbm90
 aGluZyB0byByZWFkLCBicmVhayBvdXQgb2YgbG9vcAoJCSAqIGluc3RlYWQgb2Ygd3JpdGluZyBu
 b3RoaW5nLgoJCSAqLwoJCWlmICghbnJlYWQpCgkJCWJyZWFrOwoKCQkvKiBXcml0ZSBkYXRhIHdl
 IGp1c3QgcmVhZC4gKi8KCQlud3JpdHRlbiA9IGZ3cml0ZShidWYsIHNpemVvZigqYnVmKSwgbnJl
 YWQsIG91dGZpbGUpOwoJCWlmIChud3JpdHRlbiAhPSBucmVhZCkgewoJCQl3YXJueCgiZXJyb3Ig
 d3JpdGluZyB0byBvdXRwdXQgZmlsZSIpOwoJCQljbGVhbnVwKGZpbGVuYW1lKTsKCQl9Cgl9CgoJ
 LyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSwgc28gcmVtb3Zl
 IGl0LiAqLwoJaWYgKHVubGluayhmaWxlbmFtZSkpCgkJd2FybigiY291bGQgbm90IGRlbGV0ZTog
 JXMiLCBmaWxlbmFtZSk7CglmY2xvc2UoZmlsZSk7CgoJZnJlZShmaWxlbmFtZSk7CgoJcmV0dXJu
 ICgwKTsKfQo=
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="extern.h"
 Content-Disposition: attachment;
  filename="extern.h"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IGV4dGVybi5oLHYgMS40IDIwMDYvMDUvMjUgMDM6
 MjA6MzIgcmF5IEV4cCAkICovCgovKgogKiBXcml0dGVuIGJ5IFJheW1vbmQgTGFpIDxyYXlAY3l0
 aC5uZXQ+LgogKiBQdWJsaWMgZG9tYWluLgogKi8KCmV4dGVybiBGSUxFCQkqb3V0ZmlsZTsJLyog
 ZmlsZSB0byBzYXZlIGNoYW5nZXMgdG8gKi8KZXh0ZXJuIGNvbnN0IGNoYXIJKnRtcGRpcjsKCmlu
 dCBlcGFyc2UoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cg==
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="Makefile"
 Content-Disposition: attachment;
  filename="Makefile"
 Content-Transfer-Encoding: base64
 
 IwkkTmV0QlNEJAoKUFJPRz0Jc2RpZmYKU1JDUz0JY29tbW9uLmMgZWRpdC5jIHNkaWZmLmMgc3Ry
 dG9udW0uYwoKTERBREQrPQktbHV0aWwKRFBBREQrPQkke0xJQlVUSUx9CgpXQVJOUz0JMQoKLmlu
 Y2x1ZGUgPGJzZC5wcm9nLm1rPgo=
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="sdiff.1"
 Content-Disposition: attachment;
  filename="sdiff.1"
 Content-Transfer-Encoding: base64
 
 LlwiICROZXRCU0QkCi5cIgouXCIgV3JpdHRlbiBieSBSYXltb25kIExhaSA8cmF5QGN5dGgubmV0
 Pi4KLlwiIFB1YmxpYyBkb21haW4uCi5cIgouRGQgT2N0b2JlciAyOSwgMjAwNQouRHQgU0RJRkYg
 MQouT3MKLlNoIE5BTUUKLk5tIHNkaWZmCi5OZCBzaWRlLWJ5LXNpZGUgZGlmZgouU2ggU1lOT1BT
 SVMKLk5tCi5PcCBGbCBhYmRpbHN0VwouT3AgRmwgSSBBciByZWdleHAKLk9wIEZsIG8gQXIgb3V0
 ZmlsZQouT3AgRmwgdyBBciB3aWR0aAouQXIgZmlsZTEKLkFyIGZpbGUyCi5TaCBERVNDUklQVElP
 TgpTaG93cyBhIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIG9mIHR3byBmaWxlcy4KLlBwClRoZSBv
 cHRpb25zIGFyZToKLkJsIC10YWcgLXdpZHRoIERzCi5JdCBGbCBsCk9ubHkgcHJpbnQgdGhlIGxl
 ZnQgY29sdW1uIGZvciBpZGVudGljYWwgbGluZXMuCi5JdCBGbCBvIEFyIG91dGZpbGUKSW50ZXJh
 Y3RpdmVseSBtZXJnZQouQXIgZmlsZTEKYW5kCi5BciBmaWxlMgppbnRvCi5BciBvdXRmaWxlIC4K
 SW4gdGhpcyBtb2RlLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBmb3IgZWFjaCBzZXQgb2YgZGlmZmVy
 ZW5jZXMuClNlZQouRXYgRURJVE9SCmFuZAouRXYgVklTVUFMICwKYmVsb3csCmZvciBkZXRhaWxz
 IG9mIHdoaWNoIGVkaXRvciwgaWYgYW55LCBpcyBpbnZva2VkLgouUHAKVGhlIGNvbW1hbmRzIGFy
 ZSBhcyBmb2xsb3dzOgouQmwgLXRhZyAtd2lkdGggRHMKLkl0IENtIGwKQ2hvb3NlIGxlZnQgc2V0
 IG9mIGRpZmZzLgouSXQgQ20gcgpDaG9vc2UgcmlnaHQgc2V0IG9mIGRpZmZzLgouSXQgQ20gcwpT
 aWxlbnQgbW9kZSBcKGVuIGlkZW50aWNhbCBsaW5lcyBhcmUgbm90IHByaW50ZWQuCi5JdCBDbSB2
 ClZlcmJvc2UgbW9kZSBcKGVuIGlkZW50aWNhbCBsaW5lcyBhcmUgcHJpbnRlZC4KLkl0IENtIGUK
 U3RhcnQgZWRpdGluZyBhbiBlbXB0eSBmaWxlLCB3aGljaCB3aWxsIGJlIG1lcmdlZCBpbnRvCi5B
 ciBvdXRmaWxlCnVwb24gZXhpdGluZyB0aGUgZWRpdG9yLgouSXQgQ20gZSBDbSBsClN0YXJ0IGVk
 aXRpbmcgZmlsZSB3aXRoIGxlZnQgc2V0IG9mIGRpZmZzLgouSXQgQ20gZSBDbSByClN0YXJ0IGVk
 aXRpbmcgZmlsZSB3aXRoIHJpZ2h0IHNldCBvZiBkaWZmcy4KLkl0IENtIGUgQ20gYgpTdGFydCBl
 ZGl0aW5nIGZpbGUgd2l0aCBib3RoIHNldHMgb2YgZGlmZnMuCi5JdCBDbSBxClF1aXQKLk5tIC4K
 LkVsCi5JdCBGbCBzClNraXAgaWRlbnRpY2FsIGxpbmVzLgouSXQgRmwgdyBBciB3aWR0aApQcmlu
 dCBhIG1heGltdW0gb2YKLkFyIHdpZHRoCmNoYXJhY3RlcnMgb24gZWFjaCBsaW5lLgpUaGUgZGVm
 YXVsdCBpcyAxMzAgY2hhcmFjdGVycy4KLkVsCi5QcApPcHRpb25zIHBhc3NlZCB0bwouWHIgZGlm
 ZiAxCmFyZToKLkJsIC10YWcgLXdpZHRoIERzCi5JdCBGbCBhClRyZWF0Ci5BciBmaWxlMQphbmQK
 LkFyIGZpbGUyCmFzIHRleHQgZmlsZXMuCi5JdCBGbCBiCklnbm9yZSB0cmFpbGluZyBibGFuayBz
 cGFjZXMuCi5JdCBGbCBkCk1pbmltaXplIGRpZmYgc2l6ZS4KLkl0IEZsIEkgQXIgcmVnZXhwCkln
 bm9yZSBsaW5lIGNoYW5nZXMgbWF0Y2hpbmcKLkFyIHJlZ2V4cCAuCkFsbCBsaW5lcyBpbiB0aGUg
 Y2hhbmdlIG11c3QgbWF0Y2gKLkFyIHJlZ2V4cApmb3IgdGhlIGNoYW5nZSB0byBiZSBpZ25vcmVk
 LgouSXQgRmwgaQpEbyBhIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KLkl0IEZsIHQKRXhw
 YW5kIHRhYnMgdG8gc3BhY2VzLgouSXQgRmwgVwpJZ25vcmUgYWxsIHNwYWNlcwoodGhlCi5GbCB3
 CmZsYWcgaXMgcGFzc2VkIHRvCi5YciBkaWZmIDEgKSAuCi5FbAouU2ggRU5WSVJPTk1FTlQKLkJs
 IC10YWcgLXdpZHRoIERzCi5JdCBFdiBFRElUT1IgLCBWSVNVQUwKU3BlY2lmaWVzIGFuIGVkaXRv
 ciB0byB1c2Ugd2l0aCB0aGUKLkZsIG8Kb3B0aW9uLgpJZiBib3RoCi5FdiBFRElUT1IKYW5kCi5F
 diBWSVNVQUwKYXJlIHNldCwKLkV2IFZJU1VBTAp0YWtlcyBwcmVjZWRlbmNlLgpJZiBuZWl0aGVy
 Ci5FdiBFRElUT1IKbm9yCi5FdiBWSVNVQUwKYXJlIHNldCwKdGhlIGRlZmF1bHQgaXMKLlhyIHZp
 IDEgLgouSXQgRXYgVE1QRElSClNwZWNpZmllcyBhIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IGZp
 bGVzIHRvIGJlIGNyZWF0ZWQuClRoZSBkZWZhdWx0IGlzCi5QYSAvdG1wIC4KLkVsCi5TaCBTRUUg
 QUxTTwouWHIgZGlmZiAxICwKLlhyIGRpZmYzIDEgLAouWHIgdmkgMSAsCi5YciByZV9mb3JtYXQg
 NwouU2ggQVVUSE9SUwouTm0Kd2FzIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIGZvciB0aGUgcHVibGlj
 IGRvbWFpbiBieQouQW4gUmF5IExhaSBBcSByYXlAY3l0aC5uZXQgLgouU2ggQ0FWRUFUUwpBbHRo
 b3VnaCB1bmRvY3VtZW50ZWQsCi5ObQpzdXBwb3J0cyBhbGwgb3B0aW9ucyBzdXBwb3J0ZWQgYnkg
 R05VIHNkaWZmLgpTb21lIG9wdGlvbnMgcmVxdWlyZSBHTlUgZGlmZi4KLlBwClRhYnMgYXJlIHRy
 ZWF0ZWQgYXMgYW55d2hlcmUgZnJvbSBvbmUgdG8gZWlnaHQgY2hhcmFjdGVycyB3aWRlLApkZXBl
 bmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uLgpUZXJtaW5hbHMgdGhhdCB0cmVhdCB0YWJzIGFz
 IGVpZ2h0IGNoYXJhY3RlcnMgd2lkZSB3aWxsIGxvb2sgYmVzdC4KLlNoIEJVR1MKLk5tCm1heSBu
 b3Qgd29yayB3aXRoIGJpbmFyeSBkYXRhLgo=
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="sdiff.c"
 Content-Disposition: attachment;
  filename="sdiff.c"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IHNkaWZmLmMsdiAxLjIwIDIwMDYvMDkvMTkgMDU6
 NTI6MjMgb3R0byBFeHAgJCAqLwoKLyoKICogV3JpdHRlbiBieSBSYXltb25kIExhaSA8cmF5QGN5
 dGgubmV0Pi4KICogUHVibGljIGRvbWFpbi4KICovCgojaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiNp
 bmNsdWRlIDxzeXMvcXVldWUuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzeXMv
 dHlwZXMuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1
 ZGUgPGVyci5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRl
 IDxnZXRvcHQuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8cGF0aHMuaD4KI2luY2x1
 ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5j
 bHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDx1dGlsLmg+CgojaW5jbHVkZSAiY29tbW9uLmgiCiNp
 bmNsdWRlICJleHRlcm4uaCIKCiNkZWZpbmUgV0lEVEggMTMwCi8qCiAqIEVhY2ggY29sdW1uIG11
 c3QgYmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciB3aWRlLCBwbHVzIHRocmVlCiAqIGNoYXJhY3Rl
 cnMgYmV0d2VlbiB0aGUgY29sdW1ucyAoc3BhY2UsIFs8fD5dLCBzcGFjZSkuCiAqLwojZGVmaW5l
 IFdJRFRIX01JTiA1CgovKiBBIHNpbmdsZSBkaWZmIGxpbmUuICovCnN0cnVjdCBkaWZmbGluZSB7
 CglTSU1QTEVRX0VOVFJZKGRpZmZsaW5lKSBkaWZmZW50cmllczsKCWNoYXIJKmxlZnQ7CgljaGFy
 CSBkaXY7CgljaGFyCSpyaWdodDsKfTsKCnN0YXRpYyB2b2lkIGFzdHJjYXQoY2hhciAqKiwgY29u
 c3QgY2hhciAqKTsKc3RhdGljIHZvaWQgZW5xdWV1ZShjaGFyICosIGNoYXIsIGNoYXIgKik7CnN0
 YXRpYyBjaGFyICpta3RtcGNweShjb25zdCBjaGFyICopOwpzdGF0aWMgdm9pZCBmcmVlZGlmZihz
 dHJ1Y3QgZGlmZmxpbmUgKik7CnN0YXRpYyB2b2lkIGludF91c2FnZSh2b2lkKTsKc3RhdGljIGlu
 dCBwYXJzZWNtZChGSUxFICosIEZJTEUgKiwgRklMRSAqKTsKc3RhdGljIHZvaWQgcHJpbnRhKEZJ
 TEUgKiwgc2l6ZV90KTsKc3RhdGljIHZvaWQgcHJpbnRjKEZJTEUgKiwgc2l6ZV90LCBGSUxFICos
 IHNpemVfdCk7CnN0YXRpYyB2b2lkIHByaW50Y29sKGNvbnN0IGNoYXIgKiwgc2l6ZV90ICosIGNv
 bnN0IHNpemVfdCk7CnN0YXRpYyB2b2lkIHByaW50ZChGSUxFICosIHNpemVfdCk7CnN0YXRpYyB2
 b2lkIHByaW50bG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyLCBjb25zdCBjaGFyICopOwpzdGF0
 aWMgdm9pZCBwcm9jZXNzcSh2b2lkKTsKc3RhdGljIHZvaWQgcHJvbXB0KGNvbnN0IGNoYXIgKiwg
 Y29uc3QgY2hhciAqKTsKX19kZWFkIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOwpzdGF0aWMgY2hh
 ciAqeGZnZXRzKEZJTEUgKik7CgpTSU1QTEVRX0hFQUQoLCBkaWZmbGluZSkgZGlmZmhlYWQgPSBT
 SU1QTEVRX0hFQURfSU5JVElBTElaRVIoZGlmZmhlYWQpOwpzaXplX3QJIGxpbmVfd2lkdGg7CS8q
 IHdpZHRoIG9mIGEgbGluZSAodHdvIGNvbHVtbnMgYW5kIGRpdmlkZXIpICovCnNpemVfdAkgd2lk
 dGg7CQkvKiB3aWR0aCBvZiBlYWNoIGNvbHVtbiAqLwpzaXplX3QJIGZpbGUxbG4sIGZpbGUybG47
 CS8qIGxpbmUgbnVtYmVyIG9mIGZpbGUxIGFuZCBmaWxlMiAqLwppbnQJIElmbGFnID0gMDsJLyog
 aWdub3JlIHNldHMgbWF0Y2hpbmcgcmVnZXhwICovCmludAkgbGZsYWc7CQkvKiBwcmludCBvbmx5
 IGxlZnQgY29sdW1uIGZvciBpZGVudGljYWwgbGluZXMgKi8KaW50CSBzZmxhZzsJCS8qIHNraXAg
 aWRlbnRpY2FsIGxpbmVzICovCkZJTEUJKm91dGZpbGU7CS8qIGZpbGUgdG8gc2F2ZSBjaGFuZ2Vz
 IHRvICovCmNvbnN0IGNoYXIgKnRtcGRpcjsJLyogVE1QRElSIG9yIC90bXAgKi8KCnN0YXRpYyBz
 dHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Cgl7ICJ0ZXh0IiwJCQlub19hcmd1bWVudCwJCU5V
 TEwsCSdhJyB9LAoJeyAiaWdub3JlLWJsYW5rLWxpbmVzIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJ
 J0InIH0sCgl7ICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwJbm9fYXJndW1lbnQsCQlOVUxMLAknYicg
 fSwKCXsgIm1pbmltYWwiLAkJCW5vX2FyZ3VtZW50LAkJTlVMTCwJJ2QnIH0sCgl7ICJpZ25vcmUt
 dGFiLWV4cGFuc2lvbiIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJJ0UnIH0sCgl7ICJkaWZmLXByb2dy
 YW0iLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCSdGJyB9LAoJeyAic3BlZWQtbGFyZ2UtZmls
 ZXMiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAknSCcgfSwKCXsgImlnbm9yZS1tYXRjaGluZy1saW5l
 cyIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAknSScgfSwKCXsgImxlZnQtY29sdW1uIiwJCW5v
 X2FyZ3VtZW50LAkJTlVMTCwJJ2wnIH0sCgl7ICJvdXRwdXQiLAkJCXJlcXVpcmVkX2FyZ3VtZW50
 LAlOVUxMLAknbycgfSwKCXsgInN0cmlwLXRyYWlsaW5nLWNyIiwJCW5vX2FyZ3VtZW50LAkJTlVM
 TCwJJ1MnIH0sCgl7ICJzdXBwcmVzcy1jb21tb24tbGluZXMiLAlub19hcmd1bWVudCwJCU5VTEws
 CSdzJyB9LAoJeyAiZXhwYW5kLXRhYnMiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAkndCcgfSwKCXsg
 Imlnbm9yZS1hbGwtc3BhY2UiLAkJbm9fYXJndW1lbnQsCQlOVUxMLAknVycgfSwKCXsgIndpZHRo
 IiwJCQlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJJ3cnIH0sCgl7IE5VTEwsCQkJCTAsCQkJTlVM
 TCwJIDAgIH0KfTsKCi8qCiAqIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZSBpZiBzb3VyY2VfZmlsZSBp
 cyBub3QgYSByZWd1bGFyIGZpbGUuCiAqIFJldHVybnMgdGVtcG9yYXJ5IGZpbGUgbmFtZSBpZiBv
 bmUgd2FzIG1hbGxvY2VkLCBOVUxMIGlmIHVubmVjZXNzYXJ5LgogKi8Kc3RhdGljIGNoYXIgKgpt
 a3RtcGNweShjb25zdCBjaGFyICpzb3VyY2VfZmlsZSkKewoJc3RydWN0IHN0YXQgc2I7Cglzc2l6
 ZV90IHJjb3VudDsKCWludCBpZmQsIG9mZDsKCXVfY2hhciBidWZbQlVGU0laXTsKCWNoYXIgKnRh
 cmdldF9maWxlOwoKCS8qIE9wZW4gaW5wdXQgYW5kIG91dHB1dC4gKi8KCWlmZCA9IG9wZW4oc291
 cmNlX2ZpbGUsIE9fUkRPTkxZLCAwKTsKCS8qIEZpbGUgd2FzIG9wZW5lZCBzdWNjZXNzZnVsbHku
 ICovCglpZiAoaWZkICE9IC0xKSB7CgkJaWYgKGZzdGF0KGlmZCwgJnNiKSA9PSAtMSkKCQkJZXJy
 KDIsICJlcnJvciBnZXR0aW5nIGZpbGUgc3RhdHVzIGZyb20gJXMiLCBzb3VyY2VfZmlsZSk7CgoJ
 CS8qIFJlZ3VsYXIgZmlsZS4gKi8KCQlpZiAoU19JU1JFRyhzYi5zdF9tb2RlKSkKCQkJcmV0dXJu
 IChOVUxMKTsKCX0gZWxzZSB7CgkJLyogSWYgYGAtJycgZG9lcyBub3QgZXhpc3QgdGhlIHVzZXIg
 bWVhbnQgc3RkaW4uICovCgkJaWYgKGVycm5vID09IEVOT0VOVCAmJiBzdHJjbXAoc291cmNlX2Zp
 bGUsICItIikgPT0gMCkKCQkJaWZkID0gU1RESU5fRklMRU5POwoJCWVsc2UKCQkJZXJyKDIsICJl
 cnJvciBvcGVuaW5nICVzIiwgc291cmNlX2ZpbGUpOwoJfQoKCS8qIE5vdCBhIHJlZ3VsYXIgZmls
 ZSwgc28gY29weSBpbnB1dCBpbnRvIHRlbXBvcmFyeSBmaWxlLiAqLwoJaWYgKGFzcHJpbnRmKCZ0
 YXJnZXRfZmlsZSwgIiVzL3NkaWZmLlhYWFhYWFhYWFgiLCB0bXBkaXIpID09IC0xKQoJCWVycigy
 LCAiYXNwcmludGYiKTsKCWlmICgob2ZkID0gbWtzdGVtcCh0YXJnZXRfZmlsZSkpID09IC0xKSB7
 CgkJd2FybigiZXJyb3Igb3BlbmluZyAlcyIsIHRhcmdldF9maWxlKTsKCQlnb3RvIEZBSUw7Cgl9
 Cgl3aGlsZSAoKHJjb3VudCA9IHJlYWQoaWZkLCBidWYsIHNpemVvZihidWYpKSkgIT0gLTEgJiYK
 CSAgICByY291bnQgIT0gMCkgewoJCXNzaXplX3Qgd2NvdW50OwoKCQl3Y291bnQgPSB3cml0ZShv
 ZmQsIGJ1ZiwgKHNpemVfdClyY291bnQpOwoJCWlmICgtMSA9PSB3Y291bnQgfHwgcmNvdW50ICE9
 IHdjb3VudCkgewoJCQl3YXJuKCJlcnJvciB3cml0aW5nIHRvICVzIiwgdGFyZ2V0X2ZpbGUpOwoJ
 CQlnb3RvIEZBSUw7CgkJfQoJfQoJaWYgKHJjb3VudCA9PSAtMSkgewoJCXdhcm4oImVycm9yIHJl
 YWRpbmcgZnJvbSAlcyIsIHNvdXJjZV9maWxlKTsKCQlnb3RvIEZBSUw7Cgl9CgoJY2xvc2UoaWZk
 KTsKCWNsb3NlKG9mZCk7CgoJcmV0dXJuICh0YXJnZXRfZmlsZSk7CgpGQUlMOgoJdW5saW5rKHRh
 cmdldF9maWxlKTsKCWV4aXQoMik7Cn0KCmludAptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK
 ewoJRklMRSAqZGlmZnBpcGUsICpmaWxlMSwgKmZpbGUyOwoJc2l6ZV90IGRpZmZhcmdjID0gMCwg
 d2ZsYWcgPSBXSURUSDsKCWludCBjaCwgZmRbMl0sIHN0YXR1czsKCXBpZF90IHBpZDsKCWNoYXIg
 KipkaWZmYXJndiwgKmRpZmZwcm9nID0gImRpZmYiLCAqZmlsZW5hbWUxLCAqZmlsZW5hbWUyLAoJ
 ICAgICp0bXAxLCAqdG1wMiwgKnMxLCAqczI7CgoJLyoKCSAqIFByb2Nlc3MgZGlmZiBmbGFncy4K
 CSAqLwoJLyoKCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgZGlmZiBhcmd1bWVudHMgYW5kIE5VTEwu
 CgkgKiBFYWNoIGZsYWcgaGFzIGF0IG1vc3Qgb25lIGFyZ3VtZW50LCBzbyBkb3VibGluZyBhcmdj
 IGdpdmVzIGFuCgkgKiB1cHBlciBsaW1pdCBvZiBob3cgbWFueSBkaWZmIGFyZ3MgY2FuIGJlIHBh
 c3NlZC4gIGFyZ3ZbMF0sCgkgKiBmaWxlMSwgYW5kIGZpbGUyIHdvbid0IGhhdmUgYXJndW1lbnRz
 IHNvIGRvdWJsaW5nIHRoZW0gd2lsbAoJICogd2FzdGUgc29tZSBtZW1vcnk7IGhvd2V2ZXIgd2Ug
 bmVlZCBhbiBleHRyYSBzcGFjZSBmb3IgdGhlCgkgKiBOVUxMIGF0IHRoZSBlbmQsIHNvIGl0IHNv
 cnQgb2Ygd29ya3Mgb3V0LgoJICovCglpZiAoIShkaWZmYXJndiA9IG1hbGxvYyhzaXplb2YoY2hh
 ciAqKikgKiBhcmdjICogMikpKQoJCWVycigyLCAibWFpbiIpOwoKCS8qIEFkZCBmaXJzdCBhcmd1
 bWVudCwgdGhlIHByb2dyYW0gbmFtZS4gKi8KCWRpZmZhcmd2W2RpZmZhcmdjKytdID0gZGlmZnBy
 b2c7CgoJd2hpbGUgKChjaCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQmJkRUhJOmlsbzpz
 dFd3OiIsCgkgICAgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgewoJCWNvbnN0IGNoYXIgKmVycnN0
 cjsKCgkJc3dpdGNoIChjaCkgewoJCWNhc2UgJ2EnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9
 ICItYSI7CgkJCWJyZWFrOwoJCWNhc2UgJ0InOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICIt
 QiI7CgkJCWJyZWFrOwoJCWNhc2UgJ2InOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItYiI7
 CgkJCWJyZWFrOwoJCWNhc2UgJ2QnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItZCI7CgkJ
 CWJyZWFrOwoJCWNhc2UgJ0UnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItRSI7CgkJCWJy
 ZWFrOwoJCWNhc2UgJ0YnOgoJCQlkaWZmYXJndlswXSA9IGRpZmZwcm9nID0gb3B0YXJnOwoJCQli
 cmVhazsKCQljYXNlICdIJzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSAiLUgiOwoJCQlicmVh
 azsKCQljYXNlICdJJzoKCQkJSWZsYWcgPSAxOwoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICIt
 SSI7CgkJCWRpZmZhcmd2W2RpZmZhcmdjKytdID0gb3B0YXJnOwoJCQlicmVhazsKCQljYXNlICdp
 JzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSAiLWkiOwoJCQlicmVhazsKCQljYXNlICdsJzoK
 CQkJbGZsYWcgPSAxOwoJCQlicmVhazsKCQljYXNlICdvJzoKCQkJaWYgKChvdXRmaWxlID0gZm9w
 ZW4ob3B0YXJnLCAidyIpKSA9PSBOVUxMKQoJCQkJZXJyKDIsICJjb3VsZCBub3Qgb3BlbjogJXMi
 LCBvcHRhcmcpOwoJCQlicmVhazsKCQljYXNlICdTJzoKCQkJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10g
 PSAiLS1zdHJpcC10cmFpbGluZy1jciI7CgkJCWJyZWFrOwoJCWNhc2UgJ3MnOgoJCQlzZmxhZyA9
 IDE7CgkJCWJyZWFrOwoJCWNhc2UgJ3QnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItdCI7
 CgkJCWJyZWFrOwoJCWNhc2UgJ1cnOgoJCQlkaWZmYXJndltkaWZmYXJnYysrXSA9ICItdyI7CgkJ
 CWJyZWFrOwoJCWNhc2UgJ3cnOgoJCQl3ZmxhZyA9IHN0cnRvbnVtKG9wdGFyZywgV0lEVEhfTUlO
 LAoJCQkgICAgSU5UX01BWCwgJmVycnN0cik7CgkJCWlmIChlcnJzdHIpCgkJCQllcnJ4KDIsICJ3
 aWR0aCBpcyAlczogJXMiLCBlcnJzdHIsIG9wdGFyZyk7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJ
 CXVzYWdlKCk7CgkJfQoKCX0KCWFyZ2MgLT0gb3B0aW5kOwoJYXJndiArPSBvcHRpbmQ7CgoJaWYg
 KGFyZ2MgIT0gMikKCQl1c2FnZSgpOwoKCWlmICgodG1wZGlyID0gZ2V0ZW52KCJUTVBESVIiKSkg
 PT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgIAoJCXRtcGRpciA9IF9QQVRIX1RNUDsKCglm
 aWxlbmFtZTEgPSBhcmd2WzBdOwoJZmlsZW5hbWUyID0gYXJndlsxXTsKCgkvKgoJICogQ3JlYXRl
 IHRlbXBvcmFyeSBmaWxlcyBmb3IgZGlmZiBhbmQgc2RpZmYgdG8gc2hhcmUgaWYgZmlsZTEKCSAq
 IG9yIGZpbGUyIGFyZSBub3QgcmVndWxhciBmaWxlcy4gIFRoaXMgYWxsb3dzIHNkaWZmIGFuZCBk
 aWZmCgkgKiB0byByZWFkIHRoZSBzYW1lIGlucHV0cyBpZiBvbmUgb3IgYm90aCBpbnB1dHMgYXJl
 IHN0ZGluLgoJICoKCSAqIElmIGFueSB0ZW1wb3JhcnkgZmlsZXMgd2VyZSBjcmVhdGVkLCB0aGVp
 ciBuYW1lcyB3b3VsZCBiZQoJICogc2F2ZWQgaW4gdG1wMSBvciB0bXAyLiAgdG1wMSBzaG91bGQg
 bmV2ZXIgZXF1YWwgdG1wMi4KCSAqLwoJdG1wMSA9IHRtcDIgPSBOVUxMOwoJLyogZmlsZTEgYW5k
 IGZpbGUyIGFyZSB0aGUgc2FtZSwgc28gY29weSB0byBzYW1lIHRlbXAgZmlsZS4gKi8KCWlmIChz
 dHJjbXAoZmlsZW5hbWUxLCBmaWxlbmFtZTIpID09IDApIHsKCQlpZiAoKHRtcDEgPSBta3RtcGNw
 eShmaWxlbmFtZTEpKSkKCQkJZmlsZW5hbWUxID0gZmlsZW5hbWUyID0gdG1wMTsKCS8qIENvcHkg
 ZmlsZTEgYW5kIGZpbGUyIGludG8gc2VwYXJhdGUgdGVtcCBmaWxlcy4gKi8KCX0gZWxzZSB7CgkJ
 aWYgKCh0bXAxID0gbWt0bXBjcHkoZmlsZW5hbWUxKSkpCgkJCWZpbGVuYW1lMSA9IHRtcDE7CgkJ
 aWYgKCh0bXAyID0gbWt0bXBjcHkoZmlsZW5hbWUyKSkpCgkJCWZpbGVuYW1lMiA9IHRtcDI7Cgl9
 CgoJZGlmZmFyZ3ZbZGlmZmFyZ2MrK10gPSBmaWxlbmFtZTE7CglkaWZmYXJndltkaWZmYXJnYysr
 XSA9IGZpbGVuYW1lMjsKCS8qIEFkZCBOVUxMIHRvIGVuZCBvZiBhcnJheSB0byBpbmRpY2F0ZSBl
 bmQgb2YgYXJyYXkuICovCglkaWZmYXJndltkaWZmYXJnYysrXSA9IE5VTEw7CgoJLyogU3VidHJh
 Y3QgY29sdW1uIGRpdmlkZXIgYW5kIGRpdmlkZSBieSB0d28uICovCgl3aWR0aCA9ICh3ZmxhZyAt
 IDMpIC8gMjsKCS8qIE1ha2Ugc3VyZSBsaW5lX3dpZHRoIGNhbiBmaXQgaW4gc2l6ZV90LiAqLwoJ
 aWYgKHdpZHRoID4gKFNJWkVfVF9NQVggLSAzKSAvIDIpCgkJZXJyeCgyLCAid2lkdGggaXMgdG9v
 IGxhcmdlOiAlenUiLCB3aWR0aCk7CglsaW5lX3dpZHRoID0gd2lkdGggKiAyICsgMzsKCglpZiAo
 cGlwZShmZCkpCgkJZXJyKDIsICJwaXBlIik7CgoJc3dpdGNoKHBpZCA9IGZvcmsoKSkgewoJY2Fz
 ZSAwOgoJCS8qIGNoaWxkICovCgkJLyogV2UgZG9uJ3QgcmVhZCBmcm9tIHRoZSBwaXBlLiAqLwoJ
 CWNsb3NlKGZkWzBdKTsKCQlpZiAoZHVwMihmZFsxXSwgU1RET1VUX0ZJTEVOTykgPT0gLTEpCgkJ
 CWVycigyLCAiY2hpbGQgY291bGQgbm90IGR1cGxpY2F0ZSBkZXNjcmlwdG9yIik7CgkJLyogRnJl
 ZSB1bnVzZWQgZGVzY3JpcHRvci4gKi8KCQljbG9zZShmZFsxXSk7CgoJCWV4ZWN2cChkaWZmcHJv
 ZywgZGlmZmFyZ3YpOwoJCWVycigyLCAiY291bGQgbm90IGV4ZWN1dGUgZGlmZjogJXMiLCBkaWZm
 cHJvZyk7CgljYXNlIC0xOgoJCWVycigyLCAiY291bGQgbm90IGZvcmsiKTsKCX0KCgkvKiBwYXJl
 bnQgKi8KCS8qIFdlIGRvbid0IHdyaXRlIHRvIHRoZSBwaXBlLiAqLwoJY2xvc2UoZmRbMV0pOwoK
 CS8qIE9wZW4gcGlwZSB0byBkaWZmIGNvbW1hbmQuICovCglpZiAoKGRpZmZwaXBlID0gZmRvcGVu
 KGZkWzBdLCAiciIpKSA9PSBOVUxMKQoJCWVycigyLCAiY291bGQgbm90IG9wZW4gZGlmZiBwaXBl
 Iik7CglpZiAoKGZpbGUxID0gZm9wZW4oZmlsZW5hbWUxLCAiciIpKSA9PSBOVUxMKQoJCWVycigy
 LCAiY291bGQgbm90IG9wZW4gJXMiLCBmaWxlbmFtZTEpOwoJaWYgKChmaWxlMiA9IGZvcGVuKGZp
 bGVuYW1lMiwgInIiKSkgPT0gTlVMTCkKCQllcnIoMiwgImNvdWxkIG5vdCBvcGVuICVzIiwgZmls
 ZW5hbWUyKTsKCgkvKiBMaW5lIG51bWJlcnMgc3RhcnQgYXQgb25lLiAqLwoJZmlsZTFsbiA9IGZp
 bGUybG4gPSAxOwoKCS8qIFJlYWQgYW5kIHBhcnNlIGRpZmYgb3V0cHV0LiAqLwoJd2hpbGUgKHBh
 cnNlY21kKGRpZmZwaXBlLCBmaWxlMSwgZmlsZTIpICE9IEVPRikKCQk7CglmY2xvc2UoZGlmZnBp
 cGUpOwoKCS8qIFdhaXQgZm9yIGRpZmYgdG8gZXhpdC4gKi8KCWlmICh3YWl0cGlkKHBpZCwgJnN0
 YXR1cywgMCkgPT0gLTEgfHwgIVdJRkVYSVRFRChzdGF0dXMpIHx8CgkgICAgV0VYSVRTVEFUVVMo
 c3RhdHVzKSA+PSAyKQoJCWVycigyLCAiZGlmZiBleGl0ZWQgYWJub3JtYWxseSIpOwoKCS8qIERl
 bGV0ZSBhbmQgZnJlZSB1bm5lZWRlZCB0ZW1wb3JhcnkgZmlsZXMuICovCglpZiAodG1wMSkKCQlp
 ZiAodW5saW5rKHRtcDEpKQoJCQl3YXJuKCJlcnJvciBkZWxldGluZyAlcyIsIHRtcDEpOwoJaWYg
 KHRtcDIpCgkJaWYgKHVubGluayh0bXAyKSkKCQkJd2FybigiZXJyb3IgZGVsZXRpbmcgJXMiLCB0
 bXAyKTsKCWZyZWUodG1wMSk7CglmcmVlKHRtcDIpOwoJZmlsZW5hbWUxID0gZmlsZW5hbWUyID0g
 dG1wMSA9IHRtcDIgPSBOVUxMOwoKCS8qIE5vIG1vcmUgZGlmZnMsIHNvIHByaW50IGNvbW1vbiBs
 aW5lcy4gKi8KCWlmIChsZmxhZykKCQl3aGlsZSAoKHMxID0geGZnZXRzKGZpbGUxKSkpCgkJCWVu
 cXVldWUoczEsICcgJywgTlVMTCk7CgllbHNlCgkJZm9yICg7OykgewoJCQlzMSA9IHhmZ2V0cyhm
 aWxlMSk7CgkJCXMyID0geGZnZXRzKGZpbGUyKTsKCQkJaWYgKHMxIHx8IHMyKQoJCQkJZW5xdWV1
 ZShzMSwgJyAnLCBzMik7CgkJCWVsc2UKCQkJCWJyZWFrOwoJCX0KCWZjbG9zZShmaWxlMSk7Cglm
 Y2xvc2UoZmlsZTIpOwoJLyogUHJvY2VzcyB1bm1vZGlmaWVkIGxpbmVzLiAqLwoJcHJvY2Vzc3Eo
 KTsKCgkvKiBSZXR1cm4gZGlmZiBleGl0IHN0YXR1cy4gKi8KCXJldHVybiAoV0VYSVRTVEFUVVMo
 c3RhdHVzKSk7Cn0KCi8qCiAqIFByaW50cyBhbiBpbmRpdmlkdWFsIGNvbHVtbiAobGVmdCBvciBy
 aWdodCksIHRha2luZyBpbnRvIGFjY291bnQKICogdGhhdCB0YWJzIGFyZSB2YXJpYWJsZS13aWR0
 aC4gIFRha2VzIGEgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4KICogdGhlIGN1cnNvciBpcyBv
 biB0aGUgc2NyZWVuLCBhbmQgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbHVtbi4KICogVGhl
 IGNvbHVtbiB2YWx1ZSBpcyB1cGRhdGVkIGFzIHdlIGdvIGFsb25nLgogKi8Kc3RhdGljIHZvaWQK
 cHJpbnRjb2woY29uc3QgY2hhciAqcywgc2l6ZV90ICpjb2wsIGNvbnN0IHNpemVfdCBjb2xfbWF4
 KQp7CgoJZm9yICg7ICpzICYmICpjb2wgPCBjb2xfbWF4OyArK3MpIHsKCQlzaXplX3QgbmV3X2Nv
 bDsKCgkJc3dpdGNoICgqcykgewoJCWNhc2UgJ1x0JzoKCQkJLyoKCQkJICogSWYgcm91bmRpbmcg
 dG8gbmV4dCBtdWx0aXBsZSBvZiBlaWdodCBjYXVzZXMKCQkJICogYW4gaW50ZWdlciBvdmVyZmxv
 dywganVzdCByZXR1cm4uCgkJCSAqLwoJCQlpZiAoKmNvbCA+IFNJWkVfVF9NQVggLSA4KQoJCQkJ
 cmV0dXJuOwoKCQkJLyogUm91bmQgdG8gbmV4dCBtdWx0aXBsZSBvZiBlaWdodC4gKi8KCQkJbmV3
 X2NvbCA9ICgqY29sIC8gOCArIDEpICogODsKCgkJCS8qCgkJCSAqIElmIHByaW50aW5nIHRoZSB0
 YWIgZ29lcyBwYXN0IHRoZSBjb2x1bW4KCQkJICogd2lkdGgsIGRvbid0IHByaW50IGl0IGFuZCBq
 dXN0IHF1aXQuCgkJCSAqLwoJCQlpZiAobmV3X2NvbCA+IGNvbF9tYXgpCgkJCQlyZXR1cm47CgkJ
 CSpjb2wgPSBuZXdfY29sOwoJCQlicmVhazsKCgkJZGVmYXVsdDoKCQkJKysoKmNvbCk7CgkJfQoK
 CQlwdXRjaGFyKCpzKTsKCX0KfQoKLyoKICogUHJvbXB0cyB1c2VyIHRvIGVpdGhlciBjaG9vc2Ug
 YmV0d2VlbiB0d28gc3RyaW5ncyBvciBlZGl0IG9uZSwgYm90aCwKICogb3IgbmVpdGhlci4KICov
 CnN0YXRpYyB2b2lkCnByb21wdChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCnsKCWNo
 YXIgKmNtZDsKCgkvKiBQcmludCBjb21tYW5kIHByb21wdC4gKi8KCXB1dGNoYXIoJyUnKTsKCgkv
 KiBHZXQgdXNlciBpbnB1dC4gKi8KCWZvciAoOyAoY21kID0geGZnZXRzKHN0ZGluKSk7IGZyZWUo
 Y21kKSkgewoJCWNvbnN0IGNoYXIgKnA7CgoJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAq
 LwoJCWZvciAocCA9IGNtZDsgaXNzcGFjZSgoaW50KSgqcCkpOyArK3ApCgkJCTsKCgkJc3dpdGNo
 ICgqcCkgewoJCWNhc2UgJ2UnOgoJCQkvKiBTa2lwIGBlJy4gKi8KCQkJKytwOwoKCQkJaWYgKGVw
 YXJzZShwLCBzMSwgczIpID09IC0xKQoJCQkJZ290byBVU0FHRTsKCQkJYnJlYWs7CgoJCWNhc2Ug
 J2wnOgoJCQkvKiBDaG9vc2UgbGVmdCBjb2x1bW4gYXMtaXMuICovCgkJCWlmIChzMSAhPSBOVUxM
 KQoJCQkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIHMxKTsKCgkJCS8qIEVuZCBvZiBjb21tYW5k
 IHBhcnNpbmcuICovCgkJCWJyZWFrOwoKCQljYXNlICdxJzoKCQkJZ290byBRVUlUOwoKCQljYXNl
 ICdyJzoKCQkJLyogQ2hvb3NlIHJpZ2h0IGNvbHVtbiBhcy1pcy4gKi8KCQkJaWYgKHMyICE9IE5V
 TEwpCgkJCQlmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgczIpOwoKCQkJLyogRW5kIG9mIGNvbW1h
 bmQgcGFyc2luZy4gKi8KCQkJYnJlYWs7CgoJCWNhc2UgJ3MnOgoJCQlzZmxhZyA9IDE7CgkJCWdv
 dG8gUFJPTVBUOwoKCQljYXNlICd2JzoKCQkJc2ZsYWcgPSAwOwoJCQkvKiBGQUxMVEhST1VHSCAq
 LwoKCQlkZWZhdWx0OgoJCQkvKiBJbnRlcmFjdGl2ZSB1c2FnZSBoZWxwLiAqLwpVU0FHRToKCQkJ
 aW50X3VzYWdlKCk7ClBST01QVDoKCQkJcHV0Y2hhcignJScpOwoKCQkJLyogUHJvbXB0IHVzZXIg
 YWdhaW4uICovCgkJCWNvbnRpbnVlOwoJCX0KCgkJZnJlZShjbWQpOwoJCXJldHVybjsKCX0KCgkv
 KgoJICogSWYgdGhlcmUgd2FzIG5vIGVycm9yLCB3ZSByZWNlaXZlZCBhbiBFT0YgZnJvbSBzdGRp
 biwgc28gd2UKCSAqIHNob3VsZCBxdWl0LgoJICovClFVSVQ6CglmY2xvc2Uob3V0ZmlsZSk7Cgll
 eGl0KDApOwp9CgovKgogKiBUYWtlcyB0d28gc3RyaW5ncywgc2VwYXJhdGVkIGJ5IGEgY29sdW1u
 IGRpdmlkZXIuICBOVUxMIHN0cmluZ3MgYXJlCiAqIHRyZWF0ZWQgYXMgZW1wdHkgY29sdW1ucy4g
 IElmIHRoZSBkaXZpZGVyIGlzIHRoZSBgICcgY2hhcmFjdGVyLCB0aGUKICogc2Vjb25kIGNvbHVt
 biBpcyBub3QgcHJpbnRlZCAoLWwgZmxhZykuICBJbiB0aGlzIGNhc2UsIHRoZSBzZWNvbmQKICog
 c3RyaW5nIG11c3QgYmUgTlVMTC4gIFdoZW4gdGhlIHNlY29uZCBjb2x1bW4gaXMgTlVMTCwgdGhl
 IGRpdmlkZXIKICogZG9lcyBub3QgcHJpbnQgdGhlIHRyYWlsaW5nIHNwYWNlIGZvbGxvd2luZyB0
 aGUgZGl2aWRlciBjaGFyYWN0ZXIuCiAqCiAqIFRha2VzIGludG8gYWNjb3VudCB0aGF0IHRhYnMg
 Y2FuIHRha2UgbXVsdGlwbGUgY29sdW1ucy4KICovCnN0YXRpYyB2b2lkCnByaW50bG4oY29uc3Qg
 Y2hhciAqczEsIGNvbnN0IGNoYXIgZGl2LCBjb25zdCBjaGFyICpzMikKewoJc2l6ZV90IGNvbDsK
 CgkvKiBQcmludCBmaXJzdCBjb2x1bW4uICBTa2lwcyBpZiBzMSA9PSBOVUxMLiAqLwoJY29sID0g
 MDsKCWlmIChzMSkgewoJCS8qIFNraXAgYW5nbGUgYnJhY2tldCBhbmQgc3BhY2UuICovCgkJcHJp
 bnRjb2woczEsICZjb2wsIHdpZHRoKTsKCgl9CgoJLyogT25seSBwcmludCBsZWZ0IGNvbHVtbi4g
 Ki8KCWlmIChkaXYgPT0gJyAnICYmICFzMikgewoJCXB1dGNoYXIoJ1xuJyk7CgkJcmV0dXJuOwoJ
 fQoKCS8qIE90aGVyd2lzZSwgd2UgcGFkIHRoaXMgY29sdW1uIHVwIHRvIHdpZHRoLiAqLwoJZm9y
 ICg7IGNvbCA8IHdpZHRoOyArK2NvbCkKCQlwdXRjaGFyKCcgJyk7CgoJLyoKCSAqIFByaW50IGNv
 bHVtbiBkaXZpZGVyLiAgSWYgdGhlcmUgaXMgbm8gc2Vjb25kIGNvbHVtbiwgd2UgZG9uJ3QKCSAq
 IG5lZWQgdG8gYWRkIHRoZSBzcGFjZSBmb3IgcGFkZGluZy4KCSAqLwoJaWYgKCFzMikgewoJCXBy
 aW50ZigiICVjXG4iLCBkaXYpOwoJCXJldHVybjsKCX0KCXByaW50ZigiICVjICIsIGRpdik7Cglj
 b2wgKz0gMzsKCgkvKiBTa2lwIGFuZ2xlIGJyYWNrZXQgYW5kIHNwYWNlLiAqLwoJcHJpbnRjb2wo
 czIsICZjb2wsIGxpbmVfd2lkdGgpOwoKCXB1dGNoYXIoJ1xuJyk7Cn0KCi8qCiAqIFJlYWRzIGEg
 bGluZSBmcm9tIGZpbGUgYW5kIHJldHVybnMgYXMgYSBzdHJpbmcuICBJZiBFT0YgaXMgcmVhY2hl
 ZCwKICogTlVMTCBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVl
 ZCBhZnRlcndhcmRzLgogKi8Kc3RhdGljIGNoYXIgKgp4ZmdldHMoRklMRSAqZmlsZSkKewoJY29u
 c3QgY2hhciBkZWxpbVszXSA9IHsnXDAnLCAnXDAnLCAnXDAnfTsKCWNoYXIgKnM7CgoJLyogWFhY
 IC0gSXMgdGhpcyBuZWNlc3Nhcnk/ICovCgljbGVhcmVycihmaWxlKTsKCglpZiAoIShzID0gZnBh
 cnNlbG4oZmlsZSwgTlVMTCwgTlVMTCwgZGVsaW0sIDApKSAmJgoJICAgIGZlcnJvcihmaWxlKSkK
 CQllcnIoMiwgImVycm9yIHJlYWRpbmcgZmlsZSIpOwoKCWlmICghcykgewoJCXJldHVybiAoTlVM
 TCk7Cgl9CgoJcmV0dXJuIChzKTsKfQoKLyoKICogUGFyc2UgZWQgY29tbWFuZHMgZnJvbSBkaWZm
 cGlwZSBhbmQgcHJpbnQgbGluZXMgZnJvbSBmaWxlMSAobGluZXMKICogdG8gY2hhbmdlIG9yIGRl
 bGV0ZSkgb3IgZmlsZTIgKGxpbmVzIHRvIGFkZCBvciBjaGFuZ2UpLgogKiBSZXR1cm5zIEVPRiBv
 ciAwLgogKi8Kc3RhdGljIGludApwYXJzZWNtZChGSUxFICpkaWZmcGlwZSwgRklMRSAqZmlsZTEs
 IEZJTEUgKmZpbGUyKQp7CglzaXplX3QgZmlsZTFzdGFydCwgZmlsZTFlbmQsIGZpbGUyc3RhcnQs
 IGZpbGUyZW5kLCBuOwoJLyogZWQgY29tbWFuZCBsaW5lIGFuZCBwb2ludGVyIHRvIGNoYXJhY3Rl
 cnMgaW4gbGluZSAqLwoJY2hhciAqbGluZSwgKnAsICpxOwoJY29uc3QgY2hhciAqZXJyc3RyOwoJ
 Y2hhciBjLCBjbWQ7CgoJLyogUmVhZCBlZCBjb21tYW5kLiAqLwoJaWYgKCEobGluZSA9IHhmZ2V0
 cyhkaWZmcGlwZSkpKQoJCXJldHVybiAoRU9GKTsKCglwID0gbGluZTsKCS8qIEdvIHRvIGNoYXJh
 Y3RlciBhZnRlciBsaW5lIG51bWJlci4gKi8KCXdoaWxlIChpc2RpZ2l0KChpbnQpKCpwKSkpCgkJ
 KytwOwoJYyA9ICpwOwoJKnArKyA9IDA7CglmaWxlMXN0YXJ0ID0gc3RydG9udW0obGluZSwgMCwg
 SU5UX01BWCwgJmVycnN0cik7CglpZiAoZXJyc3RyKQoJCWVycngoMiwgImZpbGUxIHN0YXJ0IGlz
 ICVzOiAlcyIsIGVycnN0ciwgbGluZSk7CgoJLyogQSByYW5nZSBpcyBzcGVjaWZpZWQgZm9yIGZp
 bGUxLiAqLwoJaWYgKGMgPT0gJywnKSB7CgoJCXEgPSBwOwoJCS8qIEdvIHRvIGNoYXJhY3RlciBh
 ZnRlciBmaWxlMmVuZC4gKi8KCQl3aGlsZSAoaXNkaWdpdCgoaW50KSgqcCkpKQoJCQkrK3A7CgkJ
 YyA9ICpwOwoJCSpwKysgPSAwOwoJCWZpbGUxZW5kID0gc3RydG9udW0ocSwgMCwgSU5UX01BWCwg
 JmVycnN0cik7CgkJaWYgKGVycnN0cikKCQkJZXJyeCgyLCAiZmlsZTEgZW5kIGlzICVzOiAlcyIs
 IGVycnN0ciwgbGluZSk7CgkJaWYgKGZpbGUxc3RhcnQgPiBmaWxlMWVuZCkKCQkJZXJyeCgyLCAi
 aW52YWxpZCBsaW5lIHJhbmdlIGluIGZpbGUxOiAlcyIsIGxpbmUpOwoKCX0gZWxzZQoJCWZpbGUx
 ZW5kID0gZmlsZTFzdGFydDsKCgljbWQgPSBjOwoJLyogQ2hlY2sgdGhhdCBjbWQgaXMgdmFsaWQu
 ICovCglpZiAoIShjbWQgPT0gJ2EnIHx8IGNtZCA9PSAnYycgfHwgY21kID09ICdkJykpCgkJZXJy
 eCgyLCAiZWQgY29tbWFuZCBub3QgcmVjb2duaXplZDogJWM6ICVzIiwgY21kLCBsaW5lKTsKCglx
 ID0gcDsKCS8qIEdvIHRvIGNoYXJhY3RlciBhZnRlciBsaW5lIG51bWJlci4gKi8KCXdoaWxlIChp
 c2RpZ2l0KChpbnQpKCpwKSkpCgkJKytwOwoJYyA9ICpwOwoJKnArKyA9IDA7CglmaWxlMnN0YXJ0
 ID0gc3RydG9udW0ocSwgMCwgSU5UX01BWCwgJmVycnN0cik7CglpZiAoZXJyc3RyKQoJCWVycngo
 MiwgImZpbGUyIHN0YXJ0IGlzICVzOiAlcyIsIGVycnN0ciwgbGluZSk7CgoJLyoKCSAqIFRoZXJl
 IHNob3VsZCBlaXRoZXIgYmUgYSBjb21tYSBzaWduaWZ5aW5nIGEgc2Vjb25kIGxpbmUKCSAqIG51
 bWJlciBvciB0aGUgbGluZSBzaG91bGQganVzdCBlbmQgaGVyZS4KCSAqLwoJaWYgKGMgIT0gJywn
 ICYmIGMgIT0gJ1wwJykKCQllcnJ4KDIsICJpbnZhbGlkIGxpbmUgcmFuZ2UgaW4gZmlsZTI6ICVj
 OiAlcyIsIGMsIGxpbmUpOwoKCWlmIChjID09ICcsJykgewoKCQlmaWxlMmVuZCA9IHN0cnRvbnVt
 KHAsIDAsIElOVF9NQVgsICZlcnJzdHIpOwoJCWlmIChlcnJzdHIpCgkJCWVycngoMiwgImZpbGUy
 IGVuZCBpcyAlczogJXMiLCBlcnJzdHIsIGxpbmUpOwoJCWlmIChmaWxlMnN0YXJ0ID49IGZpbGUy
 ZW5kKQoJCQllcnJ4KDIsICJpbnZhbGlkIGxpbmUgcmFuZ2UgaW4gZmlsZTI6ICVzIiwgbGluZSk7
 Cgl9IGVsc2UKCQlmaWxlMmVuZCA9IGZpbGUyc3RhcnQ7CgoJLyogQXBwZW5kcyBoYXBwZW4gX2Fm
 dGVyXyBzdGF0ZWQgbGluZS4gKi8KCWlmIChjbWQgPT0gJ2EnKSB7CgkJaWYgKGZpbGUxc3RhcnQg
 IT0gZmlsZTFlbmQpCgkJCWVycngoMiwgImFwcGVuZCBjYW5ub3QgaGF2ZSBhIGZpbGUxIHJhbmdl
 OiAlcyIsCgkJCSAgICBsaW5lKTsKCQlpZiAoZmlsZTFzdGFydCA9PSBTSVpFX1RfTUFYKQoJCQll
 cnJ4KDIsICJmaWxlMSBsaW5lIHJhbmdlIHRvbyBoaWdoOiAlcyIsIGxpbmUpOwoJCWZpbGUxc3Rh
 cnQgPSArK2ZpbGUxZW5kOwoJfQoJLyoKCSAqIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZWFsIGlz
 IHdpdGggdGhlIGxpbmUgbnVtYmVycyBmb3IKCSAqIGRlbGV0ZXMsIHRob3VnaC4KCSAqLwoJZWxz
 ZSBpZiAoY21kID09ICdkJykgewoJCWlmIChmaWxlMnN0YXJ0ICE9IGZpbGUyZW5kKQoJCQllcnJ4
 KDIsICJkZWxldGUgY2Fubm90IGhhdmUgYSBmaWxlMiByYW5nZTogJXMiLAoJCQkgICAgbGluZSk7
 CgkJaWYgKGZpbGUyc3RhcnQgPT0gU0laRV9UX01BWCkKCQkJZXJyeCgyLCAiZmlsZTIgbGluZSBy
 YW5nZSB0b28gaGlnaDogJXMiLCBsaW5lKTsKCQlmaWxlMnN0YXJ0ID0gKytmaWxlMmVuZDsKCX0K
 CgkvKgoJICogQ29udGludWUgcmVhZGluZyBmaWxlMSBhbmQgZmlsZTIgdW50aWwgd2UgcmVhY2gg
 bGluZSBudW1iZXJzCgkgKiBzcGVjaWZpZWQgYnkgZGlmZi4gIFNob3VsZCBvbmx5IGhhcHBlbiB3
 aXRoIC1JIGZsYWcuCgkgKi8KCWZvciAoOyBmaWxlMWxuIDwgZmlsZTFzdGFydCAmJiBmaWxlMmxu
 IDwgZmlsZTJzdGFydDsKCSAgICArK2ZpbGUxbG4sICsrZmlsZTJsbikgewoJCWNoYXIgKnMxLCAq
 czI7CgoJCWlmICghKHMxID0geGZnZXRzKGZpbGUxKSkpCgkJCWVycngoMiwgImZpbGUxIHNob3J0
 ZXIgdGhhbiBleHBlY3RlZCIpOwoJCWlmICghKHMyID0geGZnZXRzKGZpbGUyKSkpCgkJCWVycngo
 MiwgImZpbGUyIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpOwoKCQkvKiBJZiB0aGUgLWwgZmxhZyB3
 YXMgc3BlY2lmaWVkLCBwcmludCBvbmx5IGxlZnQgY29sdW1uLiAqLwoJCWlmIChsZmxhZykgewoJ
 CQlmcmVlKHMyKTsKCQkJLyoKCQkJICogWFhYIC0gSWYgLWwgYW5kIC1JIGFyZSBib3RoIHNwZWNp
 ZmllZCwgYWxsCgkJCSAqIHVuY2hhbmdlZCBvciBpZ25vcmVkIGxpbmVzIGFyZSBzaG93biB3aXRo
 IGEKCQkJICogYCgnIGRpdmlkZXIuICBUaGlzIG1hdGNoZXMgR05VIHNkaWZmLCBidXQgSQoJCQkg
 KiBiZWxpZXZlIGl0IGlzIGEgYnVnLiAgSnVzdCBjaGVjayBvdXQ6CgkJCSAqIGdzZGlmZiAtbCAt
 SSAnXiQnIHNhbWVmaWxlIHNhbWVmaWxlLgoJCQkgKi8KCQkJaWYgKElmbGFnKQoJCQkJZW5xdWV1
 ZShzMSwgJygnLCBOVUxMKTsKCQkJZWxzZQoJCQkJZW5xdWV1ZShzMSwgJyAnLCBOVUxMKTsKCQl9
 IGVsc2UKCQkJZW5xdWV1ZShzMSwgJyAnLCBzMik7Cgl9CgkvKiBJZ25vcmUgZGVsZXRlZCBsaW5l
 cy4gKi8KCWZvciAoOyBmaWxlMWxuIDwgZmlsZTFzdGFydDsgKytmaWxlMWxuKSB7CgkJY2hhciAq
 czsKCgkJaWYgKCEocyA9IHhmZ2V0cyhmaWxlMSkpKQoJCQllcnJ4KDIsICJmaWxlMSBzaG9ydGVy
 IHRoYW4gZXhwZWN0ZWQiKTsKCgkJZW5xdWV1ZShzLCAnKCcsIE5VTEwpOwoJfQoJLyogSWdub3Jl
 IGFkZGVkIGxpbmVzLiAqLwoJZm9yICg7IGZpbGUybG4gPCBmaWxlMnN0YXJ0OyArK2ZpbGUybG4p
 IHsKCQljaGFyICpzOwoKCQlpZiAoIShzID0geGZnZXRzKGZpbGUyKSkpCgkJCWVycngoMiwgImZp
 bGUyIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpOwoKCQkvKiBJZiAtbCBmbGFnIHdhcyBnaXZlbiwg
 ZG9uJ3QgcHJpbnQgcmlnaHQgY29sdW1uLiAqLwoJCWlmIChsZmxhZykKCQkJZnJlZShzKTsKCQll
 bHNlCgkJCWVucXVldWUoTlVMTCwgJyknLCBzKTsKCX0KCgkvKiBQcm9jZXNzIHVubW9kaWZpZWQg
 b3Igc2tpcHBlZCBsaW5lcy4gKi8KCXByb2Nlc3NxKCk7CgoJc3dpdGNoIChjbWQpIHsKCWNhc2Ug
 J2EnOgoJCXByaW50YShmaWxlMiwgZmlsZTJlbmQpOwoJCW4gPSBmaWxlMmVuZCAtIGZpbGUyc3Rh
 cnQgKyAxOwoJCWJyZWFrOwoKCWNhc2UgJ2MnOgoJCXByaW50YyhmaWxlMSwgZmlsZTFlbmQsIGZp
 bGUyLCBmaWxlMmVuZCk7CgkJbiA9IGZpbGUxZW5kIC0gZmlsZTFzdGFydCArIDEgKyAxICsgZmls
 ZTJlbmQgLSBmaWxlMnN0YXJ0ICsgMTsKCQlicmVhazsKCgljYXNlICdkJzoKCQlwcmludGQoZmls
 ZTEsIGZpbGUxZW5kKTsKCQluID0gZmlsZTFlbmQgLSBmaWxlMXN0YXJ0ICsgMTsKCQlicmVhazsK
 CglkZWZhdWx0OgoJCWVycngoMiwgImludmFsaWQgZGlmZiBjb21tYW5kOiAlYzogJXMiLCBjbWQs
 IGxpbmUpOwoJfQoKCS8qIFNraXAgdG8gbmV4dCBlZCBsaW5lLiAqLwoJd2hpbGUgKG4tLSkKCQlp
 ZiAoIXhmZ2V0cyhkaWZmcGlwZSkpCgkJCWVycngoMiwgImRpZmYgZW5kZWQgZWFybHkiKTsKCgly
 ZXR1cm4gKDApOwp9CgovKgogKiBRdWV1ZXMgdXAgYSBkaWZmIGxpbmUuCiAqLwpzdGF0aWMgdm9p
 ZAplbnF1ZXVlKGNoYXIgKmxlZnQsIGNoYXIgZGl2LCBjaGFyICpyaWdodCkKewoJc3RydWN0IGRp
 ZmZsaW5lICpkaWZmcDsKCglpZiAoIShkaWZmcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpZmZs
 aW5lKSkpKQoJCWVycigyLCAiZW5xdWV1ZSIpOwoJZGlmZnAtPmxlZnQgPSBsZWZ0OwoJZGlmZnAt
 PmRpdiA9IGRpdjsKCWRpZmZwLT5yaWdodCA9IHJpZ2h0OwoJU0lNUExFUV9JTlNFUlRfVEFJTCgm
 ZGlmZmhlYWQsIGRpZmZwLCBkaWZmZW50cmllcyk7Cn0KCi8qCiAqIEZyZWUgYSBkaWZmbGluZSBz
 dHJ1Y3R1cmUgYW5kIGl0cyBlbGVtZW50cy4KICovCnN0YXRpYyB2b2lkCmZyZWVkaWZmKHN0cnVj
 dCBkaWZmbGluZSAqZGlmZnApCnsKCWZyZWUoZGlmZnAtPmxlZnQpOwoJZnJlZShkaWZmcC0+cmln
 aHQpOwoJZnJlZShkaWZmcCk7Cn0KCi8qCiAqIEFwcGVuZCBzZWNvbmQgc3RyaW5nIGludG8gZmly
 c3QuICBSZXBlYXRlZCBhcHBlbmRzIHRvIHRoZSBzYW1lIHN0cmluZwogKiBhcmUgY2FjaGVkLCBt
 YWtpbmcgdGhpcyBhbiBPKG4pIGZ1bmN0aW9uLCB3aGVyZSBuID0gc3RybGVuKGFwcGVuZCkuCiAq
 LwpzdGF0aWMgdm9pZAphc3RyY2F0KGNoYXIgKipzLCBjb25zdCBjaGFyICphcHBlbmQpCnsKCS8q
 IExlbmd0aCBvZiBzdHJpbmcgaW4gcHJldmlvdXMgcnVuLiAqLwoJc3RhdGljIHNpemVfdCBvZmZz
 ZXQgPSAwOwoJc2l6ZV90IG5ld3NpejsKCS8qCgkgKiBTdHJpbmcgZnJvbSBwcmV2aW91cyBydW4u
 ICBDb21wYXJlZCB0byAqcyB0byBzZWUgaWYgd2UgYXJlCgkgKiBkZWFsaW5nIHdpdGggdGhlIHNh
 bWUgc3RyaW5nLiAgSWYgc28sIHdlIGNhbiB1c2Ugb2Zmc2V0LgoJICovCglzdGF0aWMgY29uc3Qg
 Y2hhciAqb2xkc3RyID0gTlVMTDsKCWNoYXIgKm5ld3N0cjsKCgoJLyoKCSAqIEZpcnN0IHN0cmlu
 ZyBpcyBOVUxMLCBzbyBqdXN0IGNvcHkgYXBwZW5kLgoJICovCglpZiAoISpzKSB7CgkJaWYgKCEo
 KnMgPSBzdHJkdXAoYXBwZW5kKSkpCgkJCWVycigyLCAiYXN0cmNhdCIpOwoKCQkvKiBLZWVwIHRy
 YWNrIG9mIHN0cmluZy4gKi8KCQlvZmZzZXQgPSBzdHJsZW4oKnMpOwoJCW9sZHN0ciA9ICpzOwoK
 CQlyZXR1cm47Cgl9CgoJLyoKCSAqICpzIGlzIGEgc3RyaW5nIHNvIGNvbmNhdGVuYXRlLgoJICov
 CgoJLyogRGlkIHdlIHByb2Nlc3MgdGhlIHNhbWUgc3RyaW5nIGluIHRoZSBsYXN0IHJ1bj8gKi8K
 CS8qCgkgKiBJZiB0aGlzIGlzIGEgZGlmZmVyZW50IHN0cmluZyBmcm9tIHRoZSBvbmUgd2UganVz
 dCBwcm9jZXNzZWQKCSAqIGNhY2hlIG5ldyBzdHJpbmcuCgkgKi8KCWlmIChvbGRzdHIgIT0gKnMp
 IHsKCQlvZmZzZXQgPSBzdHJsZW4oKnMpOwoJCW9sZHN0ciA9ICpzOwoJfQoKCS8qIFNpemUgPSBz
 dHJsZW4oKnMpICsgXG4gKyBzdHJsZW4oYXBwZW5kKSArICdcMCcuICovCgluZXdzaXogPSBvZmZz
 ZXQgKyAxICsgc3RybGVuKGFwcGVuZCkgKyAxOwoKCS8qIFJlc2l6ZSAqcyB0byBmaXQgbmV3IHN0
 cmluZy4gKi8KCW5ld3N0ciA9IHJlYWxsb2MoKnMsIG5ld3Npeik7CglpZiAobmV3c3RyID09IE5V
 TEwpCgkJZXJyKDIsICJhc3RyY2F0Iik7CgkqcyA9IG5ld3N0cjsKCgkvKiAqcyArIG9mZnNldCBz
 aG91bGQgYmUgZW5kIG9mIHN0cmluZy4gKi8KCS8qIENvbmNhdGVuYXRlLiAqLwoJc3RybGNweSgq
 cyArIG9mZnNldCwgIlxuIiwgbmV3c2l6IC0gb2Zmc2V0KTsKCXN0cmxjYXQoKnMgKyBvZmZzZXQs
 IGFwcGVuZCwgbmV3c2l6IC0gb2Zmc2V0KTsKCgkvKiBOZXcgc3RyaW5nIGxlbmd0aCBzaG91bGQg
 YmUgZXhhY3RseSBuZXdzaXogLSAxIGNoYXJhY3RlcnMuICovCgkvKiBTdG9yZSBnZW5lcmF0ZWQg
 c3RyaW5nJ3MgdmFsdWVzLiAqLwoJb2Zmc2V0ID0gbmV3c2l6IC0gMTsKCW9sZHN0ciA9ICpzOwp9
 CgovKgogKiBQcm9jZXNzIGRpZmYgc2V0IHF1ZXVlLCBwcmludGluZywgcHJvbXB0aW5nLCBhbmQg
 c2F2aW5nIGVhY2ggZGlmZgogKiBsaW5lIHN0b3JlZCBpbiBxdWV1ZS4KICovCnN0YXRpYyB2b2lk
 CnByb2Nlc3NxKHZvaWQpCnsKCXN0cnVjdCBkaWZmbGluZSAqZGlmZnA7CgljaGFyIGRpdmMsICps
 ZWZ0LCAqcmlnaHQ7CgoJLyogRG9uJ3QgcHJvY2VzcyBlbXB0eSBxdWV1ZS4gKi8KCWlmIChTSU1Q
 TEVRX0VNUFRZKCZkaWZmaGVhZCkpCgkJcmV0dXJuOwoKCS8qIFJlbWVtYmVyIHRoZSBkaXZpZGVy
 LiAqLwoJZGl2YyA9IFNJTVBMRVFfRklSU1QoJmRpZmZoZWFkKS0+ZGl2OwoKCWxlZnQgPSBOVUxM
 OwoJcmlnaHQgPSBOVUxMOwoJLyoKCSAqIEdvIHRocm91Z2ggc2V0IG9mIGRpZmZzLCBjb25jYXRl
 bmF0aW5nIGVhY2ggbGluZSBpbiBsZWZ0IG9yCgkgKiByaWdodCBjb2x1bW4gaW50byB0d28gbG9u
 ZyBzdHJpbmdzLCBgbGVmdCcgYW5kIGByaWdodCcuCgkgKi8KCVNJTVBMRVFfRk9SRUFDSChkaWZm
 cCwgJmRpZmZoZWFkLCBkaWZmZW50cmllcykgewoJCS8qCgkJICogUHJpbnQgY2hhbmdlZCBsaW5l
 cyBpZiAtcyB3YXMgZ2l2ZW4sCgkJICogcHJpbnQgYWxsIGxpbmVzIGlmIC1zIHdhcyBub3QgZ2l2
 ZW4uCgkJICovCgkJaWYgKCFzZmxhZyB8fCBkaWZmcC0+ZGl2ID09ICd8JyB8fCBkaWZmcC0+ZGl2
 ID09ICc8JyB8fAoJCSAgICBkaWZmcC0+ZGl2ID09ICc+JykKCQkJcHJpbnRsbihkaWZmcC0+bGVm
 dCwgZGlmZnAtPmRpdiwgZGlmZnAtPnJpZ2h0KTsKCgkJLyogQXBwZW5kIG5ldyBsaW5lcyB0byBk
 aWZmIHNldC4gKi8KCQlpZiAoZGlmZnAtPmxlZnQpCgkJCWFzdHJjYXQoJmxlZnQsIGRpZmZwLT5s
 ZWZ0KTsKCQlpZiAoZGlmZnAtPnJpZ2h0KQoJCQlhc3RyY2F0KCZyaWdodCwgZGlmZnAtPnJpZ2h0
 KTsKCX0KCgkvKiBFbXB0eSBxdWV1ZSBhbmQgZnJlZSBlYWNoIGRpZmYgbGluZSBhbmQgaXRzIGVs
 ZW1lbnRzLiAqLwoJd2hpbGUgKCFTSU1QTEVRX0VNUFRZKCZkaWZmaGVhZCkpIHsKCQlkaWZmcCA9
 IFNJTVBMRVFfRklSU1QoJmRpZmZoZWFkKTsKCQlTSU1QTEVRX1JFTU9WRV9IRUFEKCZkaWZmaGVh
 ZCwgZGlmZmVudHJpZXMpOwoJCWZyZWVkaWZmKGRpZmZwKTsKCX0KCgkvKiBXcml0ZSB0byBvdXRm
 aWxlLCBwcm9tcHRpbmcgdXNlciBpZiBsaW5lcyBhcmUgZGlmZmVyZW50LiAqLwoJaWYgKG91dGZp
 bGUpCgkJc3dpdGNoIChkaXZjKSB7CgkJY2FzZSAnICc6IGNhc2UgJygnOiBjYXNlICcpJzoKCQkJ
 ZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIGxlZnQpOwoJCQlicmVhazsKCQljYXNlICd8JzogY2Fz
 ZSAnPCc6IGNhc2UgJz4nOgoJCQlwcm9tcHQobGVmdCwgcmlnaHQpOwoJCQlicmVhazsKCQlkZWZh
 dWx0OgoJCQllcnJ4KDIsICJpbnZhbGlkIGRpdmlkZXI6ICVjIiwgZGl2Yyk7CgkJfQoKCS8qIEZy
 ZWUgbGVmdCBhbmQgcmlnaHQuICovCglmcmVlKGxlZnQpOwoJZnJlZShyaWdodCk7Cn0KCi8qCiAq
 IFByaW50IGxpbmVzIGZvbGxvd2luZyBhbiAoYSlwcGVuZCBjb21tYW5kLgogKi8Kc3RhdGljIHZv
 aWQKcHJpbnRhKEZJTEUgKmZpbGUsIHNpemVfdCBsaW5lMikKewoJY2hhciAqbGluZTsKCglmb3Ig
 KDsgZmlsZTJsbiA8PSBsaW5lMjsgKytmaWxlMmxuKSB7CgkJaWYgKCEobGluZSA9IHhmZ2V0cyhm
 aWxlKSkpCgkJCWVycngoMiwgImFwcGVuZCBlbmRlZCBlYXJseSIpOwoJCWVucXVldWUoTlVMTCwg
 Jz4nLCBsaW5lKTsKCX0KCglwcm9jZXNzcSgpOwp9CgovKgogKiBQcmludCBsaW5lcyBmb2xsb3dp
 bmcgYSAoYyloYW5nZSBjb21tYW5kLCBmcm9tIGZpbGUxbG4gdG8gZmlsZTFlbmQKICogYW5kIGZy
 b20gZmlsZTJsbiB0byBmaWxlMmVuZC4KICovCnN0YXRpYyB2b2lkCnByaW50YyhGSUxFICpmaWxl
 MSwgc2l6ZV90IGZpbGUxZW5kLCBGSUxFICpmaWxlMiwgc2l6ZV90IGZpbGUyZW5kKQp7CglzdHJ1
 Y3QgZmlsZWxpbmUgewoJCVNJTVBMRVFfRU5UUlkoZmlsZWxpbmUpCSBmaWxlZW50cmllczsKCQlj
 aGFyCQkJKmxpbmU7Cgl9OwoJU0lNUExFUV9IRUFEKCwgZmlsZWxpbmUpIGRlbHFoZWFkID0gU0lN
 UExFUV9IRUFEX0lOSVRJQUxJWkVSKGRlbHFoZWFkKTsKCgkvKiBSZWFkIGxpbmVzIHRvIGJlIGRl
 bGV0ZWQuICovCglmb3IgKDsgZmlsZTFsbiA8PSBmaWxlMWVuZDsgKytmaWxlMWxuKSB7CgkJc3Ry
 dWN0IGZpbGVsaW5lICpsaW5lcDsKCQljaGFyICpsaW5lMTsKCgkJLyogUmVhZCBsaW5lcyBmcm9t
 IGJvdGguICovCgkJaWYgKCEobGluZTEgPSB4ZmdldHMoZmlsZTEpKSkKCQkJZXJyeCgyLCAiZXJy
 b3IgcmVhZGluZyBmaWxlMSBpbiBkZWxldGUgaW4gY2hhbmdlIik7CgoJCS8qIEFkZCB0byBkZWxl
 dGUgcXVldWUuICovCgkJaWYgKCEobGluZXAgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaWxlbGlu
 ZSkpKSkKCQkJZXJyKDIsICJwcmludGMiKTsKCQlsaW5lcC0+bGluZSA9IGxpbmUxOwoJCVNJTVBM
 RVFfSU5TRVJUX1RBSUwoJmRlbHFoZWFkLCBsaW5lcCwgZmlsZWVudHJpZXMpOwoJfQoKCS8qIFBy
 b2Nlc3MgY2hhbmdlZCBsaW5lcy4uICovCglmb3IgKDsgIVNJTVBMRVFfRU1QVFkoJmRlbHFoZWFk
 KSAmJiBmaWxlMmxuIDw9IGZpbGUyZW5kOwoJICAgICsrZmlsZTJsbikgewoJCXN0cnVjdCBmaWxl
 bGluZSAqZGVsOwoJCWNoYXIgKmFkZDsKCgkJLyogR2V0IGFkZCBsaW5lLiAqLwoJCWlmICghKGFk
 ZCA9IHhmZ2V0cyhmaWxlMikpKQoJCQllcnJ4KDIsICJlcnJvciByZWFkaW5nIGFkZCBpbiBjaGFu
 Z2UiKTsKCgkJZGVsID0gU0lNUExFUV9GSVJTVCgmZGVscWhlYWQpOwoJCWVucXVldWUoZGVsLT5s
 aW5lLCAnfCcsIGFkZCk7CgkJU0lNUExFUV9SRU1PVkVfSEVBRCgmZGVscWhlYWQsIGZpbGVlbnRy
 aWVzKTsKCQkvKgoJCSAqIEZyZWUgZmlsZWxpbmUgc3RydWN0dXJlIGJ1dCBub3QgaXRzIGVsZW1l
 bnRzIHNpbmNlCgkJICogdGhleSBhcmUgcXVldWVkIHVwLgoJCSAqLwoJCWZyZWUoZGVsKTsKCX0K
 CXByb2Nlc3NxKCk7CgoJLyogUHJvY2VzcyByZW1haW5pbmcgbGluZXMgdG8gYWRkLiAqLwoJZm9y
 ICg7IGZpbGUybG4gPD0gZmlsZTJlbmQ7ICsrZmlsZTJsbikgewoJCWNoYXIgKmFkZDsKCgkJLyog
 R2V0IGFkZCBsaW5lLiAqLwoJCWlmICghKGFkZCA9IHhmZ2V0cyhmaWxlMikpKQoJCQllcnJ4KDIs
 ICJlcnJvciByZWFkaW5nIGFkZCBpbiBjaGFuZ2UiKTsKCgkJZW5xdWV1ZShOVUxMLCAnPicsIGFk
 ZCk7Cgl9Cglwcm9jZXNzcSgpOwoKCS8qIFByb2Nlc3MgcmVtYWluaW5nIGxpbmVzIHRvIGRlbGV0
 ZS4gKi8KCXdoaWxlICghU0lNUExFUV9FTVBUWSgmZGVscWhlYWQpKSB7CgkJc3RydWN0IGZpbGVs
 aW5lICpmaWxlcDsKCgkJZmlsZXAgPSBTSU1QTEVRX0ZJUlNUKCZkZWxxaGVhZCk7CgkJZW5xdWV1
 ZShmaWxlcC0+bGluZSwgJzwnLCBOVUxMKTsKCQlTSU1QTEVRX1JFTU9WRV9IRUFEKCZkZWxxaGVh
 ZCwgZmlsZWVudHJpZXMpOwoJCWZyZWUoZmlsZXApOwoJfQoJcHJvY2Vzc3EoKTsKfQoKLyoKICog
 UHJpbnQgZGVsZXRlZCBsaW5lcyBmcm9tIGZpbGUsIGZyb20gZmlsZTFsbiB0byBmaWxlMWVuZC4K
 ICovCnN0YXRpYyB2b2lkCnByaW50ZChGSUxFICpmaWxlMSwgc2l6ZV90IGZpbGUxZW5kKQp7Cglj
 aGFyICpsaW5lMTsKCgkvKiBQcmludCBvdXQgbGluZXMgZmlsZTFsbiB0byBsaW5lMi4gKi8KCWZv
 ciAoOyBmaWxlMWxuIDw9IGZpbGUxZW5kOyArK2ZpbGUxbG4pIHsKCQkvKiBYWFggLSBXaHkgY2Fu
 J3QgdGhpcyBoYW5kbGUgc3RkaW4/ICovCgkJaWYgKCEobGluZTEgPSB4ZmdldHMoZmlsZTEpKSkK
 CQkJZXJyeCgyLCAiZmlsZTEgZW5kZWQgZWFybHkgaW4gZGVsZXRlIik7CgkJZW5xdWV1ZShsaW5l
 MSwgJzwnLCBOVUxMKTsKCX0KCXByb2Nlc3NxKCk7Cn0KCi8qCiAqIEludGVyYWN0aXZlIG1vZGUg
 dXNhZ2UuCiAqLwpzdGF0aWMgdm9pZAppbnRfdXNhZ2Uodm9pZCkKewoJcHV0cygiZTpcdGVkaXQg
 YmxhbmsgZGlmZlxuIgoJICAgICJlYjpcdGVkaXQgYm90aCBkaWZmcyBjb25jYXRlbmF0ZWRcbiIK
 CSAgICAiZWw6XHRlZGl0IGxlZnQgZGlmZlxuIgoJICAgICJlcjpcdGVkaXQgcmlnaHQgZGlmZlxu
 IgoJICAgICJsOlx0Y2hvb3NlIGxlZnQgZGlmZlxuIgoJICAgICJyOlx0Y2hvb3NlIHJpZ2h0IGRp
 ZmZcbiIKCSAgICAiczpcdHNpbGVudCBtb2RlLS1kb24ndCBwcmludCBpZGVudGljYWwgbGluZXNc
 biIKCSAgICAidjpcdHZlcmJvc2UgbW9kZS0tcHJpbnQgaWRlbnRpY2FsIGxpbmVzXG4iCgkgICAg
 InE6XHRxdWl0Iik7Cn0KCnN0YXRpYyB2b2lkCnVzYWdlKHZvaWQpCnsKCWV4dGVybiBjaGFyICpf
 X3Byb2duYW1lOwoKCWZwcmludGYoc3RkZXJyLAoJICAgICJ1c2FnZTogJXMgWy1hYmRpbHN0V10g
 Wy1JIHJlZ2V4cF0gWy1vIG91dGZpbGVdIFstdyB3aWR0aF0gZmlsZTEgZmlsZTJcbiIsCgkgICAg
 X19wcm9nbmFtZSk7CglleGl0KDIpOwp9Cg==
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g
 Content-Type: application/octet-stream;
  name="strtonum.c"
 Content-Disposition: attachment;
  filename="strtonum.c"
 Content-Transfer-Encoding: base64
 
 LyoJJE5ldEJTRCQJKi8KLyoJJE9wZW5CU0Q6IHN0cnRvbnVtLmMsdiAxLjYgMjAwNC8wOC8wMyAx
 OTozODowMSBtaWxsZXJ0IEV4cCAkCSovCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGVkIFVu
 YW5nc3QgYW5kIFRvZGQgTWlsbGVyCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFBlcm1p
 c3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUg
 Zm9yIGFueQogKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQs
 IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy
 bWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJ
 UyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF
 UwogKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX
 QVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg
 U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCiAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElO
 RElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKICogV0hBVFNP
 RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS
 IElOIEFOCiAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9V
 UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNF
 IE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqLwoKI2luY2x1ZGUgPGVycm5vLmg+
 CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2luY2x1ZGUgImNvbW1v
 bi5oIgoKI2RlZmluZSBJTlZBTElEICAgICAgICAgMQojZGVmaW5lIFRPT1NNQUxMICAgICAgICAy
 CiNkZWZpbmUgVE9PTEFSR0UgICAgICAgIDMKCmxvbmcgbG9uZwpzdHJ0b251bShjb25zdCBjaGFy
 ICpudW1zdHIsIGxvbmcgbG9uZyBtaW52YWwsIGxvbmcgbG9uZyBtYXh2YWwsCiAgICBjb25zdCBj
 aGFyICoqZXJyc3RycCkKewoJbG9uZyBsb25nIGxsID0gMDsKCWNoYXIgKmVwOwoJaW50IGVycm9y
 ID0gMDsKCXN0cnVjdCBlcnJ2YWwgewoJCWNvbnN0IGNoYXIgKmVycnN0cjsKCQlpbnQgZXJyOwoJ
 fSBldls0XSA9IHsKCQl7IE5VTEwsCQkwIH0sCgkJeyAiaW52YWxpZCIsCUVJTlZBTCB9LAoJCXsg
 InRvbyBzbWFsbCIsCUVSQU5HRSB9LAoJCXsgInRvbyBsYXJnZSIsCUVSQU5HRSB9LAoJfTsKCgll
 dlswXS5lcnIgPSBlcnJubzsKCWVycm5vID0gMDsKCWlmIChtaW52YWwgPiBtYXh2YWwpCgkJZXJy
 b3IgPSBJTlZBTElEOwoJZWxzZSB7CgkJbGwgPSBzdHJ0b2xsKG51bXN0ciwgJmVwLCAxMCk7CgkJ
 aWYgKG51bXN0ciA9PSBlcCB8fCAqZXAgIT0gJ1wwJykKCQkJZXJyb3IgPSBJTlZBTElEOwoJCWVs
 c2UgaWYgKChsbCA9PSBMTE9OR19NSU4gJiYgZXJybm8gPT0gRVJBTkdFKSB8fCBsbCA8IG1pbnZh
 bCkKCQkJZXJyb3IgPSBUT09TTUFMTDsKCQllbHNlIGlmICgobGwgPT0gTExPTkdfTUFYICYmIGVy
 cm5vID09IEVSQU5HRSkgfHwgbGwgPiBtYXh2YWwpCgkJCWVycm9yID0gVE9PTEFSR0U7Cgl9Cglp
 ZiAoZXJyc3RycCAhPSBOVUxMKQoJCSplcnJzdHJwID0gZXZbZXJyb3JdLmVycnN0cjsKCWVycm5v
 ID0gZXZbZXJyb3JdLmVycjsKCWlmIChlcnJvcikKCQlsbCA9IDA7CgoJcmV0dXJuIChsbCk7Cn0K
 
 --Multipart=_Tue__26_Sep_2006_22_32_49_+0300_=.MdwrCqjI86_f0g--