Subject: delay patch
To: None <tmm@mcci.com>
From: Chris Gilbert <chris@paradox.demon.co.uk>
List: port-arm32
Date: 04/20/2001 10:36:20
--------------Boundary-00=_K0435MSN6TRMF8RK4EVV
Content-Type: text/plain;
charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Hi,
I've made the patch to improve the delay handling more generic. What I've
done is move the delay routine (and related check and calibration routines)
into arch/arm/mainbus/cpu.c. I've then removed all the delay routines from
the different clock files. (iomd, footbridge, ofw and isa) to use the common
delay routine that calls microtime.
However not having all the bits of hardware to check this works I'd be
grateful if people can check that the code still works as expected on all
platforms.
Thanks,
Chris
--------------Boundary-00=_K0435MSN6TRMF8RK4EVV
Content-Type: text/x-c;
charset=iso-8859-1;
name=delay.patch
Content-Transfer-Encoding: base64
Content-Description: common delay patch
Content-Disposition: attachment;
filename=delay.patch
SW5kZXg6IGFybS9tYWluYnVzL2NwdS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3N5
c3NyYy9zeXMvYXJjaC9hcm0vbWFpbmJ1cy9jcHUuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OQpkaWZmIC11IC1wIC1yMS4xOSBjcHUuYwotLS0gYXJtL21haW5idXMvY3B1LmMJMjAwMS8wNC8x
OCAyMDoyNzozMwkxLjE5CisrKyBhcm0vbWFpbmJ1cy9jcHUuYwkyMDAxLzA0LzIwIDA5OjI4OjI1
CkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUgPHN5
cy9kZXZpY2UuaD4KICNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+
CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHV2bS91dm1fZXh0ZXJuLmg+CiAj
aW5jbHVkZSA8bWFjaGluZS9pby5oPgogI2luY2x1ZGUgPG1hY2hpbmUvY29uZi5oPgpAQCAtNjAs
NiArNjIsMTAgQEAKICNpbmNsdWRlIDxtYWNoaW5lL2Jvb3Rjb25maWcuaD4gLyogRm9yIGJvb3Rf
YXJncyAqLwogI2luY2x1ZGUgPGFybTMyL2ZwZS1hcm0vYXJtZnBlLmg+CiAjZW5kaWYJLyogQVJN
RlBFICovCisjaWZkZWYgRElBR05PU1RJQworc3RhdGljIHZvaWQgY2hlY2tkZWxheQlfX1AoKHZv
aWQpKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgY3B1X2RlbGF5X2NhbGlicmF0ZShzdHJ1Y3QgZGV2
aWNlICopOwogCiBzdHJ1Y3QgY3B1X3NvZnRjIHsKIAlzdHJ1Y3QJZGV2aWNlIHNjX2RldjsKQEAg
LTExNCw2ICsxMjAsOSBAQCBjcHVhdHRhY2gocGFyZW50LCBzZWxmLCBhdXgpCiAJCW1lbXNldCgm
Y3B1c1tsb29wXSwgMCwgc2l6ZW9mKGNwdV90KSk7CiAKIAlpZGVudGlmeV9tYXN0ZXJfY3B1KHNj
LCBDUFVfTUFTVEVSKTsKKworCS8qIGRlbGF5IGNhbGlicmF0aW9uICovCisJY29uZmlnX2ludGVy
cnVwdHMoc2VsZiwgY3B1X2RlbGF5X2NhbGlicmF0ZSk7CiB9CiAKIHN0cnVjdCBjZmF0dGFjaCBj
cHVfY2EgPSB7CkBAIC00OTUsNCArNTA0LDcwIEBAIGlkZW50aWZ5X2FybV9mcHUoc2MsIGNwdV9u
dW1iZXIpCiAJfQogfQogCisvKiBGaXhlZCBjb2RlIHNlcXVlbmNlIGZvciByZWxpYWJpbGl0eSAq
LworI2RlZmluZSBjcHVfZGVsYXlsb29wKGxvb3BzKQkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKCIx
OnN1YnMgJTAsICUwLCAjMTsgYm5lIDFiIiA6IDogInIiIChsb29wcykgOiAiY2MiKQorCitpbnQg
Y3B1X2RlbGF5X2ZhY3RvciA9IC0xOworCit2b2lkCitkZWxheSh1X2ludCB1c2VjcykKK3sKKwlp
ZiAodXNlY3MgPD0gMTAgfHwgY29sZCkgeworCSAgICBpZiAoY3B1X2RlbGF5X2ZhY3RvciA9PSAt
MSkgeworCQlpZiAoY3B1dHlwZSA9PSBDUFVfSURfU0ExMTApIHsKKwkJICAgIGNwdV9kZWxheWxv
b3AodXNlY3MgKiAxMDApOworCQl9IGVsc2UgeworCQkgICAgY3B1X2RlbGF5bG9vcCh1c2VjcyAq
IDgpOworCQl9CisJICAgIH0gZWxzZSB7CisJCWNwdV9kZWxheWxvb3AodXNlY3MgKiBjcHVfZGVs
YXlfZmFjdG9yKTsKKwkgICAgfQorCX0gZWxzZSB7CisJCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBn
YXAsIG5vdywgZW5kOworCisJCW1pY3JvdGltZSgmc3RhcnQpOworCQlnYXAudHZfc2VjID0gdXNl
Y3MgLyAxMDAwMDAwOworCQlnYXAudHZfdXNlYyA9IHVzZWNzICUgMTAwMDAwMDsKKwkJdGltZXJh
ZGQoJnN0YXJ0LCAmZ2FwLCAmZW5kKTsKKwkJZG8geworCQkJbWljcm90aW1lKCZub3cpOworCQl9
IHdoaWxlICh0aW1lcmNtcCgmbm93LCAmZW5kLCA8KSk7CisJfQorfQorCisjaWZkZWYgRElBR05P
U1RJQworc3RhdGljIHZvaWQKK2NoZWNrZGVsYXkoKQoreworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0
LCBlbmQsIGRpZmY7CisKKwltaWNyb3RpbWUoJnN0YXJ0KTsKKwlkZWxheSgxMDAwMCk7CisJbWlj
cm90aW1lKCZlbmQpOworCXRpbWVyc3ViKCZlbmQsICZzdGFydCwgJmRpZmYpOworCWlmIChkaWZm
LnR2X3NlYyA+IDApCisJCXJldHVybjsKKwlpZiAoZGlmZi50dl91c2VjID4gMTAwMDApCisJCXJl
dHVybjsKKwlwcmludGYoIldBUk5JTkc6IGRlbGF5KDEwMDAwKSB0b29rICVsZCB1c1xuIiwgZGlm
Zi50dl91c2VjKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorY3B1X2RlbGF5X2NhbGlicmF0
ZShzdHJ1Y3QgZGV2aWNlICpzZWxmKQoreworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQsIGRp
ZmY7CisKKwltaWNyb3RpbWUoJnN0YXJ0KTsKKwljcHVfZGVsYXlsb29wKDEwMDAwMDApOworCW1p
Y3JvdGltZSgmZW5kKTsKKwl0aW1lcnN1YigmZW5kLCAmc3RhcnQsICZkaWZmKTsKKwljcHVfZGVs
YXlfZmFjdG9yID0gMTAwMDAwMCAvIChkaWZmLnR2X3VzZWMgKyAxICsgZGlmZi50dl9zZWMgKiAx
MDAwMDAwKTsKKwlwcmludGYoIiVzOiAxMDAwMDAwIGxvb3BzIGluICVsZCBtaWNyb3NlY29uZHMs
IGRlbGF5IGZhY3RvciA9ICVkXG4iLAorCSAgICAgICBzZWxmLT5kdl94bmFtZSwgZGlmZi50dl91
c2VjLCBjcHVfZGVsYXlfZmFjdG9yKTsKKyNpZmRlZiBESUFHTk9TVElDCisJY2hlY2tkZWxheSgp
OworI2VuZGlmCit9CiAvKiBFbmQgb2YgY3B1LmMgKi8KSW5kZXg6IGFybTMyL2Zvb3RicmlkZ2Uv
Zm9vdGJyaWRnZV9jbG9jay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3N5c3NyYy9z
eXMvYXJjaC9hcm0zMi9mb290YnJpZGdlL2Zvb3RicmlkZ2VfY2xvY2suYyx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYgZm9vdGJyaWRnZV9jbG9jay5jCi0tLSBhcm0z
Mi9mb290YnJpZGdlL2Zvb3RicmlkZ2VfY2xvY2suYwkyMDAxLzAyLzI1IDIxOjMxOjE1CTEuNgor
KysgYXJtMzIvZm9vdGJyaWRnZS9mb290YnJpZGdlX2Nsb2NrLmMJMjAwMS8wNC8yMCAwOToyODoz
MApAQCAtMjgxLDI5ICsyODEsNCBAQCBtaWNyb3RpbWUodHZwKQogCSh2b2lkKXNwbHgocyk7CQkK
IH0KIAotLyoKLSAqIEVzdGltYXRlZCBsb29wIGZvciBuIG1pY3Jvc2Vjb25kcwotICovCi0KLS8q
IE5lZWQgdG8gcmUtd3JpdGUgdGhpcyB0byB1c2UgdGhlIHRpbWVycyAqLwotCi0vKiBPbmUgZGF5
IHNvb24gSSB3aWxsIGFjdHVhbGx5IGRvIHRoaXMgKi8KLQotaW50IGRlbGF5Y291bnQgPSA1MDsK
LQotdm9pZAotZGVsYXkobikKLQl1X2ludCBuOwotewotCXVfaW50IGk7Ci0KLQlpZiAobiA9PSAw
KSByZXR1cm47Ci0Jd2hpbGUgKC0tbiA+IDApIHsKLQkJaWYgKGNwdXR5cGUgPT0gQ1BVX0lEX1NB
MTEwKQkvKiBYWFggLSBTZXJpb3VzbHkgZ3Jvc3MgaGFjayAqLwotCQkJZm9yIChpID0gZGVsYXlj
b3VudDsgLS1pOyk7Ci0JCWVsc2UKLQkJCWZvciAoaSA9IDg7IC0taTspOwotCX0KLX0KLQogLyog
RW5kIG9mIGZvb3RicmlkZ2VfY2xvY2suYyAqLwpJbmRleDogYXJtMzIvaW9tZC9pb21kX2Nsb2Nr
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3lzc3JjL3N5cy9hcmNoL2FybTMyL2lv
bWQvaW9tZF9jbG9jay5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYgLXUgLXAgLXIx
LjI1IGlvbWRfY2xvY2suYwotLS0gYXJtMzIvaW9tZC9pb21kX2Nsb2NrLmMJMjAwMS8wNC8xMCAx
OTowODo0MgkxLjI1CisrKyBhcm0zMi9pb21kL2lvbWRfY2xvY2suYwkyMDAxLzA0LzIwIDA5OjI4
OjMwCkBAIC03Myw5ICs3Myw2IEBAIHN0YXRpYyBpbnQgdGltZXIwX2NvdW50OwogCiBzdGF0aWMg
aW50IGNsb2NrbWF0Y2gJX19QKChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBjZmRhdGEg
KmNmLCB2b2lkICphdXgpKTsKIHN0YXRpYyB2b2lkIGNsb2NrYXR0YWNoCV9fUCgoc3RydWN0IGRl
dmljZSAqcGFyZW50LCBzdHJ1Y3QgZGV2aWNlICpzZWxmLCB2b2lkICphdXgpKTsKLSNpZmRlZiBE
SUFHTk9TVElDCi1zdGF0aWMgdm9pZCBjaGVja2RlbGF5CV9fUCgodm9pZCkpOwotI2VuZGlmCiAK
IHN0cnVjdCBjZmF0dGFjaCBjbG9ja19jYSA9IHsKIAlzaXplb2Yoc3RydWN0IGNsb2NrX3NvZnRj
KSwgY2xvY2ttYXRjaCwgY2xvY2thdHRhY2gKQEAgLTE5OSwyNSArMTk2LDYgQEAgc2V0c3RhdGNs
b2NrcmF0ZShoeikKIAkgICAgSU9NRF9UMUdPLCAwKTsKIH0KIAotCi0jaWZkZWYgRElBR05PU1RJ
Qwotc3RhdGljIHZvaWQKLWNoZWNrZGVsYXkoKQotewotCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBl
bmQsIGRpZmY7Ci0KLQltaWNyb3RpbWUoJnN0YXJ0KTsKLQlkZWxheSgxMDAwMCk7Ci0JbWljcm90
aW1lKCZlbmQpOwotCXRpbWVyc3ViKCZlbmQsICZzdGFydCwgJmRpZmYpOwotCWlmIChkaWZmLnR2
X3NlYyA+IDApCi0JCXJldHVybjsKLQlpZiAoZGlmZi50dl91c2VjID4gMTAwMDApCi0JCXJldHVy
bjsKLQlwcmludGYoIldBUk5JTkc6IGRlbGF5KDEwMDAwKSB0b29rICVsZCB1c1xuIiwgZGlmZi50
dl91c2VjKTsKLX0KLSNlbmRpZgotCiAvKgogICogdm9pZCBjcHVfaW5pdGNsb2Nrcyh2b2lkKQog
ICoKQEAgLTI2NCw5ICsyNDIsNiBAQCBjcHVfaW5pdGNsb2NrcygpCiAJCQlwYW5pYygiJXM6IENh
bm5vdCBpbnN0YWxsZXIgdGltZXIgMSBJUlEgaGFuZGxlclxuIiwKIAkJCSAgICBjbG9ja19zYy0+
c2NfZGV2LmR2X3huYW1lKTsKIAl9Ci0jaWZkZWYgRElBR05PU1RJQwotCWNoZWNrZGVsYXkoKTsK
LSNlbmRpZgogfQogCiAKQEAgLTI5Myw3ICsyNjgsNyBAQCBtaWNyb3RpbWUodHZwKQogCiAJLyoK
IAkgKiBMYXRjaCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgdGltZXIgYW5kIHRoZW4gcmVhZCBp
dC4KLQkgKiBUaGlzIGdhcmVudGVlcyBhbiBhdG1vaWMgcmVhZGluZyBvZiB0aGUgdGltZS4KKwkg
KiBUaGlzIGdhcmVudGVlcyBhbiBhdG9taWMgcmVhZGluZyBvZiB0aGUgdGltZS4KIAkgKi8KIAog
CWJ1c19zcGFjZV93cml0ZV8xKGNsb2NrX3NjLT5zY19pb3QsIGNsb2NrX3NjLT5zY19pb2gsCkBA
IC0zMzIsMzEgKzMwNyw2IEBAIG1pY3JvdGltZSh0dnApCiAJICAgIAogCW9sZHR2ID0gKnR2cDsK
IAkodm9pZClzcGx4KHMpOwkJCi19Ci0KLS8qCi0gKiBFc3RpbWF0ZWQgbG9vcCBmb3IgbiBtaWNy
b3NlY29uZHMKLSAqLwotCi0vKiBOZWVkIHRvIHJlLXdyaXRlIHRoaXMgdG8gdXNlIHRoZSB0aW1l
cnMgKi8KLQotLyogT25lIGRheSBzb29uIEkgd2lsbCBhY3R1YWxseSBkbyB0aGlzICovCi0KLWlu
dCBkZWxheWNvdW50ID0gMTAwOwotCi12b2lkCi1kZWxheShuKQotCXVfaW50IG47Ci17Ci0JdV9p
bnQgaTsKLQotCWlmIChuID09IDApIHJldHVybjsKLQl3aGlsZSAoLS1uID4gMCkgewotCQlpZiAo
Y3B1dHlwZSA9PSBDUFVfSURfU0ExMTApCS8qIFhYWCAtIFNlcmlvdXNseSBncm9zcyBoYWNrICov
Ci0JCQlmb3IgKGkgPSBkZWxheWNvdW50OyAtLWk7KTsKLQkJZWxzZQotCQkJZm9yIChpID0gODsg
LS1pOyk7Ci0JfQogfQogCiAvKiBFbmQgb2YgaW9tZF9jbG9jay5jICovCkluZGV4OiBhcm0zMi9p
c2EvY2xvY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zeXNzcmMvc3lzL2FyY2gv
YXJtMzIvaXNhL2Nsb2NrLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1y
MS41IGNsb2NrLmMKLS0tIGFybTMyL2lzYS9jbG9jay5jCTIwMDAvMTIvMTIgMDY6MDY6MDYJMS41
CisrKyBhcm0zMi9pc2EvY2xvY2suYwkyMDAxLzA0LzIwIDA5OjI4OjMxCkBAIC00MTksNTkgKzQx
OSw2IEBAIGdldHRpY2soKQogICAgLSBtaWNyb3RpbWUgbm8gbG9uZ2VyIGluIGFzc2VtYmx5IGxh
bmd1YWdlCiAqLwogCi0vKgotICogV2FpdCAibiIgbWljcm9zZWNvbmRzLgotICogUmVsaWVzIG9u
IHRpbWVyIDEgY291bnRpbmcgZG93biBmcm9tIChUSU1FUl9GUkVRIC8gaHopIGF0IFRJTUVSX0ZS
RVEgSHouCi0gKiBOb3RlOiB0aW1lciBoYWQgYmV0dGVyIGhhdmUgYmVlbiBwcm9ncmFtbWVkIGJl
Zm9yZSB0aGlzIGlzIGZpcnN0IHVzZWQhCi0gKiAoTm90ZSB0aGF0IHdlIHVzZSBgcmF0ZSBnZW5l
cmF0b3InIG1vZGUsIHdoaWNoIGNvdW50cyBhdCAxOjE7IGBzcXVhcmUKLSAqIHdhdmUnIG1vZGUg
Y291bnRzIGF0IDI6MSkuCi0gKi8KLXZvaWQKLWRlbGF5KG4pCi0JdW5zaWduZWQgbjsKLXsKLQlp
bnQgdGljaywgb3RpY2s7Ci0JaW50IG50aWNrczsKLQotCWlmIChuIDwgMTAwKSB7Ci0JICAvKiBp
dCBjYW4gdGFrZSBhIGxvbmcgdGltZSAoMSB1c2VjIG9yIGxvbmdlcikganVzdCBmb3IgMSBJU0Eg
cmVhZCwKLQkgICAgIHNvIGl0J3MgYmVzdCBub3QgdG8gdXNlIHRoZSB0aW1lciBmb3Igc2hvcnQg
ZGVsYXlzICovCi0JICBkZWxheWxvb3AoKG4gKiBjb3VudDEwMjR1c2VjKSA+PiAxMCk7Ci0JICBy
ZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBSZWFkIHRoZSBjb3VudGVyIGZpcnN0LCBzbyB0aGF0IHRo
ZSByZXN0IG9mIHRoZSBzZXR1cCBvdmVyaGVhZCBpcwotCSAqIGNvdW50ZWQuCi0JICovCi0Jb3Rp
Y2sgPSBnZXR0aWNrKCk7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSAoKG4gKiBUSU1FUl9GUkVRKSAv
IDFlNikgd2l0aG91dCB1c2luZyBmbG9hdGluZyBwb2ludCBhbmQKLQkgKiB3aXRob3V0IGFueSBh
dm9pZGFibGUgb3ZlcmZsb3dzLgotCSAqLwotCXsKLQkgICAgICAgIC8qIGEgTXVzZWMgPSAyXjIw
IHVzZWMgKi8KLQkJaW50IE11c2VjID0gbiA+PiAyMCwKLQkJICAgIHVzZWMgPSBuICYgKCgxIDw8
IDIwKSAtIDEpOwotCQludGlja3MgCi0JCSAgPSAoTXVzZWMgKiBUSU1FUl9NVVNFQ0ZSRVEpICsK
LQkJICAgICh1c2VjICogKFRJTUVSX01VU0VDRlJFUSA+PiAyMCkpICsKLQkJICAgICgodXNlYyAq
ICgoVElNRVJfTVVTRUNGUkVRICYgKCgxIDw8MjApIC0gMSkpID4+MTApKSA+PjEwKSArCi0JCSAg
ICAoKHVzZWMgKiAoVElNRVJfTVVTRUNGUkVRICYgKCgxIDw8IDEwKSAtIDEpKSkgPj4gMjApOwot
CX0KLQotCXdoaWxlIChudGlja3MgPiAwKSB7Ci0JCXRpY2sgPSBnZXR0aWNrKCk7Ci0JCWlmICh0
aWNrID4gb3RpY2spCi0JCQludGlja3MgLT0gVElNRVIwX1JPTExPVkVSIC0gKHRpY2sgLSBvdGlj
ayk7Ci0JCWVsc2UKLQkJCW50aWNrcyAtPSBvdGljayAtIHRpY2s7Ci0JCW90aWNrID0gdGljazsK
LQl9Ci0KLX0KLQogdm9pZAogc3lzYmVlcHN0b3AoYXJnKQogCXZvaWQgKmFyZzsKSW5kZXg6IGFy
bTMyL29mdy9vZndnZW5jZmdfY2xvY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9z
eXNzcmMvc3lzL2FyY2gvYXJtMzIvb2Z3L29md2dlbmNmZ19jbG9jay5jLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBvZndnZW5jZmdfY2xvY2suYwotLS0gYXJtMzIv
b2Z3L29md2dlbmNmZ19jbG9jay5jCTIwMDEvMDIvMjUgMjE6MzE6MTUJMS45CisrKyBhcm0zMi9v
Zncvb2Z3Z2VuY2ZnX2Nsb2NrLmMJMjAwMS8wNC8yMCAwOToyODozMQpAQCAtMTc4LDI3ICsxNzgs
MyBAQCBtaWNyb3RpbWUodHZwKQogCSh2b2lkKXNwbHgocyk7CQkKIH0KIAotLyoKLSAqIEVzdGlt
YXRlZCBsb29wIGZvciBuIG1pY3Jvc2Vjb25kcwotICovCi0KLS8qIE5lZWQgdG8gcmUtd3JpdGUg
dGhpcyB0byB1c2UgdGhlIHRpbWVycyAqLwotCi0vKiBPbmUgZGF5IHNvb24gSSB3aWxsIGFjdHVh
bGx5IGRvIHRoaXMgKi8KLQotaW50IGRlbGF5Y291bnQgPSA1MDsKLQotdm9pZAotZGVsYXkobikK
LQl1X2ludCBuOwotewotCXVfaW50IGk7Ci0KLQlpZiAobiA9PSAwKSByZXR1cm47Ci0Jd2hpbGUg
KC0tbiA+IDApIHsKLQkJaWYgKGNwdXR5cGUgPT0gQ1BVX0lEX1NBMTEwKQkvKiBYWFggLSBTZXJp
b3VzbHkgZ3Jvc3MgaGFjayAqLwotCQkJZm9yIChpID0gZGVsYXljb3VudDsgLS1pOyk7Ci0JCWVs
c2UKLQkJCWZvciAoaSA9IDg7IC0taTspOwotCX0KLX0K
--------------Boundary-00=_K0435MSN6TRMF8RK4EVV--