[Radiance-general] rholo restart stalls with "bad magic number"

Peter Apian-Bennewitz [email protected]
Sun, 19 Oct 2003 08:41:53 +0200


This is a multi-part message in MIME format.
--------------020606090706070300020809
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Dear folks,

FYI: rholo (HEAD version as of today, 19.10.03) on Linux (tested on slackware and Debian 'sarge') screws writing holodeck files.
It works if holofile.c and rholo.c include

        #include <sys/types.h>
        #include <unistd.h>

as suggested by the lseek man page

note 2 (mostly for developpers): POSIX lseeks seem to favor macros for the lseek 'whence' parameter: lseek man page says:

       When converting old code, substitute values for whence with the following macros:
         old       new
        0        SEEK_SET
        1        SEEK_CUR
        2        SEEK_END
        L_SET    SEEK_SET
        L_INCR   SEEK_CUR
        L_XTND   SEEK_END

at least that keeps me going for now

I'm posting this to the general list to keep potential users updated, the cross-post to the dev list is indended for follow ups.

-Peter

PS: yet another good reason for a test suite

-- 
  pab-opto, Freiburg, Germany, www.pab-opto.de



--------------020606090706070300020809
Content-Type: text/plain;
 name="rholo.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="rholo.c"

I2lmbmRlZiBsaW50CnN0YXRpYyBjb25zdCBjaGFyCVJDU2lkW10gPSAiJElkOiByaG9sby5j
LHYgMy42MCAyMDAzLzA3LzI3IDIyOjEyOjAyIHNjaG9yc2NoIEV4cCAkIjsKI2VuZGlmCi8q
CiAqIFJhZGlhbmNlIGhvbG9kZWNrIGdlbmVyYXRpb24gY29udHJvbGxlcgogKi8KCiNpbmNs
dWRlIDxzaWduYWwuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxzdHJpbmcu
aD4KCiNpbmNsdWRlICJyaG9sby5oIgojaW5jbHVkZSAicmFuZG9tLmgiCgojaWZuZGVmIEZS
QUdXQVJOCiNkZWZpbmUgRlJBR1dBUk4JMjAJCS8qIGZyYWdtZW50YXRpb24gZm9yIHdhcm5p
bmcgKCUpICovCiNlbmRpZgojaWZuZGVmIE1BWFFUSU1FCiNkZWZpbmUgTUFYUVRJTUUJNQkJ
LyogdGFyZ2V0IG1heGltdW0gc2Vjb25kcyBpbiBxdWV1ZSAqLwojZW5kaWYKCQkJCQkvKiBt
YW51YWwgY2FjaGUgZmx1c2hpbmcgZnJlcXVlbmN5ICovCiNpZm5kZWYgUlRGTFVTSAojaWYg
TUFYUVRJTUUKI2RlZmluZSBSVEZMVVNICQkoMzAwL01BWFFUSU1FKnRvdHFsZW4pCS8qIDw9
IDUgbWludXRlcyAqLwojZWxzZQojZGVmaW5lIFJURkxVU0gJCSg1MCp0b3RxbGVuKQkJLyog
anVzdCBndWVzcyAqLwojZW5kaWYKI2VuZGlmCgkJCS8qIHRoZSBmb2xsb3dpbmcgbXVzdCBi
ZSBjb25zaXN0ZW50IHdpdGggcmhvbG8uaCAqLwppbnQJTlZBUlMgPSBOUkhWQVJTOwkJLyog
dG90YWwgbnVtYmVyIG9mIHZhcmlhYmxlcyAqLwoKVkFSSUFCTEUJdnZbXSA9IFJIVklOSVQ7
CQkvKiB2YXJpYWJsZS12YWx1ZSBwYWlycyAqLwoKY2hhcgkqcHJvZ25hbWU7CQkvKiBvdXIg
cHJvZ3JhbSBuYW1lICovCmNoYXIJKmhka2ZpbGU7CQkvKiBob2xvZGVjayBmaWxlIG5hbWUg
Ki8KY2hhcglmcm9vdFsyNTZdOwkJLyogcm9vdCBmaWxlIG5hbWUgKi8KCmludAluY3Byb2Nz
ID0gMDsJCS8qIGRlc2lyZWQgbnVtYmVyIG9mIGNvbXB1dGUgcHJvY2Vzc2VzICovCgpjaGFy
CSpvdXRkZXYgPSBOVUxMOwkJLyogb3V0cHV0IGRldmljZSBuYW1lICovCgppbnQJcmVhZGlu
cCA9IDA7CQkvKiByZWFkIGNvbW1hbmRzIGZyb20gc3RkaW4gKi8KCmludAlmb3JjZSA9IDA7
CQkvKiBhbGxvdyBvdmVyd3JpdGUgb2YgaG9sb2RlY2sgKC0xID09IHJlYWQtb25seSkgKi8K
CnRpbWVfdAlzdGFydHRpbWU7CQkvKiB0aW1lIHdlIGdvdCBzdGFydGVkICovCnRpbWVfdAll
bmR0aW1lOwkJLyogdGltZSB3ZSBzaG91bGQgZW5kIGJ5ICovCnRpbWVfdAlyZXBvcnR0aW1l
OwkJLyogdGltZSBmb3IgbmV4dCByZXBvcnQgKi8KCm9mZl90CW1heGRpc2s7CQkvKiBtYXhp
bXVtIGZpbGUgc3BhY2UgKGJ5dGVzKSAqLwoKaW50CXJ0YXJnYyA9IDE7CQkvKiBydHJhY2Ug
Y29tbWFuZCAqLwpjaGFyCSpydGFyZ3ZbMTI4XSA9IHsicnRyYWNlIiwgTlVMTH07CgppbnQJ
b3JpZ19tb2RlID0gLTE7CQkvKiBvcmlnaW5hbCBmaWxlIG1vZGUgKC0xIGlmIHVuY2hhbmdl
ZCkgKi8KCmxvbmcJbnJheXNkb25lID0gMEw7CQkvKiBudW1iZXIgb2YgcmF5cyBkb25lICov
CmxvbmcJbnBhY2tzZG9uZSA9IDBMOwkvKiBudW1iZXIgb2YgcGFja2V0cyBkb25lICovCgpQ
QUNLRVQJKmZyZWVwYWNrczsJCS8qIGF2YWlsYWJsZSBwYWNrZXRzICovCmludAl0b3RxbGVu
OwkJLyogbWF4aW11bSBxdWV1ZSBsZW5ndGggKG51bWJlciBvZiBwYWNrZXRzKSAqLwoKY2hh
ciAgKnNpZ2VycltOU0lHXTsJCS8qIHNpZ25hbCBlcnJvciBtZXNzYWdlcyAqLwoKZXh0ZXJu
IGludAlub3dhcm47CQkvKiB0dXJuIHdhcm5pbmdzIG9mZj8gKi8KCmV4dGVybiB0aW1lX3QJ
dGltZSgpOwoKCm1haW4oYXJnYywgYXJndikKaW50CWFyZ2M7CmNoYXIJKmFyZ3ZbXTsKewoJ
aW50CWk7CgoJaW5pdHVyYW5kKDE2Mzg0KTsJCQkvKiBpbml0aWFsaXplIHVyYW5kICovCglw
cm9nbmFtZSA9IGFyZ3ZbMF07CQkJLyogZ2V0IGFyZ3VtZW50cyAqLwoJZm9yIChpID0gMTsg
aSA8IGFyZ2MgJiYgYXJndltpXVswXSA9PSAnLSc7IGkrKykKCQlzd2l0Y2ggKGFyZ3ZbaV1b
MV0pIHsKCQljYXNlICd3JzoJCQkvKiB0dXJuIG9mZiB3YXJuaW5ncyAqLwoJCQlub3dhcm4r
KzsKCQkJYnJlYWs7CgkJY2FzZSAnZic6CQkJLyogZm9yY2Ugb3ZlcndyaXRlICovCgkJCWZv
cmNlID0gMTsKCQkJYnJlYWs7CgkJY2FzZSAncic6CQkJLyogcmVhZC1vbmx5IG1vZGUgKi8K
CQkJZm9yY2UgPSAtMTsKCQkJYnJlYWs7CgkJY2FzZSAnaSc6CQkJLyogcmVhZCBpbnB1dCBm
cm9tIHN0ZGluICovCgkJCXJlYWRpbnArKzsKCQkJYnJlYWs7CgkJY2FzZSAnbic6CQkJLyog
Y29tcHV0ZSBwcm9jZXNzZXMgKi8KCQkJaWYgKGkgPj0gYXJnYy0yKQoJCQkJZ290byB1c2Vy
cjsKCQkJbmNwcm9jcyA9IGF0b2koYXJndlsrK2ldKTsKCQkJYnJlYWs7CgkJY2FzZSAnbyc6
CQkJLyogb3V0cHV0IGRpc3BsYXkgKi8KCQkJaWYgKGkgPj0gYXJnYy0yKQoJCQkJZ290byB1
c2VycjsKCQkJb3V0ZGV2ID0gYXJndlsrK2ldOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQln
b3RvIHVzZXJyOwoJCX0KCQkJCQkJLyogZ2V0IHJvb3QgZmlsZSBuYW1lICovCglpZiAoaSA+
PSBhcmdjKQoJCWdvdG8gdXNlcnI7Cglyb290bmFtZShmcm9vdCwgaGRrZmlsZT1hcmd2W2kr
K10pOwoJCQkJCQkvKiBsb2FkIHZhcmlhYmxlcz8gKi8KCWlmIChpIDwgYXJnYykKCQlpZiAo
YXJndltpXVswXSAhPSAnLScgJiYgYXJndltpXVswXSAhPSAnKycpCgkJCWxvYWR2YXJzKGFy
Z3ZbaV0pOwkvKiBsb2FkIHZhcmlhYmxlcyBmcm9tIGZpbGUgKi8KCglpZiAoaSA+PSBhcmdj
IHx8IGFyZ3ZbaV1bMF0gPT0gJysnKQoJCWxvYWRob2xvKCk7CQkJLyogbG9hZCBleGlzdGlu
ZyBob2xvZGVjayAqLwoKCXdoaWxlICgrK2kgPCBhcmdjKQkJCS8qIGdldCBjb21tYW5kIGxp
bmUgc2V0dGluZ3MgKi8KCQlpZiAoc2V0dmFyaWFibGUoYXJndltpXSwgbWF0Y2h2YXIpIDwg
MCkgewoJCQlzcHJpbnRmKGVycm1zZywgInVua25vd24gdmFyaWFibGU6ICVzIiwgYXJndltp
XSk7CgkJCWVycm9yKFVTRVIsIGVycm1zZyk7CgkJfQoJCQkJCQkvKiBjaGVjayBzZXR0aW5n
cyAqLwoJY2hlY2t2YWx1ZXMoKTsKCQkJCQkJLyogbG9hZCByYWQgaW5wdXQgZmlsZSAqLwoJ
Z2V0cmFkZmlsZSgpOwoKCWlmIChoZGxpc3RbMF0gPT0gTlVMTCkgewkJLyogY3JlYXRlIG5l
dyBob2xvZGVjayAqLwoJCUhER1JJRAloZGdbSERNQVhdOwoJCQkJCQkJLyogc2V0IGRlZmF1
bHRzICovCgkJc2V0ZGVmYXVsdHMoaGRnKTsKCQkJCQkJCS8qIGNoZWNrIHJlYWQtb25seSAq
LwoJCWlmIChmb3JjZSA8IDApCgkJCWVycm9yKFVTRVIsICJjYW5ub3QgY3JlYXRlIHJlYWQt
b25seSBob2xvZGVjayIpOwoJCQkJCQkJLyogaG9sb2RlY2sgZXhpc3RzPyAqLwoJCWlmICgh
Zm9yY2UgJiYgYWNjZXNzKGhka2ZpbGUsIFJfT0t8V19PSykgPT0gMCkKCQkJZXJyb3IoVVNF
UiwKCQkJCSJob2xvZGVjayBmaWxlIGV4aXN0cyAtLSB1c2UgLWYgdG8gb3ZlcndyaXRlIik7
CgkJCQkJCQkvKiBjcmVhdGUgaG9sb2RlY2sgKi8KCQljcmVhdGhvbG8oaGRnKTsKCX0gZWxz
ZQkJCQkJLyogZWxzZSBqdXN0IHNldCBkZWZhdWx0cyAqLwoJCXNldGRlZmF1bHRzKE5VTEwp
OwoJCQkJCQkvKiBpbml0aWFsaXplICovCglpbml0cmhvbG8oKTsKCQkJCQkJLyogbWFpbiBs
b29wICovCgl3aGlsZSAocmhvbG8oKSkKCQk7CgkJCQkJCS8qIGRvbmUgKi8KCXF1aXQoMCk7
CnVzZXJyOgoJZnByaW50ZihzdGRlcnIsCiJVc2FnZTogJXMgWy1uIG5wcm9jc11bLW8gZGlz
cF1bLXddWy1yfC1mXSBvdXRwdXQuaGRrIFtjb250cm9sLmhpZnwrfC0gW1ZBUj12YWwgLi5d
XVxuIiwKCQkJcHJvZ25hbWUpOwoJcXVpdCgxKTsKfQoKCnZvaWQKb25zaWcoc2lnbm8pCQkJ
CS8qIGZhdGFsIHNpZ25hbCAqLwppbnQgIHNpZ25vOwp7CglzdGF0aWMgaW50ICBnb3RzaWcg
PSAwOwoKCWlmIChnb3RzaWcgPiAxKQkJCS8qIHdlJ3JlIGdvaW5nIGFzIGZhc3QgYXMgd2Ug
Y2FuISAqLwoJCXJldHVybjsKCWlmIChnb3RzaWcrKykgewkJCS8qIHR3byBzaWduYWxzIGFu
ZCB3ZSBzcGxpdCAqLwoJCWhkc3luYyhOVUxMLCAwKTsJLyogZG9uJ3QgbGVhdmUgdy9vIHNh
eWluZyBnb29kYnllICovCgkJX2V4aXQoc2lnbm8pOwoJfQoJYWxhcm0oMzAwKTsJCQkvKiBh
bGxvdyA1IG1pbnV0ZXMgdG8gY2xlYW4gdXAgKi8KCWVwdXRzKCJzaWduYWwgLSAiKTsKCWVw
dXRzKHNpZ2VycltzaWdub10pOwoJZXB1dHMoIlxuIik7CglxdWl0KDMpOwp9CgoKc2lnZGll
KHNpZ25vLCBtc2cpCQkJLyogc2V0IGZhdGFsIHNpZ25hbCAqLwppbnQgIHNpZ25vOwpjaGFy
ICAqbXNnOwp7CglpZiAoc2lnbmFsKHNpZ25vLCBvbnNpZykgPT0gU0lHX0lHTikKCQlzaWdu
YWwoc2lnbm8sIFNJR19JR04pOwoJc2lnZXJyW3NpZ25vXSA9IG1zZzsKfQoKCmludApyZXNm
bW9kZShmZCwgbW9kKQkJLyogcmVzdHJpY3Qgb3BlbiBmaWxlIGFjY2VzcyBtb2RlICovCmlu
dAlmZCwgbW9kOwp7CglzdHJ1Y3Qgc3RhdAlzdGJ1ZjsKCQkJCQkvKiBnZXQgb3JpZ2luYWwg
bW9kZSAqLwoJaWYgKGZzdGF0KGZkLCAmc3RidWYpIDwgMCkKCQllcnJvcihTWVNURU0sICJj
YW5ub3Qgc3RhdCBvcGVuIGhvbG9kZWNrIGZpbGUiKTsKCW1vZCAmPSBzdGJ1Zi5zdF9tb2Rl
OwkJLyogYWx3YXlzIG1vcmUgcmVzdHJpY3RpdmUgKi8KCWlmIChtb2QgPT0gKHN0YnVmLnN0
X21vZGUgJiAwNzc3KSkKCQlyZXR1cm4oLTEpOwkJLyogYWxyZWFkeSBzZXQgKi8KCQkJCQkv
KiBlbHNlIGNoYW5nZSBpdCAqLwoJaWYgKGZjaG1vZChmZCwgbW9kKSA8IDApIHsKCQllcnJv
cihXQVJOSU5HLCAiY2Fubm90IGNoYW5nZSBob2xvZGVjayBmaWxlIGFjY2VzcyBtb2RlIik7
CgkJcmV0dXJuKC0xKTsKCX0KCXJldHVybihzdGJ1Zi5zdF9tb2RlKTsJCS8qIHJldHVybiBv
cmlnaW5hbCBtb2RlICovCn0KCgppbml0cmhvbG8oKQkJCS8qIGdldCBvdXIgaG9sb2RlY2sg
cnVubmluZyAqLwp7CglleHRlcm4gaW50CWdsb2JhbF9wYWNrZXQoKTsKCXJlZ2lzdGVyIGlu
dAlpOwoJCQkJCQkvKiBjbG9zZSBob2xvZGVjayBvbiBleGVjKCkgKi8KCWZjbnRsKGhkbGlz
dFswXS0+ZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOwoKCWlmIChvdXRkZXYgIT0gTlVMTCkJ
CQkvKiBvcGVuIG91dHB1dCBkZXZpY2UgKi8KCQlkaXNwX29wZW4ob3V0ZGV2KTsKCWVsc2Ug
aWYgKG5jcHJvY3MgPiAwKQkJCS8qIGVsc2UgdXNlIGdsb2JhbCByYXkgZmVlZCAqLwoJCWlu
aXRfZ2xvYmFsKCk7CgkJCQkJCS8qIHJlY29yZCBkaXNrIHNwYWNlIGxpbWl0ICovCglpZiAo
IXZkZWYoRElTS1NQQUNFKSkKCQltYXhkaXNrID0gKChvZmZfdCkxPDwoc2l6ZW9mKG9mZl90
KSo4LTIpKSAtIDEwMjQ7CgllbHNlCgkJbWF4ZGlzayA9IDEwMjQuKjEwMjQuKnZmbHQoRElT
S1NQQUNFKTsKCQkJCQkJLyogc2V0IHVwIG1lbW9yeSBjYWNoZSAqLwoJaWYgKG91dGRldiA9
PSBOVUxMKQoJCWhkY2FjaGVzaXplID0gMDsJCS8qIG1hbnVhbCBmbHVzaGluZyAqLwoJZWxz
ZSBpZiAodmRlZihDQUNIRSkpCgkJaGRjYWNoZXNpemUgPSAxMDI0LioxMDI0Lip2Zmx0KENB
Q0hFKTsKCQkJCQkJLyogb3BlbiByZXBvcnQgZmlsZSAqLwoJaWYgKHZkZWYoUkVQT1JUKSkg
ewoJCXJlZ2lzdGVyIGNoYXIJKnMgPSBzc2tpcDIodnZhbChSRVBPUlQpLCAxKTsKCQlpZiAo
KnMgJiYgZnJlb3BlbihzLCAiYSIsIHN0ZGVycikgPT0gTlVMTCkKCQkJcXVpdCgyKTsKCX0K
CQkJCQkJLyogbWFyayB0aGUgc3RhcnRpbmcgdGltZSAqLwoJc3RhcnR0aW1lID0gdGltZShO
VUxMKTsKCQkJCQkJLyogY29tcHV0ZSBlbmQgdGltZSAqLwoJaWYgKCF2ZGVmKFRJTUUpIHx8
IHZmbHQoVElNRSkgPD0gRlRJTlkpCgkJZW5kdGltZSA9IDA7CgllbHNlCgkJZW5kdGltZSA9
IHN0YXJ0dGltZSArIHZmbHQoVElNRSkqMzYwMC4gKyAuNTsKCQkJCQkJLyogc3RhcnQgcnRy
YWNlICovCglpZiAobmNwcm9jcyA+IDApIHsKCQl0b3RxbGVuID0gaSA9IHN0YXJ0X3J0cmFj
ZSgpOwoJCWlmIChpIDwgMSkKCQkJZXJyb3IoVVNFUiwgImNhbm5vdCBzdGFydCBydHJhY2Ug
cHJvY2VzcyhlcykiKTsKCQlpZiAodmRlZihSRVBPUlQpKSB7CQkvKiBtYWtlIGZpcnN0IHJl
cG9ydCAqLwoJCQlwcmludGFyZ3MocnRhcmdjLCBydGFyZ3YsIHN0ZGVycik7CgkJCXJlcG9y
dCgwKTsKCQl9CgkJCQkJCS8qIGFsbG9jYXRlIHBhY2tldHMgKi8KCQlmcmVlcGFja3MgPSAo
UEFDS0VUICopYm1hbGxvYyhpKnNpemVvZihQQUNLRVQpKTsKCQlpZiAoZnJlZXBhY2tzID09
IE5VTEwpCgkJCWdvdG8gbWVtZXJyOwoJCWZyZWVwYWNrc1stLWldLm5yID0gMDsKCQlmcmVl
cGFja3NbaV0ubmV4dCA9IE5VTEw7CgkJaWYgKCF2ZGVmKE9CU1RSVUNUSU9OUykgfHwgIXZi
b29sKE9CU1RSVUNUSU9OUykpIHsKCQkJZnJlZXBhY2tzW2ldLm9mZnNldCA9IChmbG9hdCAq
KWJtYWxsb2MoCgkJCQkJUlBBQ0tTSVoqc2l6ZW9mKGZsb2F0KSooaSsxKSApOwoJCQlpZiAo
ZnJlZXBhY2tzW2ldLm9mZnNldCA9PSBOVUxMKQoJCQkJZ290byBtZW1lcnI7CgkJfSBlbHNl
CgkJCWZyZWVwYWNrc1tpXS5vZmZzZXQgPSBOVUxMOwoJCXdoaWxlIChpLS0pIHsKCQkJZnJl
ZXBhY2tzW2ldLm5yID0gMDsKCQkJZnJlZXBhY2tzW2ldLm9mZnNldCA9IGZyZWVwYWNrc1tp
KzFdLm9mZnNldCA9PSBOVUxMID8KCQkJCQlOVUxMIDogZnJlZXBhY2tzW2krMV0ub2Zmc2V0
K1JQQUNLU0laIDsKCQkJZnJlZXBhY2tzW2ldLm5leHQgPSAmZnJlZXBhY2tzW2krMV07CgkJ
fQoJfQoJCQkJCS8qIHNldCB1cCBzaWduYWwgaGFuZGxpbmcgKi8KCXNpZ2RpZShTSUdJTlQs
ICJJbnRlcnJ1cHQiKTsKCXNpZ2RpZShTSUdIVVAsICJIYW5ndXAiKTsKCXNpZ2RpZShTSUdU
RVJNLCAiVGVybWluYXRlIik7CglzaWdkaWUoU0lHUElQRSwgIkJyb2tlbiBwaXBlIik7Cglz
aWdkaWUoU0lHQUxSTSwgIkFsYXJtIGNsb2NrIik7CiNpZmRlZglTSUdYQ1BVCglzaWdkaWUo
U0lHWENQVSwgIkNQVSBsaW1pdCBleGNlZWRlZCIpOwoJc2lnZGllKFNJR1hGU1osICJGaWxl
IHNpemUgZXhjZWVkZWQiKTsKI2VuZGlmCgkJCQkJLyogcHJvdGVjdCBob2xvZGVjayBmaWxl
ICovCglvcmlnX21vZGUgPSByZXNmbW9kZShoZGxpc3RbMF0tPmZkLCAobmNwcm9jcz4wKSAm
IChmb3JjZT49MCkgPyAwIDogMDQ0NCk7CglyZXR1cm47Cm1lbWVycjoKCWVycm9yKFNZU1RF
TSwgIm91dCBvZiBtZW1vcnkgaW4gaW5pdHJob2xvIik7Cn0KCgpyaG9sbygpCQkJCS8qIGhv
bG9kZWNrIG1haW4gbG9vcCAqLwp7CglzdGF0aWMgbG9uZwluZXh0ZnJhZ3dhcm4gPSAxMDAq
KDFMPDwyMCk7CglzdGF0aWMgaW50CWlkbGUgPSAwOwoJUEFDS0VUCSpwbCA9IE5VTEwsICpw
bGVuZDsKCW9mZl90CWZzaXo7CglpbnQJcGtzaXo7CglyZWdpc3RlciBQQUNLRVQJKnA7Cgl0
aW1lX3QJdDsKCQkJCQkvKiBjaGVjayBkaXNwbGF5ICovCglpZiAobnByb2NzIDw9IDApCgkJ
aWRsZSA9IDE7CglpZiAob3V0ZGV2ICE9IE5VTEwpIHsKCQlpZiAoIWRpc3BfY2hlY2soaWRs
ZSkpCgkJCXJldHVybigwKTsJLyogcXVpdCByZXF1ZXN0ICovCgkJaWYgKG5wcm9jcyA8PSAw
KQoJCQlyZXR1cm4oMSk7Cgl9IGVsc2UgaWYgKGlkbGUpCgkJcmV0dXJuKDApOwkJLyogYWxs
IGRvbmUgKi8KCWZzaXogPSBoZGZpbGVuKGhkbGlzdFswXS0+ZmQpOwkvKiBjaGVjayBmaWxl
IHNpemUgKi8KCWlmIChtYXhkaXNrID4gMCAmJiBmc2l6ID49IG1heGRpc2spIHsKCQllcnJv
cihXQVJOSU5HLCAiZmlsZSBsaW1pdCBleGNlZWRlZCIpOwoJCWRvbmVfcnRyYWNlKCk7CgkJ
cmV0dXJuKDEpOwkvKiBjb21lcyBiYWNrICovCgl9CiNpZiBGUkFHV0FSTgoJaWYgKGZzaXog
Pj0gbmV4dGZyYWd3YXJuICYmCgkJKGZzaXotaGRmaWx1c2UoaGRsaXN0WzBdLT5mZCwwKSkv
KGZzaXovMTAwKSA+IEZSQUdXQVJOKSB7CgkJc3ByaW50ZihlcnJtc2csICJob2xvZGVjayBm
aWxlIGZyYWdtZW50YXRpb24gaXMgJS4wZiUlIiwKCQkJCTEwMC4qKGZzaXotaGRmaWx1c2Uo
aGRsaXN0WzBdLT5mZCwxKSkvZnNpeik7CgkJZXJyb3IoV0FSTklORywgZXJybXNnKTsKCQlu
ZXh0ZnJhZ3dhcm4gPSBmc2l6ICsgKGZzaXo+PjIpOwkvKiBkZWNlbnQgaW50ZXJ2YWwgKi8K
CX0KI2VuZGlmCgl0ID0gdGltZShOVUxMKTsJCQkvKiBjaGVjayB0aW1lICovCglpZiAoZW5k
dGltZSA+IDAgJiYgdCA+PSBlbmR0aW1lKSB7CgkJZXJyb3IoV0FSTklORywgInRpbWUgbGlt
aXQgZXhjZWVkZWQiKTsKCQlkb25lX3J0cmFjZSgpOwoJCXJldHVybigxKTsJLyogY29tZXMg
YmFjayAqLwoJfQoJaWYgKHJlcG9ydHRpbWUgPiAwICYmIHQgPj0gcmVwb3J0dGltZSkKCQly
ZXBvcnQodCk7CgkJCQkJLyogZmlndXJlIG91dCBnb29kIHBhY2tldCBzaXplICovCglwa3Np
eiA9IFJQQUNLU0laOwojaWYgTUFYUVRJTUUKCWlmICghY2h1bmt5Y21wKSB7CgkJcGtzaXog
PSBucmF5c2RvbmUqTUFYUVRJTUUvKHRvdHFsZW4qKHQgLSBzdGFydHRpbWUgKyAxTCkpOwoJ
CWlmIChwa3NpeiA8IDEpIHBrc2l6ID0gMTsKCQllbHNlIGlmIChwa3NpeiA+IFJQQUNLU0la
KSBwa3NpeiA9IFJQQUNLU0laOwoJfQojZW5kaWYKCWlkbGUgPSAwOwkJCS8qIGdldCBwYWNr
ZXRzIHRvIHByb2Nlc3MgKi8KCXdoaWxlIChmcmVlcGFja3MgIT0gTlVMTCkgewoJCXAgPSBm
cmVlcGFja3M7IGZyZWVwYWNrcyA9IHAtPm5leHQ7IHAtPm5leHQgPSBOVUxMOwoJCWlmICgh
bmV4dF9wYWNrZXQocCwgcGtzaXopKSB7CgkJCXAtPm5leHQgPSBmcmVlcGFja3M7IGZyZWVw
YWNrcyA9IHA7CgkJCWlkbGUgPSAxOwoJCQlicmVhazsKCQl9CgkJaWYgKHBsID09IE5VTEwp
IHBsID0gcDsKCQllbHNlIHBsZW5kLT5uZXh0ID0gcDsKCQlwbGVuZCA9IHA7Cgl9CgkJCQkJ
LyogcHJvY2VzcyBwYWNrZXRzICovCglkb25lX3BhY2tldHMoZG9fcGFja2V0cyhwbCkpOwoJ
cmV0dXJuKDEpOwkJCS8qIGFuZCBjb250aW51ZSAqLwp9CgoKc2V0ZGVmYXVsdHMoZ3ApCQkJ
Lyogc2V0IGRlZmF1bHQgdmFsdWVzICovCnJlZ2lzdGVyIEhER1JJRAkqZ3A7CnsKCWV4dGVy
biBjaGFyCSphdG9zKCk7CglyZWdpc3RlciBpbnQJaTsKCWludAluOwoJZG91YmxlCWxlblsz
XSwgZDsKCWNoYXIJYnVmWzY0XTsKCglpZiAoIXZkZWYoU0VDVElPTikpIHsKCQlzcHJpbnRm
KGVycm1zZywgIiVzIG11c3QgYmUgZGVmaW5lZCIsIHZuYW0oU0VDVElPTikpOwoJCWVycm9y
KFVTRVIsIGVycm1zZyk7Cgl9CglpZiAoIXZkZWYoT0NUUkVFKSkgewoJCWlmICgodnZhbChP
Q1RSRUUpID0gYm1hbGxvYyhzdHJsZW4oZnJvb3QpKzUpKSA9PSBOVUxMKQoJCQllcnJvcihT
WVNURU0sICJvdXQgb2YgbWVtb3J5Iik7CgkJc3ByaW50Zih2dmFsKE9DVFJFRSksICIlcy5v
Y3QiLCBmcm9vdCk7CgkJdmRlZihPQ1RSRUUpKys7Cgl9CglpZiAoIXZkZWYoVkRJU1QpKSB7
CgkJdnZhbChWRElTVCkgPSAiRiI7CgkJdmRlZihWRElTVCkrKzsKCX0KCQkJCS8qIGFwcGVu
ZCByZW5kZXJpbmcgb3B0aW9ucyAqLwoJaWYgKHZkZWYoUkVOREVSKSkKCQlydGFyZ2MgKz0g
d29yZHN0cmluZyhydGFyZ3YrcnRhcmdjLCB2dmFsKFJFTkRFUikpOwoJCglpZiAoZ3AgPT0g
TlVMTCkJCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQ/ICovCgkJcmV0dXJuOwoJCQkJLyogc2V0
IGdyaWQgcGFyYW1ldGVycyAqLwoJZm9yIChuID0gMDsgbiA8IHZkZWYoU0VDVElPTik7IG4r
KywgZ3ArKykgewoJCWdwLT5ncmlkWzBdID0gZ3AtPmdyaWRbMV0gPSBncC0+Z3JpZFsyXSA9
IDA7CgkJaWYgKHNzY2FuZihudmFsdWUoU0VDVElPTiwgbiksCgkJIiVsZiAlbGYgJWxmICVs
ZiAlbGYgJWxmICVsZiAlbGYgJWxmICVsZiAlbGYgJWxmICVoZCAlaGQgJWhkIiwKCQkJCSZn
cC0+b3JpZ1swXSwgJmdwLT5vcmlnWzFdLCAmZ3AtPm9yaWdbMl0sCgkJCQkmZ3AtPnh2WzBd
WzBdLCAmZ3AtPnh2WzBdWzFdLCAmZ3AtPnh2WzBdWzJdLAoJCQkJJmdwLT54dlsxXVswXSwg
JmdwLT54dlsxXVsxXSwgJmdwLT54dlsxXVsyXSwKCQkJCSZncC0+eHZbMl1bMF0sICZncC0+
eHZbMl1bMV0sICZncC0+eHZbMl1bMl0sCgkJCQkmZ3AtPmdyaWRbMF0sICZncC0+Z3JpZFsx
XSwgJmdwLT5ncmlkWzJdKSA8IDEyKQoJCQliYWR2YWx1ZShTRUNUSU9OKTsKCQlmb3IgKGkg
PSAwOyBpIDwgMzsgaSsrKQoJCQlsZW5baV0gPSBWTEVOKGdwLT54dltpXSk7CgkJaWYgKCF2
ZGVmKEdSSUQpKSB7CgkJCWQgPSAyLzJlNSooIGxlblswXSpsZW5bMF0qKGxlblsxXSpsZW5b
MV0gKwoJCQkJCWxlblsyXSpsZW5bMl0gKyA0KmxlblsxXSpsZW5bMl0pCgkJCQkrIGxlblsx
XSpsZW5bMV0qbGVuWzJdKihsZW5bMl0gKyA0KmxlblswXSkKCQkJCSsgNCpsZW5bMF0qbGVu
WzFdKmxlblsyXSpsZW5bMl0gKTsKCQkJZCA9IHNxcnQoc3FydChkKSk7CgkJfSBlbHNlIGlm
ICgoZCA9IHZmbHQoR1JJRCkpIDw9IEZUSU5ZKQoJCQliYWR2YWx1ZShHUklEKTsKCQlmb3Ig
KGkgPSAwOyBpIDwgMzsgaSsrKQoJCQlpZiAoZ3AtPmdyaWRbaV0gPD0gMCkKCQkJCWdwLT5n
cmlkW2ldID0gbGVuW2ldL2QgKyAoMS4tRlRJTlkpOwoJfQp9CgoKY3JlYXRob2xvKGdwKQkJ
CS8qIGNyZWF0ZSBhIGhvbG9kZWNrIG91dHB1dCBmaWxlICovCkhER1JJRAkqZ3A7CnsKCWV4
dGVybiBjaGFyCVZlcnNpb25JRFtdOwoJaW50MzIJbGFzdGxvYywgbmV4dGxvYzsKCWludAlu
OwoJaW50CWZkOwoJRklMRQkqZnA7CgkJCQkJLyogb3BlbiAmIHRydW5jYXRlIGZpbGUgKi8K
CWlmICgoZnAgPSBmb3BlbihoZGtmaWxlLCAidysiKSkgPT0gTlVMTCkgewoJCXNwcmludGYo
ZXJybXNnLCAiY2Fubm90IG9wZW4gXCIlc1wiIGZvciB3cml0aW5nIiwgaGRrZmlsZSk7CgkJ
ZXJyb3IoU1lTVEVNLCBlcnJtc2cpOwoJfQoJCQkJCS8qIHdyaXRlIGluZm9ybWF0aW9uIGhl
YWRlciAqLwoJbmV3aGVhZGVyKCJSQURJQU5DRSIsIGZwKTsKCWZwcmludGYoZnAsICJTT0ZU
V0FSRT0gJXNcbiIsIFZlcnNpb25JRCk7CglwcmludHZhcnMoZnApOwoJZnB1dGZvcm1hdChI
T0xPRk1ULCBmcCk7CglmcHV0YygnXG4nLCBmcCk7CglwdXR3KEhPTE9NQUdJQywgZnApOwkJ
LyogcHV0IG1hZ2ljIG51bWJlciAqLwoJaWYoIChmZCA9IGR1cChmaWxlbm8oZnApKSkgPCAw
ICkgewoJCXNwcmludGYoZXJybXNnLCAiY2Fubm90IGR1cCBcIiVzXCIgZm9yIHdyaXRpbmci
LCBoZGtmaWxlKTsKCQllcnJvcihTWVNURU0sIGVycm1zZyk7Cgl9CglpZiggRU9GPT1mY2xv
c2UoZnApICkgewkJLyogZmx1c2ggYW5kIGNsb3NlIHN0ZGlvIHN0cmVhbSAqLwoJCXNwcmlu
dGYoZXJybXNnLCAiY2Fubm90IGZjbG9zZSBcIiVzXCIgZm9yIHdyaXRpbmciLCBoZGtmaWxl
KTsKCQllcnJvcihTWVNURU0sIGVycm1zZyk7Cgl9CglpZiggKGxhc3Rsb2MgPSBsc2Vlayhm
ZCwgKG9mZl90KTAsIDIpKSA9PSAob2ZmX3QpLTEgKSB7CgkJc3ByaW50ZihlcnJtc2csICJj
YW5ub3QgbHNlZWsgXCIlc1wiIiwgaGRrZmlsZSk7CgkJZXJyb3IoU1lTVEVNLCBlcnJtc2cp
OwoJfQoJZm9yIChuID0gdmRlZihTRUNUSU9OKTsgbi0tOyBncCsrKSB7CS8qIGluaXRpYWxp
emUgZWFjaCBzZWN0aW9uICovCgkJbmV4dGxvYyA9IDBMOwoJCXdyaXRlKGZkLCAoY2hhciAq
KSZuZXh0bG9jLCBzaXplb2YobmV4dGxvYykpOwoJCWhkaW5pdChmZCwgZ3ApOwkJCS8qIHdy
aXRlcyBiZWFtIGluZGV4ICovCgkJaWYgKCFuKQoJCQlicmVhazsKCQluZXh0bG9jID0gaGRm
aWxlbihmZCk7CQkvKiB3cml0ZSBzZWN0aW9uIHBvaW50ZXIgKi8KCQlpZiAobHNlZWsoZmQs
IChvZmZfdClsYXN0bG9jLCAwKSA9PSAob2ZmX3QpLTEgKQoJCQllcnJvcihTWVNURU0sCgkJ
CQkiY2Fubm90IHNlZWsgb24gaG9sb2RlY2sgZmlsZSBpbiBjcmVhdGhvbG8iKTsKCQl3cml0
ZShmZCwgKGNoYXIgKikmbmV4dGxvYywgc2l6ZW9mKG5leHRsb2MpKTsKCQlsc2VlayhmZCwg
KG9mZl90KShsYXN0bG9jPW5leHRsb2MpLCAwKTsKCX0KfQoKCmludApoZWFkbGluZShzKQkJ
CS8qIHByb2Nlc3MgaW5mb3JtYXRpb24gaGVhZGVyIGxpbmUgKi8KY2hhcgkqczsKewoJZXh0
ZXJuIGNoYXIJRk1UU1RSW107CglyZWdpc3RlciBjaGFyCSpjcDsKCWNoYXIJZm10WzMyXTsK
CglpZiAoZm9ybWF0dmFsKGZtdCwgcykpIHsKCQlpZiAoc3RyY21wKGZtdCwgSE9MT0ZNVCkp
IHsKCQkJc3ByaW50ZihlcnJtc2csICIlcyBmaWxlIFwiJXNcIiBoYXMgJXMlcyIsCgkJCQkJ
SE9MT0ZNVCwgaGRrZmlsZSwgRk1UU1RSLCBmbXQpOwoJCQllcnJvcihVU0VSLCBlcnJtc2cp
OwoJCX0KCQlyZXR1cm4oMCk7Cgl9Cglmb3IgKGNwID0gczsgKmNwOyBjcCsrKQkJLyogdGFr
ZSBvZmYgYW55IGNvbW1lbnRzICovCgkJaWYgKCpjcCA9PSAnIycpIHsKCQkJKmNwID0gJ1ww
JzsKCQkJYnJlYWs7CgkJfQoJc2V0dmFyaWFibGUocywgbWF0Y2h2YXIpOwkvKiBkb24ndCBm
bGFnIGVycm9ycyAqLwoJcmV0dXJuKDApOwp9CgoKbG9hZGhvbG8oKQkJCS8qIHN0YXJ0IGxv
YWRpbmcgYSBob2xvZGVjayBmcm9tIGZuYW1lICovCnsKCUZJTEUJKmZwOwoJaW50CWZkOwoJ
aW50CW47CglpbnQzMgluZXh0bG9jOwoJCglpZiAoKG5jcHJvY3MgPiAwKSAmIChmb3JjZSA+
PSAwKSkKCQlmcCA9IGZvcGVuKGhka2ZpbGUsICJyKyIpOwoJZWxzZQoJCWZwID0gTlVMTDsK
CWlmIChmcCA9PSBOVUxMKSB7CgkJaWYgKChmcCA9IGZvcGVuKGhka2ZpbGUsICJyIikpID09
IE5VTEwpIHsKCQkJc3ByaW50ZihlcnJtc2csICJjYW5ub3Qgb3BlbiBcIiVzXCIiLCBoZGtm
aWxlKTsKCQkJZXJyb3IoU1lTVEVNLCBlcnJtc2cpOwoJCX0KCQlpZiAobmNwcm9jcyA+IDAp
IHsKCQkJc3ByaW50ZihlcnJtc2csCgkJCSJcIiVzXCIgb3BlbmVkIHJlYWQtb25seTsgbmV3
IHJheXMgd2lsbCBiZSBkaXNjYXJkZWQiLAoJCQkJCWhka2ZpbGUpOwoJCQllcnJvcihXQVJO
SU5HLCBlcnJtc2cpOwoJCQlmb3JjZSA9IC0xOwoJCX0KCX0KCQkJCQkvKiBsb2FkIHZhcmlh
YmxlcyBmcm9tIGhlYWRlciAqLwoJZ2V0aGVhZGVyKGZwLCBoZWFkbGluZSwgTlVMTCk7CgkJ
CQkJLyogY2hlY2sgbWFnaWMgbnVtYmVyICovCglpZiAoZ2V0dyhmcCkgIT0gSE9MT01BR0lD
KSB7CgkJc3ByaW50ZihlcnJtc2csICJiYWQgbWFnaWMgbnVtYmVyIGluIGhvbG9kZWNrIGZp
bGUgXCIlc1wiIiwKCQkJCWhka2ZpbGUpOwoJCWVycm9yKFVTRVIsIGVycm1zZyk7Cgl9Cglu
ZXh0bG9jID0gZnRlbGwoZnApOwkJCS8qIGdldCBzdGRpbyBwb3NpdGlvbiAqLwoJZmQgPSBk
dXAoZmlsZW5vKGZwKSk7CglmY2xvc2UoZnApOwkJCQkvKiBkb25lIHdpdGggc3RkaW8gKi8K
CWZvciAobiA9IDA7IG5leHRsb2MgPiAwTDsgbisrKSB7CS8qIGluaXRpYWxpemUgZWFjaCBz
ZWN0aW9uICovCgkJbHNlZWsoZmQsIChvZmZfdCluZXh0bG9jLCAwKTsKCQlyZWFkKGZkLCAo
Y2hhciAqKSZuZXh0bG9jLCBzaXplb2YobmV4dGxvYykpOwoJCWhkaW5pdChmZCwgTlVMTCk7
Cgl9CglpZiAobiAhPSB2ZGVmKFNFQ1RJT04pKSB7CgkJc3ByaW50ZihlcnJtc2csICJudW1i
ZXIgb2Ygc2VjdGlvbnMgZG9lcyBub3QgbWF0Y2ggJXMgc2V0dGluZyIsCgkJCQl2bmFtKFNF
Q1RJT04pKTsKCQllcnJvcihXQVJOSU5HLCBlcnJtc2cpOwoJfQp9CgoKZG9uZV9wYWNrZXRz
KHBsKQkJLyogaGFuZGxlIGZpbmlzaGVkIHBhY2tldHMgKi8KUEFDS0VUCSpwbDsKewoJc3Rh
dGljIGludAluMmZsdXNoID0gMDsKCXJlZ2lzdGVyIFBBQ0tFVAkqcDsKCgl3aGlsZSAocGwg
IT0gTlVMTCkgewoJCXAgPSBwbDsgcGwgPSBwLT5uZXh0OyBwLT5uZXh0ID0gTlVMTDsKCQlp
ZiAocC0+bnIgPiAwKSB7CQkvKiBhZGQgdG8gaG9sb2RlY2sgKi8KCQkJbWVtY3B5KCAodm9p
ZCAqKWhkbmV3cmF5cyhoZGxpc3RbcC0+aGRdLHAtPmJpLHAtPm5yKSwKCQkJCSh2b2lkICop
cC0+cmEsCgkJCQlwLT5ucipzaXplb2YoUkFZVkFMKSk7CgkJCWlmIChvdXRkZXYgIT0gTlVM
TCkJLyogZGlzcGxheSBpdCAqLwoJCQkJZGlzcF9wYWNrZXQoKFBBQ0tIRUFEICopcCk7CgkJ
CWlmIChoZGNhY2hlc2l6ZSA8PSAwKQoJCQkJbjJmbHVzaCsrOwoJCQlucmF5c2RvbmUgKz0g
cC0+bnI7CgkJCW5wYWNrc2RvbmUrKzsKCQkJcC0+bnIgPSAwOwoJCX0KCQlwLT5uZXh0ID0g
ZnJlZXBhY2tzOwkJLyogcHVzaCBvbnRvIGZyZWUgbGlzdCAqLwoJCWZyZWVwYWNrcyA9IHA7
Cgl9CglpZiAobjJmbHVzaCA+PSBSVEZMVVNIKSB7CgkJaWYgKG91dGRldiAhPSBOVUxMKQoJ
CQloZHN5bmMoTlVMTCwgMSk7CgkJZWxzZQoJCQloZGZsdXNoKE5VTEwpOwoJCW4yZmx1c2gg
PSAwOwoJfQp9CgoKcm9vdG5hbWUocm4sIGZuKQkJLyogcmVtb3ZlIHRhaWwgZnJvbSBlbmQg
b2YgZm4gKi8KcmVnaXN0ZXIgY2hhcgkqcm4sICpmbjsKewoJY2hhcgkqdHAsICpkcDsKCglm
b3IgKHRwID0gTlVMTCwgZHAgPSBybjsgKCpybiA9ICpmbisrKTsgcm4rKykgewoJCWlmICgq
cm4gPT0gJy8nKQoJCQlkcCA9IHJuOwoJCWVsc2UgaWYgKCpybiA9PSAnLicpCgkJCXRwID0g
cm47Cgl9CglpZiAodHAgIT0gTlVMTCAmJiB0cCA+IGRwKQoJCSp0cCA9ICdcMCc7Cn0KCgpi
YWR2YWx1ZSh2YykJCQkvKiByZXBvcnQgYmFkIHZhcmlhYmxlIHZhbHVlIGFuZCBleGl0ICov
CmludAl2YzsKewoJc3ByaW50ZihlcnJtc2csICJiYWQgdmFsdWUgZm9yIHZhcmlhYmxlICcl
cyciLCB2bmFtKHZjKSk7CgllcnJvcihVU0VSLCBlcnJtc2cpOwp9CgoKdm9pZAplcHV0cyhz
KQkJCS8qIHB1dCBlcnJvciBtZXNzYWdlIHRvIHN0ZGVyciAqLwpyZWdpc3RlciBjaGFyICAq
czsKewoJc3RhdGljIGludCAgbWlkbGluZSA9IDA7CgoJaWYgKCEqcykKCQlyZXR1cm47Cglp
ZiAoIW1pZGxpbmUrKykgewkvKiBwcmVwZW5kIGxpbmUgd2l0aCBwcm9ncmFtIG5hbWUgKi8K
CQlmcHV0cyhwcm9nbmFtZSwgc3RkZXJyKTsKCQlmcHV0cygiOiAiLCBzdGRlcnIpOwoJfQoJ
ZnB1dHMocywgc3RkZXJyKTsKCWlmIChzW3N0cmxlbihzKS0xXSA9PSAnXG4nKSB7CgkJZmZs
dXNoKHN0ZGVycik7CgkJbWlkbGluZSA9IDA7Cgl9Cn0KCgp2b2lkCnF1aXQoZWMpCQkJLyog
ZXhpdCBwcm9ncmFtIGdyYWNlZnVsbHkgKi8KaW50CWVjOwp7CglpbnQJc3RhdHVzID0gMDsK
CglpZiAoaGRsaXN0WzBdICE9IE5VTEwpIHsJLyogY2xvc2UgaG9sb2RlY2sgKi8KCQlpZiAo
bnByb2NzID4gMCkKCQkJc3RhdHVzID0gZG9uZV9ydHJhY2UoKTsJCS8qIGNhbGxzIGhkc3lu
YygpICovCgkJaWYgKChuY3Byb2NzID4gMCkgJiAoZm9yY2UgPj0gMCkgJiYgdmRlZihSRVBP
UlQpKSB7CgkJCW9mZl90CWZzaXosIGZ1c2U7CgkJCWZzaXogPSBoZGZpbGVuKGhkbGlzdFsw
XS0+ZmQpOwoJCQlmdXNlID0gaGRmaWx1c2UoaGRsaXN0WzBdLT5mZCwgMSk7CgkJCWZwcmlu
dGYoc3RkZXJyLAoJCQkiJXM6ICUuMWYgTWJ5dGUgaG9sb2RlY2sgZmlsZSwgJS4xZiUlIGZy
YWdtZW50YXRpb25cbiIsCgkJCQkJaGRrZmlsZSwgZnNpei8oMTAyNC4qMTAyNC4pLAoJCQkJ
CTEwMC4qKGZzaXotZnVzZSkvZnNpeik7CgkJfQoJfQoJaWYgKG9yaWdfbW9kZSA+PSAwKQkJ
LyogcmVzZXQgaG9sb2RlY2sgYWNjZXNzIG1vZGUgKi8KCQlmY2htb2QoaGRsaXN0WzBdLT5m
ZCwgb3JpZ19tb2RlKTsKCWlmIChvdXRkZXYgIT0gTlVMTCkJCS8qIGNsb3NlIGRpc3BsYXkg
Ki8KCQlkaXNwX2Nsb3NlKCk7CglleGl0KGVjID8gZWMgOiBzdGF0dXMpOwkJLyogZXhpdCAq
Lwp9Cg==
--------------020606090706070300020809--