ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTdhNzliNC4uM2YxNmRhYiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTUzMSw2ICs1MzEsNyBAQAogR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CiAKIAlteDMxYWRzCQlpLk1YMzEKKwlTTURLNjQwMAlTM0M2NDAwCiAKIERhdmlkIE38bGxlciA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KIApAQCAtNzUzLDEyICs3NTQsMTUgQEAKIAlNSUdPLVIJCVNINzcyMgogCiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisJCSAgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgogCiAJTVM3NzUwU0UJU0g3NzUwCiAJTVM3NzIyU0UJU0g3NzIyCiAJUjc3ODBNUAkJU0g3NzgwCiAJUjJEUGx1cwkJU0g3NzUxUgogCVNINzc2M1JEUAlTSDc3NjMKKwlSU0s3MjAzCQlTSDcyMDMKKwlBUDMyNVJYQQlTSDc3MjMKIAogTWFyayBKb25hcyA8bWFyay5qb25hc0BkZS5ib3NjaC5jb20+CiAKQEAgLTc2Nyw2ICs3NzEsMTEgQEAKIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KIAogCU1TNzcyMFNFCVNINzcyMAorCVIwUDc3ODUwMDExUkwJU0g3Nzg1CisKK1l1c3VrZSBHb2RhIDxnb2RhLnl1c3VrZUByZW5lc2FzLmNvbT4KKworCU1JR08tUgkJU0g3NzIyCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQmxhY2tmaW4gU3lzdGVtczoJCQkJCQkJIwpkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggZTM4Mjk0Ny4uZmUyODRiNSAxMDA3NTUKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC01MTksNiArNTE5LDcgQEAKIAlpbXgzMV9saXRla2l0CVwKIAlpbXgzMV9waHljb3JlCVwKIAlteDMxYWRzCQlcCisJc21kazY0MDAJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC03NDAsNiArNzQxLDkgQEAKICMjIFNIIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorTElTVF9zaDI9IgkJXAorCXJzazcyMDMJCVwKKyIKIExJU1Rfc2gzPSIJCVwKIAltcHIyCQlcCiAJbXM3NzIwc2UJXApAQCAtNzUyLDkgKzc1NiwxMiBAQAogCXI3NzgwbXAJCVwKIAlyMmRwbHVzCQlcCiAJc2g3NzYzcmRwCVwKKwlzaDc3ODVsY3IJXAorCWFwMzI1cnhhCVwKICIKIAogTElTVF9zaD0iCQlcCisJJHtMSVNUX3NoMn0JXAogCSR7TElTVF9zaDN9CVwKIAkke0xJU1Rfc2g0fQlcCiAiCkBAIC03OTksNyArODA2LDcgQEAKIAl8bWlwc3xtaXBzX2VsIFwKIAl8bmlvc3xuaW9zMiBcCiAJfHBwY3w1eHh8NXh4eHw1MTJ4fDh4eHw4MjIwfDgyNHh8ODI2MHw4M3h4fDg1eHh8ODZ4eHw0eHh8N3h4fDc0eHh8VFNFQyBcCi0JfHNofHNoM3xzaDQgXAorCXxzaHxzaDJ8c2gzfHNoNCBcCiAJfHNwYXJjIFwKIAl8eDg2fEk0ODYgXAogCSkKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYTAwMTk1Yy4uMmQ0YjUxMyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTI0OTYsNyArMjQ5Niw3IEBACiAJQGJvYXJkL2ludGVncmF0b3JjcC9zcGxpdF9ieV92YXJpYW50LnNoICRACiAKIGRhdmluY2lfZHZldm1fY29uZmlnIDoJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIGR2LWV2bSBkYXZpbmNpIGRhdmluY2kKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIGR2ZXZtIGRhdmluY2kgZGF2aW5jaQogCiBkYXZpbmNpX3NjaG1vb2dpZV9jb25maWcgOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgc2NobW9vZ2llIGRhdmluY2kgZGF2aW5jaQpAQCAtMjc1OSw2ICsyNzU5LDIzIEBACiBvbWFwMjQyMGg0X2NvbmZpZwk6IHVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgb21hcDI0MjBoNCBOVUxMIG9tYXAyNHh4CiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEFSTTExNzYgU3lzdGVtcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc21kazY0MDBfbm9VU0JfY29uZmlnCVwKK3NtZGs2NDAwX2NvbmZpZwk6CXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUgJChvYmopYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMAorCUBta2RpciAtcCAkKG9iailuYW5kX3NwbC9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX05BTkRfVV9CT09UIiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAaWYgWyAteiAiJChmaW5kc3RyaW5nIHNtZGs2NDAwX25vVVNCX2NvbmZpZywkQCkiIF07IHRoZW4JCQlcCisJCWVjaG8gIlJBTV9URVhUID0gMHg1N2UwMDAwMCIgPj4gJChvYmopYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9jb25maWcudG1wO1wKKwkJJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtMTE3NiBzbWRrNjQwMCBzYW1zdW5nIHMzYzY0eHg7CQlcCisJZWxzZQkJCQkJCQkJCQlcCisJCWVjaG8gIlJBTV9URVhUID0gMHhjN2UwMDAwMCIgPj4gJChvYmopYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9jb25maWcudG1wO1wKKwkJJChNS0NPTkZJRykgJChAOl9ub1VTQl9jb25maWc9KSBhcm0gYXJtMTE3NiBzbWRrNjQwMCBzYW1zdW5nIHMzYzY0eHg7CVwKKwlmaQorCUBlY2hvICJDT05GSUdfTkFORF9VX0JPT1QgPSB5IiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5taworCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIGkzODYKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMwMDcsNiArMzAyNCwxNCBAQAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBzaDIgKFJlbmVzYXMgU3VwZXJIKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcnNrNzIwM19jb25maWc6IHVuY29uZmlnCisJQCA+aW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19SU0s3MjAzIDEiID4+IGluY2x1ZGUvY29uZmlnLmgKKwlALi9ta2NvbmZpZyAtYSAkKEA6X2NvbmZpZz0pIHNoIHNoMiByc2s3MjAzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIHNoMyAoUmVuZXNhcyBTdXBlckgpCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTMwNDIsMTcgKzMwNjcsMjcgQEAKIHIyZHBsdXNfY29uZmlnICA6ICAgdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19SMkRQTFVTIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IHIyZHBsdXMKKwlAJChNS0NPTkZJRykgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgcjJkcGx1cwogCiByNzc4MG1wX2NvbmZpZzogdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19SNzc4ME1QIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IHI3NzgwbXAKKwlAJChNS0NPTkZJRykgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgcjc3ODBtcAogCiBzaDc3NjNyZHBfY29uZmlnICA6ICAgdW5jb25maWcKIAlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBlY2hvICIjZGVmaW5lIENPTkZJR19TSDc3NjNSRFAgMSIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCi0JQC4vbWtjb25maWcgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgc2g3NzYzcmRwCisJQCQoTUtDT05GSUcpIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IHNoNzc2M3JkcAorCitzaDc3ODVsY3JfY29uZmlnICA6ICAgdW5jb25maWcKKwlAID5pbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1NINzc4NUxDUiAxIiA+PiBpbmNsdWRlL2NvbmZpZy5oCisJQCQoTUtDT05GSUcpIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IHNoNzc4NWxjcgorCithcDMyNXJ4YV9jb25maWcgIDogICB1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0FQMzI1UlhBIDEiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSAkKEA6X2NvbmZpZz0pIHNoIHNoNCBhcDMyNXJ4YQogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFNQQVJDCmRpZmYgLS1naXQgYS9ib2FyZC9hZHM1MTIxL2FkczUxMjEuYyBiL2JvYXJkL2FkczUxMjEvYWRzNTEyMS5jCmluZGV4IGJhM2Q3ZDIuLmRlYWEyOTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FkczUxMjEvYWRzNTEyMS5jCisrKyBiL2JvYXJkL2FkczUxMjEvYWRzNTEyMS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bXBjNTEyeC5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CiAjaWZkZWYgQ09ORklHX01JU0NfSU5JVF9SCiAjaW5jbHVkZSA8aTJjLmg+CkBAIC05Miw2ICs5Myw5IEBACiAJICogQ29uZmlndXJlIEZsYXNoIFNwZWVkCiAJICovCiAJKigodm9sYXRpbGUgdTMyICopKENGR19JTU1SICsgTFBDX09GRlNFVCArIENTMF9DT05GSUcpKSA9IENGR19DUzBfQ0ZHOworCWlmIChTVlJfTUpSRVYgKGltLT5zeXNjb25mLnNwcmlkcikgPj0gMikgeworCQkqKCh2b2xhdGlsZSB1MzIgKikoQ0ZHX0lNTVIgKyBMUENfT0ZGU0VUICsgQ1NfQUxFX1RJTUlOR19DT05GSUcpKSA9IENGR19DU19BTEVUSU1JTkc7CisJfQogCS8qCiAJICogRW5hYmxlIGNsb2NrcwogCSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUgYi9ib2FyZC9hcDMyNXJ4YS9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDc4JQpjb3B5IGZyb20gYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKY29weSB0byBib2FyZC9hcDMyNXJ4YS9NYWtlZmlsZQppbmRleCA1NzllZmUyLi4yMWYzZTZlIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQorKysgYi9ib2FyZC9hcDMyNXJ4YS9NYWtlZmlsZQpAQCAtMSwxMSArMSw5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgotIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdS5ub2J1aGlyb0ByZW5lc2FzLmNvbT4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgotIwotIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotIyBwcm9qZWN0LgorIyBib2FyZC9hcDMyNXJ4YS9NYWtlZmlsZQogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNywxNCArMjUsMTQgQEAKIAogTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1DT0JKUwk6PSBkdl9ib2FyZC5vCi1TT0JKUwk6PSBib2FyZF9pbml0Lm8KK0NPQkpTCTo9IGFwMzI1cnhhLm8gY3BsZC1hcDMyNXJ4YS5vCitTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCiBTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC00NCw3ICs0Miw4IEBACiAJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2JvYXJkL2FwMzI1cnhhL2FwMzI1cnhhLmMgYi9ib2FyZC9hcDMyNXJ4YS9hcDMyNXJ4YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTAyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hcDMyNXJ4YS9hcDMyNXJ4YS5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qIFBSSSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBSUFJJQ1I1CTB4RkY4MDAwNDggLyogTE1CICovCisjZGVmaW5lIFBSUFJJQ1I1X0QJMHgyYQorCisvKiBGUEdBIGNvbnRyb2wgKi8KKyNkZWZpbmUgRlBHQV9OQU5EX0NUTAkweEI0MTAwMjBDCisjZGVmaW5lIEZQR0FfTkFORF9SU1QJMHgwMDA4CisjZGVmaW5lIEZQR0FfTkFORF9JTklUCTB4MDAwMAorI2RlZmluZSBGUEdBX05BTkRfUlNUX1dBSVQJMTAwMDAKKworLyogSS9PIHBvcnQgZGF0YSAqLworI2RlZmluZSBQQUNSX0QJMHgwMDAwCisjZGVmaW5lIFBCQ1JfRAkweDAwMDAKKyNkZWZpbmUgUENDUl9ECTB4MTAwMAorI2RlZmluZSBQRENSX0QJMHgwMDAwCisjZGVmaW5lIFBFQ1JfRAkweDA0MTAKKyNkZWZpbmUgUEZDUl9ECTB4ZmZmZgorI2RlZmluZSBQR0NSX0QJMHgwMDAwCisjZGVmaW5lIFBIQ1JfRAkweDUwMTEKKyNkZWZpbmUgUEpDUl9ECTB4NDQwMAorI2RlZmluZSBQS0NSX0QJMHg3YzAwCisjZGVmaW5lIFBMQ1JfRAkweDAwMDAKKyNkZWZpbmUgUE1DUl9ECTB4MDAwMAorI2RlZmluZSBQTkNSX0QJMHgwMDAwCisjZGVmaW5lIFBRQ1JfRAkweDAwMDAKKyNkZWZpbmUgUFJDUl9ECTB4MDAwMAorI2RlZmluZSBQU0NSX0QJMHgwMDAwCisjZGVmaW5lIFBUQ1JfRAkweDAwMTAKKyNkZWZpbmUgUFVDUl9ECTB4MGZmZgorI2RlZmluZSBQVkNSX0QJMHhmZmZmCisjZGVmaW5lIFBXQ1JfRAkweDAwMDAKKyNkZWZpbmUgUFhDUl9ECTB4NzUwMAorI2RlZmluZSBQWUNSX0QJMHgwMDAwCisjZGVmaW5lIFBaQ1JfRAkweDU1NDAKKworLyogUGluIEZ1bmN0aW9uIENvbnRyb2xlciBkYXRhICovCisjZGVmaW5lIFBTRUxBX0QJMHgxNDEwCisjZGVmaW5lIFBTRUxCX0QJMHgwMTQwCisjZGVmaW5lIFBTRUxDX0QJMHgwMDAwCisjZGVmaW5lIFBTRUxEX0QJMHgwNDAwCisKKy8qIEkvTyBCdWZmZXIgSGktWiBkYXRhICovCisjZGVmaW5lCUhJWkNSQV9ECTB4MDAwMAorI2RlZmluZSBISVpDUkJfRAkweDEwMDAKKyNkZWZpbmUgSElaQ1JDX0QJMHgwMDAwCisjZGVmaW5lIEhJWkNSRF9ECTB4MDAwMAorCisvKiBNb2R1bGUgc2VsZWN0IHJlZyBkYXRhICovCisjZGVmaW5lIE1TRUxDUkFfRAkweDAwMTQKKyNkZWZpbmUgTVNFTENSQl9ECTB4MDAxOAorCisvKiBNb2R1bGUgU3RvcCByZWcgRGF0YSAqLworI2RlZmluZSBNU1RQQ1IyX0QJMHhGRkQ5RjI4MAorCisvKiBDUExEIGxvYWRlciAqLworZXh0ZXJuIHZvaWQgaW5pdF9jcGxkKHZvaWQpOworCitpbnQgY2hlY2tib2FyZCh2b2lkKQoreworCXB1dHMoIkJPQVJEOiBBUDMyNVJYQVxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogUGluIEZ1bmN0aW9uIENvbnRyb2xlciBJbml0ICovCisJb3V0dyhQU0VMQV9ELCBQU0VMQSk7CisJb3V0dyhQU0VMQl9ELCBQU0VMQik7CisJb3V0dyhQU0VMQ19ELCBQU0VMQyk7CisJb3V0dyhQU0VMRF9ELCBQU0VMRCk7CisKKwkvKiBJL08gQnVmZmVyIEhpLVogSW5pdCAqLworCW91dHcoSElaQ1JBX0QsIEhJWkNSQSk7CisJb3V0dyhISVpDUkJfRCwgSElaQ1JCKTsKKwlvdXR3KEhJWkNSQ19ELCBISVpDUkMpOworCW91dHcoSElaQ1JEX0QsIEhJWkNSRCk7CisKKwkvKiBNb2R1bGUgc2VsZWN0IHJlZyBJbml0ICovCisJb3V0dyhNU0VMQ1JBX0QsIE1TRUxDUkEpOworCW91dHcoTVNFTENSQl9ELCBNU0VMQ1JCKTsKKworCS8qIE1vZHVsZSBTdG9wIHJlZyBJbml0ICovCisJb3V0bChNU1RQQ1IyX0QsIE1TVFBDUjIpOworCisJLyogSS9PIHBvcnRzICovCisJb3V0dyhQQUNSX0QsIFBBQ1IpOworCW91dHcoUEJDUl9ELCBQQkNSKTsKKwlvdXR3KFBDQ1JfRCwgUENDUik7CisJb3V0dyhQRENSX0QsIFBEQ1IpOworCW91dHcoUEVDUl9ELCBQRUNSKTsKKwlvdXR3KFBGQ1JfRCwgUEZDUik7CisJb3V0dyhQR0NSX0QsIFBHQ1IpOworCW91dHcoUEhDUl9ELCBQSENSKTsKKwlvdXR3KFBKQ1JfRCwgUEpDUik7CisJb3V0dyhQS0NSX0QsIFBLQ1IpOworCW91dHcoUExDUl9ELCBQTENSKTsKKwlvdXR3KFBNQ1JfRCwgUE1DUik7CisJb3V0dyhQTkNSX0QsIFBOQ1IpOworCW91dHcoUFFDUl9ELCBQUUNSKTsKKwlvdXR3KFBSQ1JfRCwgUFJDUik7CisJb3V0dyhQU0NSX0QsIFBTQ1IpOworCW91dHcoUFRDUl9ELCBQVENSKTsKKwlvdXR3KFBVQ1JfRCwgUFVDUik7CisJb3V0dyhQVkNSX0QsIFBWQ1IpOworCW91dHcoUFdDUl9ELCBQV0NSKTsKKwlvdXR3KFBYQ1JfRCwgUFhDUik7CisJb3V0dyhQWUNSX0QsIFBZQ1IpOworCW91dHcoUFpDUl9ELCBQWkNSKTsKKworCS8qIFBSSSBjb250cm9sIHJlZ2lzdGVyIEluaXQgKi8KKwlvdXRsKFBSUFJJQ1I1X0QsIFBSUFJJQ1I1KTsKKworCS8qIGNwbGQgaW5pdCAqLworCWluaXRfY3BsZCgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWdkLT5iZC0+YmlfbWVtc3RhcnQgPSBDRkdfU0RSQU1fQkFTRTsKKwlnZC0+YmQtPmJpX21lbXNpemUgPSBDRkdfU0RSQU1fU0laRTsKKwlwcmludGYoIkRSQU06ICAlZE1CXG4iLCBDRkdfU0RSQU1fU0laRSAvICgxMDI0ICogMTAyNCkpOworCXJldHVybiAwOworfQorCit2b2lkIGxlZF9zZXRfc3RhdGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCit7Cit9CisKK3ZvaWQgaWRlX3NldF9yZXNldChpbnQgaWRlcmVzZXQpCit7CisJb3V0dyhGUEdBX05BTkRfUlNULCBGUEdBX05BTkRfQ1RMKTsJLyogTkFORCBSRVNFVCAqLworCXVkZWxheShGUEdBX05BTkRfUlNUX1dBSVQpOworCW91dHcoRlBHQV9OQU5EX0lOSVQsIEZQR0FfTkFORF9DVEwpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYXAzMjVyeGEvY29uZmlnLm1rIGIvYm9hcmQvYXAzMjVyeGEvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmE1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hcDMyNXJ4YS9jb25maWcubWsKQEAgLTAsMCArMSwyNiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcKKyMgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorCisjCisjIFRFWFRfQkFTRSByZWZlcnMgdG8gaW1hZ2UgX2FmdGVyXyByZWxvY2F0aW9uLgorIworIyBOT1RFOiBNdXN0IG1hdGNoIHZhbHVlIHVzZWQgaW4gdS1ib290LmxkcyAoaW4gdGhpcyBkaXJlY3RvcnkpLgorIworCitURVhUX0JBU0UgPSAweDhGRkMwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9hcDMyNXJ4YS9jcGxkLWFwMzI1cnhhLmMgYi9ib2FyZC9hcDMyNXJ4YS9jcGxkLWFwMzI1cnhhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmYWRjYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FwMzI1cnhhL2NwbGQtYXAzMjVyeGEuYwpAQCAtMCwwICsxLDIwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvamVjdDoKKyAqCSAgQ1BMRCBTbGF2ZVNlcmlhbCBDb25maWd1cmF0aW9uIHZpYSBlbWJlZGRlZCBtaWNyb3Byb2Nlc3Nvci4KKyAqCisgKiBDb3B5cmlnaHQgaW5mbzoKKyAqCisgKgkgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJICBpdCBhcyB5b3UgbGlrZS4KKyAqCisgKgkgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogRGVzY3JpcHRpb246CisgKgorICogICAgICBUaGlzIGlzIHRoZSBtYWluIHNvdXJjZSBmaWxlIHRoYXQgd2lsbCBhbGxvdyBhIG1pY3JvcHJvY2Vzc29yCisgKiAgICAgIHRvIGNvbmZpZ3VyZSBYaWxpbnggVmlydGV4LCBWaXJ0ZXgtRSwgVmlydGV4LUVNLCBWaXJ0ZXgtSUksCisgKiAgICAgIGFuZCBTcGFydGFuLUlJIGRldmljZXMgdmlhIHRoZSBTbGF2ZVNlcmlhbCBDb25maWd1cmF0aW9uIE1vZGUuCisgKiAgICAgIFRoaXMgY29kZSBpcyBkaXNjdXNzZWQgaW4gWGlsaW54IEFwcGxpY2F0aW9uIE5vdGUsIFhBUFA1MDIuCisgKgorICogSGlzdG9yeToKKyAqCSAgMy1PY3RvYmVyLTIwMDEgIE1OL01QICAtIENyZWF0ZWQKKyAqCSAgMjAtQXVndXN0LTIwMDggIFJlbmVzYXMgU29sdXRpb25zIC0gTW9kaWZpZWQgdG8gU0g3NzIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKiBTZXJpYWwgKi8KKyNkZWZpbmUgU0NJRl9CQVNFIDB4ZmZlMDAwMDAgLyogU0NJRjAgKi8KKyNkZWZpbmUgU0NTTVIJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MDApCisjZGVmaW5lIFNDQlJSCSh2dV9jaGFyICopKFNDSUZfQkFTRSArIDB4MDQpCisjZGVmaW5lIFNDU0NSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDA4KQorI2RlZmluZSBTQ19URFIJKHZ1X2NoYXIgKikoU0NJRl9CQVNFICsgMHgwQykKKyNkZWZpbmUgU0NfU1IJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MTApCisjZGVmaW5lIFNDRkNSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDE4KQorI2RlZmluZQlSRkNSCSh2dV9sb25nICopMHhGRTQwMDAyMAorCisjZGVmaW5lIFNDU0NSX0lOSVQJCTB4MDAzOAorI2RlZmluZSBTQ1NDUl9DTFIJCTB4MDAwMAorI2RlZmluZSBTQ0ZDUl9JTklUCQkweDAwMDYKKyNkZWZpbmUgU0NTTVJfSU5JVAkJMHgwMDgwCisjZGVmaW5lIFJGQ1JfQ0xSCQkweEE0MDAKKyNkZWZpbmUgU0NJX1REX0UJCTB4MDAyMAorI2RlZmluZSBTQ0lfVERSRV9DTEVBUgkweDAwZGYKKworI2RlZmluZSBCUFNfU0VUVElOR19WQUxVRQkxIC8qIDEyLjVNSHogKi8KKyNkZWZpbmUgV0FJVF9SRkNSX0NPVU5URVIJNTAwCisKKy8qIENQTEQgZGF0YSBzaXplICovCisjZGVmaW5lIENQTERfREFUQV9TSVpFCTE2OTIxNgorCisvKiBvdXQgKi8KKyNkZWZpbmUgQ1BMRF9QRkNfQURSCSgodnVfc2hvcnQgKikweEE0MDUwMTEyKQorCisjZGVmaW5lIENQTERfUFJPR19BRFIJKCh2dV9jaGFyICopMHhBNDA1MDEzMikKKyNkZWZpbmUgQ1BMRF9QUk9HX0RBVAkweDgwCisKKy8qIGluICovCisjZGVmaW5lIENQTERfSU5JVF9BRFIJKCh2dV9jaGFyICopMHhBNDA1MDEzMikKKyNkZWZpbmUgQ1BMRF9JTklUX0RBVAkweDQwCisjZGVmaW5lIENQTERfRE9ORV9BRFIJKCh2dV9jaGFyICopMHhBNDA1MDEzMikKKyNkZWZpbmUgQ1BMRF9ET05FX0RBVAkweDIwCisKKyNkZWZpbmUJSElaQ1JCCQkJKCh2dV9zaG9ydCAqKTB4QTQwNTAxNUEpCisKKy8qIGRhdGEgKi8KKyNkZWZpbmUgQ1BMRF9OT01BTF9TVEFSVAkweEEwQTgwMDAwCisjZGVmaW5lIENQTERfU0FGRV9TVEFSVAkJMHhBMEFDMDAwMAorI2RlZmluZSBNT0RFX1NXCQkJCSh2dV9jaGFyICopMHhBNDA1MDEyQQorCitzdGF0aWMgdm9pZCBpbml0X2NwbGRfbG9hZGVyKHZvaWQpCit7CisKKwkqU0NTQ1IgPSBTQ1NDUl9DTFI7CisJKlNDRkNSID0gU0NGQ1JfSU5JVDsKKwkqU0NTTVIgPSBTQ1NNUl9JTklUOworCisJKlNDQlJSID0gQlBTX1NFVFRJTkdfVkFMVUU7CisKKwkqUkZDUiA9IFJGQ1JfQ0xSOyAvKiBSZWZyZXNoIGNvdW50ZXIgY2xlYXIgKi8KKworCXdoaWxlICgqUkZDUiA8IFdBSVRfUkZDUl9DT1VOVEVSKQorCQk7CisKKwkqU0NGQ1IgPSAweDA7IC8qIFJUUkc9MDAsIFRUUkc9MDAgKi8KKwkJCQkgIC8qIE1DRT0wLFRGUlNUPTAsUkZSU1Q9MCxMT09QPTAgKi8KKwkqU0NTQ1IgPSBTQ1NDUl9JTklUOworfQorCitzdGF0aWMgaW50IGNoZWNrX3dyaXRlX3JlYWR5KHZvaWQpCit7CisJdTE2IHN0YXR1cyA9ICpTQ19TUjsKKwlyZXR1cm4gc3RhdHVzICYgU0NJX1REX0U7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NwbGRfZGF0YShjaGFyIGNoKQoreworCXdoaWxlICghY2hlY2tfd3JpdGVfcmVhZHkoKSkKKwkJOworCisJKlNDX1REUiA9IGNoOworCSpTQ19TUjsKKwkqU0NfU1IgPSBTQ0lfVERSRV9DTEVBUjsKK30KKworc3RhdGljIGludCBkZWxheSh2b2lkKQoreworCWludCBpOworCWludCBjID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKKwkJYyA9ICoodm9sYXRpbGUgaW50ICopMHhhMDAwMDAwMDsKKwl9CisJcmV0dXJuIGM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZ1bmN0aW9uOiAgICAgc2xhdmVfc2VyaWFsCisgKgorICogRGVzY3JpcHRpb246ICBJbml0aWF0ZXMgU2xhdmVTZXJpYWwgQ29uZmlndXJhdGlvbi4KKyAqICAgICAgICAgICAgICAgQ2FsbHMgU2hpZnREYXRhT3V0KCkgdG8gb3V0cHV0IHNlcmlhbCBkYXRhCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2xhdmVfc2VyaWFsKHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqZmxhc2g7CisKKwkqQ1BMRF9QUk9HX0FEUiB8PSBDUExEX1BST0dfREFUOyAvKiBQUk9HUkFNX09FIEhJR0ggKi8KKwlkZWxheSgpOworCisJLyoKKwkgKiBUb2dnbGUgUHJvZ3JhbSBQaW4gYnkgVG9nZ2xpbmcgUHJvZ3JhbV9PRSBiaXQKKwkgKiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB3cml0aW5nIHRvIHRoZSBQcm9ncmFtIFJlZ2lzdGVyIGluIHRoZSBDUExECisJICoKKwkgKiBOT1RFOiBUaGUgUHJvZ3JhbV9PRSBiaXQgc2hvdWxkIGJlIGRyaXZlbiBoaWdoIHRvIGJyaW5nIHRoZSBWaXJ0ZXgKKwkgKiAgICAgIFByb2dyYW0gUGluIGxvdy4gTGlrZXdpc2UsIGl0IHNob3VsZCBiZSBkcml2ZW4gbG93CisJICogICAgICB0byBicmluZyB0aGUgVmlydGV4IFByb2dyYW0gUGluIHRvIEhpZ2gtWgorCSAqLworCisJKkNQTERfUFJPR19BRFIgJj0gfkNQTERfUFJPR19EQVQ7IC8qIFBST0dSQU1fT0UgTE9XICovCisJZGVsYXkoKTsKKworCS8qCisJICogQnJpbmcgUHJvZ3JhbSBIaWdoLVoKKwkgKiAoRHJpdmUgUHJvZ3JhbV9PRSBiaXQgbG93IHRvIGJyaW5nIFZpcnRleCBQcm9ncmFtIFBpbiB0byBIaWdoLVoKKwkgKi8KKworCS8qIFByb2dyYW1fT0UgYml0IExvdyBicmluZ3MgdGhlIFZpcnRleCBQcm9ncmFtIFBpbiB0byBIaWdoIFo6ICovCisJKkNQTERfUFJPR19BRFIgfD0gQ1BMRF9QUk9HX0RBVDsgLyogUFJPR1JBTV9PRSBISUdIICovCisKKwl3aGlsZSAoKCpDUExEX0lOSVRfQURSICYgQ1BMRF9JTklUX0RBVCkgPT0gMCkKKwkJZGVsYXkoKTsKKworCS8qIEJlZ2luIFNsYXZlLVNlcmlhbCBDb25maWd1cmF0aW9uICovCisJZmxhc2ggPSAodW5zaWduZWQgY2hhciAqKUNQTERfTk9NQUxfU1RBUlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ1BMRF9EQVRBX1NJWkU7IGkrKykKKwkJd3JpdGVfY3BsZF9kYXRhKCpmbGFzaCsrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb246IGNoZWNrX2RvbmVfYml0CisgKgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gdGFrZXMgbW9uaXRvcnMgdGhlIENQTEQgSW5wdXQgUmVnaXN0ZXIKKyAqIAkJICAgYnkgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgRE9ORSBiaXQgaW4gdGhhdCBSZWdpc3Rlci4KKyAqICAgICAgICAgICAgICAgQnkgZG9pbmcgc28sIGl0IG1vbml0b3JzIHRoZSBYaWxpbnggVmlydGV4IGRldmljZSdzIERPTkUKKyAqICAgICAgICAgICAgICAgUGluIHRvIHNlZSBpZiBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSBoYXMgYmVlbiBwcm9wZXJseQorICogICAgICAgICAgICAgICBsb2FkZWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBjaGVja19kb25lX2JpdCh2b2lkKQoreworCXdoaWxlICghKCpDUExEX0RPTkVfQURSICYgQ1BMRF9ET05FX0RBVCkpCisJCTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRnVuY3Rpb246IGluaXRfY3BsZAorICoKKyAqIERlc2NyaXB0aW9uOiBCZWdpbnMgU2xhdmUgU2VyaWFsIGNvbmZpZ3VyYXRpb24gb2YgWGlsaW54IEZQR0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGluaXRfY3BsZCh2b2lkKQoreworCS8qIEluaXQgc2VyaWFsIGRldmljZSAqLworCWluaXRfY3BsZF9sb2FkZXIoKTsKKworCWlmICgqQ1BMRF9ET05FX0FEUiAmIENQTERfRE9ORV9EQVQpCS8qIEFscmVhZHkgRE9ORSAqLworCQlyZXR1cm47CisKKwkqSElaQ1JCID0gMHgwMDAwOworCSpDUExEX1BGQ19BRFIgPSAweDdjMDA7CQkJLyogRlBHQSBQUk9HID0gT1VUUFVUICovCisKKwkvKiB3cml0ZSBDUExEIGRhdGEgZnJvbSBOT1IgZmxhc2ggdG8gZGV2aWNlICovCisJc2xhdmVfc2VyaWFsKCk7CisKKwkvKgorCSAqIE1vbml0b3IgdGhlIERPTkUgYml0IGluIHRoZSBDUExEIElucHV0IFJlZ2lzdGVyIHRvIHNlZSBpZgorCSAqIGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bAorCSAqLworCisJY2hlY2tfZG9uZV9iaXQoKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FwMzI1cnhhL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL2FwMzI1cnhhL2xvd2xldmVsX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjY2NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYXAzMjVyeGEvbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1Lm5vYnVoaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIGJvYXJkL2FwMzI1cnhhL2xvd2xldmVsX2luaXQuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisvKgorICogQm9hcmQgc3BlY2lmaWMgbG93IGxldmVsIGluaXQgY29kZSwgY2FsbGVkIF92ZXJ5XyBlYXJseSBpbiB0aGUKKyAqIHN0YXJ0dXAgc2VxdWVuY2UuIFJlbG9jYXRpb24gdG8gU0RSQU0gaGFzIG5vdCBoYXBwZW5lZCB5ZXQsIG5vCisgKiBzdGFjayBpcyBhdmFpbGFibGUsIGJzcyBzZWN0aW9uIGhhcyBub3QgYmVlbiBpbml0aWFsaXNlZCwgZXRjLgorICoKKyAqIChOb3RlOiBBcyBubyBzdGFjayBpcyBhdmFpbGFibGUsIG5vIHN1YnJvdXRpbmVzIGNhbiBiZSBjYWxsZWQuLi4pLgorICovCisKKwkuZ2xvYmFsCWxvd2xldmVsX2luaXQKKworCS50ZXh0CisJLmFsaWduCTIKKworbG93bGV2ZWxfaW5pdDoKKwltb3YubAlEUlZDUkFfQSwgcjEKKwltb3YubCAJRFJWQ1JBX0QsIHIwCisJbW92LncJcjAsIEByMQorCisJbW92LmwJRFJWQ1JCX0EsIHIxCisJbW92LmwgCURSVkNSQl9ELCByMAorCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCVJXVENTUl9BLCByMQorCW1vdi5sIAlSV1RDU1JfRDEsIHIwCisJbW92LncJcjAsIEByMQorCisJbW92LmwJUldUQ05UX0EsIHIxCisJbW92LmwgCVJXVENOVF9ELCByMAorCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCVJXVENTUl9BLCByMQorCW1vdi5sIAlSV1RDU1JfRDIsIHIwCisJbW92LncJcjAsIEByMQorCisJbW92LmwJRlJRQ1JfQSwgcjEKKwltb3YubCAJRlJRQ1JfRCwgcjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDTU5DUl9BLCByMQorCW1vdi5sCUNNTkNSX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ1MwQkNSX0EgLHIxCisJbW92LmwJQ1MwQkNSX0QgLHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ1M0QkNSX0EgLHIxCisJbW92LmwJQ1M0QkNSX0QgLHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ1M1QUJDUl9BICxyMQorCW1vdi5sCUNTNUFCQ1JfRCAscjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDUzVCQkNSX0EgLHIxCisJbW92LmwJQ1M1QkJDUl9EICxyMAorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCUNTNkFCQ1JfQSAscjEKKwltb3YubAlDUzZBQkNSX0QgLHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ1M2QkJDUl9BICxyMQorCW1vdi5sCUNTNkJCQ1JfRCAscjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDUzBXQ1JfQSAscjEKKwltb3YubAlDUzBXQ1JfRCAscjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDUzRXQ1JfQSAscjEKKwltb3YubAlDUzRXQ1JfRCAscjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDUzVBV0NSX0EgLHIxCisJbW92LmwJQ1M1QVdDUl9EICxyMAorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCUNTNUJXQ1JfQSAscjEKKwltb3YubAlDUzVCV0NSX0QgLHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ1M2QVdDUl9BICxyMQorCW1vdi5sCUNTNkFXQ1JfRCAscjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDUzZCV0NSX0EgLHIxCisJbW92LmwJQ1M2QldDUl9EICxyMAorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCVNCU0NfU0RDUl9BLCByMQorCW1vdi5sIAlTQlNDX1NEQ1JfRDEsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19TRFdDUl9BLCByMQorCW1vdi5sIAlTQlNDX1NEV0NSX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19TRFBDUl9BLCByMQorCW1vdi5sIAlTQlNDX1NEUENSX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19SVENTUl9BLCByMQorCW1vdi5sIAlTQlNDX1JUQ1NSX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19SVENOVF9BLCByMQorCW1vdi5sIAlTQlNDX1JUQ05UX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19SVENPUl9BLCByMQorCW1vdi5sIAlTQlNDX1JUQ09SX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJU0JTQ19TRE1SM19BMSwgcjEKKwltb3YubCAJU0JTQ19TRE1SM19ELCByMAorCW1vdi5iCXIwLCBAcjEKKworCW1vdi5sCVNCU0NfU0RNUjNfQTIsIHIxCisJbW92LmwgCVNCU0NfU0RNUjNfRCwgcjAKKwltb3YuYglyMCwgQHIxCisKKwltb3YubAlTTEVFUF9DTlQsIHIxCisyOgl0c3QJcjEsIHIxCisJbm9wCisJYmYvcwkyYgorCWR0CXIxCisKKwltb3YubAlTQlNDX1NETVIzX0EzLCByMQorCW1vdi5sIAlTQlNDX1NETVIzX0QsIHIwCisJbW92LmIJcjAsIEByMQorCisJbW92LmwJU0JTQ19TRENSX0EsIHIxCisJbW92LmwgCVNCU0NfU0RDUl9EMiwgcjAKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlDQ1JfQSwgcjEKKwltb3YubCAJQ0NSX0QsIHIwCisJbW92LmwJcjAsIEByMQorCisJISBCTCBiaXQgb2ZmIChpbml0ID0gT04pICAoPyE/KQorCisJc3RjCXNyLCByMAkJCQkhIEJMIGJpdCBvZmYoaW5pdD1PTikKKwltb3YubAlTUl9NQVNLX0QsIHIxCisJYW5kCXIxLCByMAorCWxkYwlyMCwgc3IKKworCXJ0cworCSBtb3YJIzAsIHIwCisKKwkuYWxpZ24JMgorCitEUlZDUkFfQToJLmxvbmcJRFJWQ1JBCitEUlZDUkJfQToJLmxvbmcJRFJWQ1JCCitEUlZDUkFfRDoJLmxvbmcJMHg0NTU1CitEUlZDUkJfRDoJLmxvbmcJMHgwMDA1CisKK1JXVENTUl9BOgkubG9uZwlSV1RDU1IKK1JXVENOVF9BOgkubG9uZwlSV1RDTlQKK0ZSUUNSX0E6CS5sb25nCUZSUUNSCitSV1RDU1JfRDE6CS5sb25nCTB4YTUwNworUldUQ1NSX0QyOgkubG9uZwkweGE1MDQKK1JXVENOVF9EOgkubG9uZwkweDVhMDAKK0ZSUUNSX0Q6CS5sb25nCTB4MGIwNDQ3NGEKKworU0JTQ19TRENSX0E6CS5sb25nCVNCU0NfU0RDUgorU0JTQ19TRFdDUl9BOgkubG9uZwlTQlNDX1NEV0NSCitTQlNDX1NEUENSX0E6CS5sb25nCVNCU0NfU0RQQ1IKK1NCU0NfUlRDU1JfQToJLmxvbmcJU0JTQ19SVENTUgorU0JTQ19SVENOVF9BOgkubG9uZwlTQlNDX1JUQ05UCitTQlNDX1JUQ09SX0E6CS5sb25nCVNCU0NfUlRDT1IKK1NCU0NfU0RNUjNfQTE6CS5sb25nCTB4ZmU1MTAwMDAKK1NCU0NfU0RNUjNfQTI6CS5sb25nCTB4ZmU1MDAyNDIKK1NCU0NfU0RNUjNfQTM6CS5sb25nCTB4ZmU1YzAwNDIKKworU0JTQ19TRENSX0QxOgkubG9uZwkweDkyODEwMTEyCitTQlNDX1NEQ1JfRDI6CS5sb25nCTB4OTI4MTA5MTIKK1NCU0NfU0RXQ1JfRDoJLmxvbmcJMHgwNTE2MjQ4MgorU0JTQ19TRFBDUl9EOgkubG9uZwkweDAwMzAwMDg3CitTQlNDX1JUQ1NSX0Q6CS5sb25nCTB4YTU1YTAyMTIKK1NCU0NfUlRDTlRfRDoJLmxvbmcJMHhhNTVhMDAwMAorU0JTQ19SVENPUl9EOgkubG9uZwkweGE1NWEwMDQwCitTQlNDX1NETVIzX0Q6CS5sb25nCTB4MDAKKworQ01OQ1JfQToJLmxvbmcJQ01OQ1IKK0NTMEJDUl9BOgkubG9uZwlDUzBCQ1IKK0NTNEJDUl9BOgkubG9uZwlDUzRCQ1IKK0NTNUFCQ1JfQToJLmxvbmcgCUNTNUFCQ1IKK0NTNUJCQ1JfQToJLmxvbmcJQ1M1QkJDUgorQ1M2QUJDUl9BOgkubG9uZwlDUzZBQkNSCitDUzZCQkNSX0E6CS5sb25nCUNTNkJCQ1IKK0NTMFdDUl9BOgkubG9uZwlDUzBXQ1IKK0NTNFdDUl9BOgkubG9uZwlDUzRXQ1IKK0NTNUFXQ1JfQToJLmxvbmcJQ1M1QVdDUgorQ1M1QldDUl9BOgkubG9uZwlDUzVCV0NSCitDUzZBV0NSX0E6CS5sb25nCUNTNkFXQ1IKK0NTNkJXQ1JfQToJLmxvbmcJQ1M2QldDUgorCitDTU5DUl9EOgkubG9uZwkweDAwMDAwMDEzCitDUzBCQ1JfRDoJLmxvbmcJMHgyNDkyMDQwMAorQ1M0QkNSX0Q6CS5sb25nCTB4MjQ5MjA0MDAKK0NTNUFCQ1JfRDoJLmxvbmcJMHgyNDkyMDQwMAorQ1M1QkJDUl9EOgkubG9uZwkweDdmZmYwNjAwCitDUzZBQkNSX0Q6CS5sb25nCTB4MjQ5MjA0MDAKK0NTNkJCQ1JfRDoJLmxvbmcJMHgyNDkyMDYwMAorQ1MwV0NSX0Q6CS5sb25nCTB4MDAwMDA0ODAKK0NTNFdDUl9EOgkubG9uZwkweDAwMDAwNDgwCitDUzVBV0NSX0Q6CS5sb25nCTB4MDAwMDAzODAKK0NTNUJXQ1JfRDoJLmxvbmcJMHgwMDAwMDYwMAorQ1M2QVdDUl9EOgkubG9uZwkweDAwMDAwMzAwCitDUzZCV0NSX0Q6CS5sb25nCTB4MDAwMDA1NDAKKworQ0NSX0E6CQkubG9uZwkweGZmMDAwMDFjCitDQ1JfRDoJCS5sb25nCTB4MDAwMDA5MGQKKworU0xFRVBfQ05UOgkubG9uZwkweDAwMDAwODAwCitTUl9NQVNLX0Q6CS5sb25nCTB4RUZGRkZGMEYKZGlmZiAtLWdpdCBhL2JvYXJkL2FwMzI1cnhhL3UtYm9vdC5sZHMgYi9ib2FyZC9hcDMyNXJ4YS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzAzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hcDMyNXJ4YS91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ3RoIChjKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiKQorT1VUUFVUX0FSQ0goc2gpCitFTlRSWShfc3RhcnQpCisKK1NFQ1RJT05TCit7CisJLyoKKwkgICBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJuYWwgU0RSQU0gaXMgMHg4ODAwMDAwMC4KKwkgICBBbHRob3VnaCBzaXplIG9mIFNEUkFNIGNhbiBiZSBlaXRoZXIgMTYgb3IgMzIgTUJ5dGVzLAorCSAgIHdlIGFzc3VtZSAxNiBNQnl0ZXMgKGllIGlnbm9yZSB1cHBlciBoYWxmIGlmIHRoZSBmdWxsCisJICAgMzIgTUJ5dGVzIGlzIHByZXNlbnQpLgorCisJICAgTk9URTogVGhpcyBhZGRyZXNzIG11c3QgbWF0Y2ggd2l0aCB0aGUgZGVmaW5pdGlvbiBvZgorCSAgIFRFWFRfQkFTRSBpbiBjb25maWcubWsgKGluIHRoaXMgZGlyZWN0b3J5KS4KKworCSovCisJLiA9IDB4ODgwMDAwMDAgKyAoMTI4KjEwMjQqMTAyNCkgLSAoMjU2KjEwMjQpOworCisJUFJPVklERSAocmVsb2NfZHN0ID0gLik7CisKKwlQUk9WSURFIChfZnRleHQgPSAuKTsKKwlQUk9WSURFIChfZmNvZGUgPSAuKTsKKwlQUk9WSURFIChfc3RhcnQgPSAuKTsKKworCS50ZXh0IDoKKwl7CisJCWNwdS9zaDQvc3RhcnQubwkJKC50ZXh0KQorCQkuID0gQUxJR04oODE5Mik7CisJCWNvbW1vbi9lbnZpcm9ubWVudC5vCSgucHBjZW52KQorCQkuID0gQUxJR04oODE5Mik7CisJCWNvbW1vbi9lbnZpcm9ubWVudC5vCSgucHBjZW52cikKKwkJLiA9IEFMSUdOKDgxOTIpOworCQkqKC50ZXh0KQorCQkuID0gQUxJR04oNCk7CisJfSA9MHhGRgorCVBST1ZJREUgKF9lY29kZSA9IC4pOworCS5yb2RhdGEgOgorCXsKKwkJKigucm9kYXRhKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9ldGV4dCA9IC4pOworCisKKwlQUk9WSURFIChfZmRhdGEgPSAuKTsKKwkuZGF0YSA6CisJeworCQkqKC5kYXRhKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9lZGF0YSA9IC4pOworCisJUFJPVklERSAoX2Znb3QgPSAuKTsKKwkuZ290IDoKKwl7CisJCSooLmdvdCkKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChfZWdvdCA9IC4pOworCisJUFJPVklERSAoX191X2Jvb3RfY21kX3N0YXJ0ID0gLik7CisJLnVfYm9vdF9jbWQgOgorCXsKKwkJKigudV9ib290X2NtZCkKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChfX3VfYm9vdF9jbWRfZW5kID0gLik7CisKKwlQUk9WSURFIChyZWxvY19kc3RfZW5kID0gLik7CisJLyogX3JlbG9jX2RzdF9lbmQgPSAuOyAqLworCisJUFJPVklERSAoYnNzX3N0YXJ0ID0gLik7CisJUFJPVklERSAoX19ic3Nfc3RhcnQgPSAuKTsKKwkuYnNzIDoKKwl7CisJCSooLmJzcykKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChic3NfZW5kID0gLik7CisKKwlQUk9WSURFIChfZW5kID0gLik7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA4OSUKY29weSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvZGF2aW5jaS9jb21tb24vTWFrZWZpbGUKaW5kZXggNTc5ZWZlMi4uMTI3YmI2ZSAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKKysrIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vTWFrZWZpbGUKQEAgLTEsOSArMSw3IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgotIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogIyBwcm9qZWN0LgogIwpAQCAtMjUsMTAgKzIzLDEzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iailib2FyZC8kKFZFTkRPUikvY29tbW9uKQorZW5kaWYKIAotQ09CSlMJOj0gZHZfYm9hcmQubwotU09CSlMJOj0gYm9hcmRfaW5pdC5vCitMSUIJPSAkKG9iailsaWIkKFZFTkRPUikuYQorCitDT0JKUwk6PSBwc2MubyBtaXNjLm8KIAogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmMgYi9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhM2I4NwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvY29tbW9uL21pc2MuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIE1pc2NlbGFuZW91cyBEYVZpbmNpIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTHlydGVjaCA8d3d3Lmx5cnRlY2guY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworCisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50IGR2X2dldF9wbGxtX291dHB1dCh1aW50MzJfdCBwbGxtKQoreworCXJldHVybiAocGxsbSArIDEpICogKENGR19IWl9DTE9DSyAvIDEwMDAwMDApOworfQorCit2b2lkIGR2X2Rpc3BsYXlfY2xrX2luZm9zKHZvaWQpCit7CisJcHJpbnRmKCJBUk0gQ2xvY2s6ICVkTUh6XG4iLCBkdl9nZXRfcGxsbV9vdXRwdXQoUkVHKFBMTDFfUExMTSkpIC8gMik7CisJcHJpbnRmKCJERFIgQ2xvY2s6ICVkTUh6XG4iLCBkdl9nZXRfcGxsbV9vdXRwdXQoUkVHKFBMTDJfUExMTSkpIC8KKwkgICAgICAgKChSRUcoUExMMl9ESVYyKSAmIDB4MWYpICsgMSkgLyAyKTsKK30KKworLyogUmVhZCBldGhlcm5ldCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSBmb3IgRFZFVk0gY29tcGF0aWJsZSBib2FyZHMuCisgKiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgZHZldm1fcmVhZF9tYWNfYWRkcmVzcyh1aW50OF90ICpidWYpCit7CisjaWZkZWYgQ0ZHX0kyQ19FRVBST01fQUREUgorCS8qIFJlYWQgTUFDIGFkZHJlc3MuICovCisJaWYgKGkyY19yZWFkKENGR19JMkNfRUVQUk9NX0FERFIsIDB4N0YwMCwgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4sCisJCSAgICAgKHVpbnQ4X3QgKikgJmJ1ZlswXSwgNikpCisJCWdvdG8gaTJjZXJyOworCisJLyogQ2hlY2sgdGhhdCBNQUMgYWRkcmVzcyBpcyBub3QgbnVsbC4gKi8KKwlpZiAobWVtY21wKGJ1ZiwgIlwwXDBcMFwwXDBcMCIsIDYpID09IDApCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDE7IC8qIEZvdW5kICovCisKK2kyY2VycjoKKwlwcmludGYoIlJlYWQgZnJvbSBFRVBST00gQCAweCUwMnggZmFpbGVkXG4iLCBDRkdfSTJDX0VFUFJPTV9BRERSKTsKK2VycjoKKyNlbmRpZiAvKiBDRkdfSTJDX0VFUFJPTV9BRERSICovCisKKwlyZXR1cm4gMDsKK30KKworLyogSWYgdGhlcmUgaXMgYSBNQUMgYWRkcmVzcyBpbiB0aGUgZW52aXJvbm1lbnQsIGFuZCBpZiBpdCBpcyBub3QgaWRlbnRpY2FsIHRvCisgKiB0aGUgTUFDIGFkZHJlc3MgaW4gdGhlIFJPTSwgdGhlbiBhIHdhcm5pbmcgaXMgcHJpbnRlZCBhbmQgdGhlIE1BQyBhZGRyZXNzCisgKiBmcm9tIHRoZSBlbnZpcm9ubWVudCBpcyB1c2VkLgorICoKKyAqIElmIHRoZXJlIGlzIG5vIE1BQyBhZGRyZXNzIGluIHRoZSBlbnZpcm9ubWVudCwgdGhlbiBpdCB3aWxsIGJlIGluaXRpYWxpemVkCisgKiAoc2lsZW50bHkpIGZyb20gdGhlIHZhbHVlIGluIHRoZSBST00uCisgKi8KK3ZvaWQgZHZfY29uZmlndXJlX21hY19hZGRyZXNzKHVpbnQ4X3QgKnJvbV9lbmV0YWRkcikKK3sKKwlpbnQgaTsKKwl1X2ludDhfdCBlbnZfZW5ldGFkZHJbNl07CisJY2hhciAqdG1wID0gZ2V0ZW52KCJldGhhZGRyIik7CisJY2hhciAqZW5kOworCisJLyogUmVhZCBFdGhlcm5ldCBNQUMgYWRkcmVzcyBmcm9tIHRoZSBVLUJvb3QgZW52aXJvbm1lbnQuCisJICogSWYgaXQgaXMgbm90IGRlZmluZWQsIGVudl9lbmV0YWRkcltdIHdpbGwgYmUgY2xlYXJlZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWVudl9lbmV0YWRkcltpXSA9IHRtcCA/IHNpbXBsZV9zdHJ0b3VsKHRtcCwgJmVuZCwgMTYpIDogMDsKKwkJaWYgKHRtcCkKKwkJCXRtcCA9ICgqZW5kKSA/IGVuZCsxIDogZW5kOworCX0KKworCS8qIENoZWNrIGlmIFJPTSBhbmQgVS1Cb290IGVudmlyb25tZW50IE1BQyBhZGRyZXNzZXMgbWF0Y2guICovCisJaWYgKG1lbWNtcChlbnZfZW5ldGFkZHIsICJcMFwwXDBcMFwwXDAiLCA2KSAhPSAwICYmCisJICAgIG1lbWNtcChlbnZfZW5ldGFkZHIsIHJvbV9lbmV0YWRkciwgNikgIT0gMCkgeworCQlwcmludGYoIldhcm5pbmc6IE1BQyBhZGRyZXNzZXMgZG9uJ3QgbWF0Y2g6XG4iKTsKKwkJcHJpbnRmKCIgIFJPTSBNQUMgYWRkcmVzczogJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJCSAgICAgICByb21fZW5ldGFkZHJbMF0sIHJvbV9lbmV0YWRkclsxXSwKKwkJICAgICAgIHJvbV9lbmV0YWRkclsyXSwgcm9tX2VuZXRhZGRyWzNdLAorCQkgICAgICAgcm9tX2VuZXRhZGRyWzRdLCByb21fZW5ldGFkZHJbNV0pOworCQlwcmludGYoIiAgXCJldGhhZGRyXCIgdmFsdWU6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkgICAgICAgZW52X2VuZXRhZGRyWzBdLCBlbnZfZW5ldGFkZHJbMV0sCisJCSAgICAgICBlbnZfZW5ldGFkZHJbMl0sIGVudl9lbmV0YWRkclszXSwKKwkJICAgICAgIGVudl9lbmV0YWRkcls0XSwgZW52X2VuZXRhZGRyWzVdKSA7CisJCWRlYnVnKCIjIyMgVXNpbmcgTUFDIGFkZHJlc3MgZnJvbSBlbnZpcm9ubWVudFxuIik7CisJfQorCWlmICghdG1wKSB7CisJCWNoYXIgZXRoYWRkclsyMF07CisKKwkJLyogVGhlcmUgaXMgbm8gTUFDIGFkZHJlc3MgaW4gdGhlIGVudmlyb25tZW50LCBzbyB3ZSBpbml0aWFsaXplCisJCSAqIGl0IGZyb20gdGhlIHZhbHVlIGluIHRoZSBST00uICovCisJCXNwcmludGYoZXRoYWRkciwgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKKwkJCXJvbV9lbmV0YWRkclswXSwgcm9tX2VuZXRhZGRyWzFdLAorCQkJcm9tX2VuZXRhZGRyWzJdLCByb21fZW5ldGFkZHJbM10sCisJCQlyb21fZW5ldGFkZHJbNF0sIHJvbV9lbmV0YWRkcls1XSkgOworCQlkZWJ1ZygiIyMjIFNldHRpbmcgZW52aXJvbm1lbnQgZnJvbSBST00gTUFDIGFkZHJlc3MgPSBcIiVzXCJcbiIsCisJCSAgICAgIGV0aGFkZHIpOworCQlzZXRlbnYoImV0aGFkZHIiLCBldGhhZGRyKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmggYi9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1N2RiYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvY29tbW9uL21pc2MuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEx5cnRlY2ggPHd3dy5seXJ0ZWNoLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUlTQ19ICisjZGVmaW5lIF9fTUlTQ19ICisKK2V4dGVybiB2b2lkIHRpbWVyX2luaXQodm9pZCk7CitleHRlcm4gaW50IGV0aF9od19pbml0KHZvaWQpOworCit2b2lkIGR2X2Rpc3BsYXlfY2xrX2luZm9zKHZvaWQpOworaW50IGR2ZXZtX3JlYWRfbWFjX2FkZHJlc3ModWludDhfdCAqYnVmKTsKK3ZvaWQgZHZfY29uZmlndXJlX21hY19hZGRyZXNzKHVpbnQ4X3QgKnJvbV9lbmV0YWRkcik7CisKKyNlbmRpZiAvKiBfX01JU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9jb21tb24vcHNjLmMgYi9ib2FyZC9kYXZpbmNpL2NvbW1vbi9wc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGRjMDdjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vcHNjLmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBQb3dlciBhbmQgU2xlZXAgQ29udHJvbGxlciAoUFNDKSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEx5cnRlY2ggPHd3dy5seXJ0ZWNoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFRoZSBETTY0NDYgaW5jbHVkZXMgdHdvIHNlcGFyYXRlIHBvd2VyIGRvbWFpbnM6ICJBbHdheXMgT24iIGFuZCAiRFNQIi4gVGhlCisgKiAiQWx3YXlzIE9uIiBwb3dlciBkb21haW4gaXMgYWx3YXlzIG9uIHdoZW4gdGhlIGNoaXAgaXMgb24uIFRoZSAiQWx3YXlzIE9uIgorICogZG9tYWluIGlzIHBvd2VyZWQgYnkgdGhlIFZERCBwaW5zIG9mIHRoZSBETTY0NDYuIFRoZSBtYWpvcml0eSBvZiB0aGUKKyAqIERNNjQ0NidzIG1vZHVsZXMgbGllIHdpdGhpbiB0aGUgIkFsd2F5cyBPbiIgcG93ZXIgZG9tYWluLiBBIHNlcGFyYXRlCisgKiBkb21haW4gY2FsbGVkIHRoZSAiRFNQIiBkb21haW4gaG91c2VzIHRoZSBDNjR4KyBhbmQgVklDUC4gVGhlICJEU1AiIGRvbWFpbgorICogaXMgbm90IGFsd2F5cyBvbi4gVGhlICJEU1AiIHBvd2VyIGRvbWFpbiBpcyBwb3dlcmVkIGJ5IHRoZSBDVkRERFNQIHBpbnMgb2YKKyAqIHRoZSBETTY0NDYuCisgKi8KKworLyogV29ya3Mgb24gQWx3YXlzIE9uIHBvd2VyIGRvbWFpbiBvbmx5IChubyBQRCBhcmd1bWVudCkgKi8KK3ZvaWQgbHBzY19vbih1bnNpZ25lZCBpbnQgaWQpCit7CisJZHZfcmVnX3AgbWRzdGF0LCBtZGN0bDsKKworCWlmIChpZCA+PSBEQVZJTkNJX0xQU0NfR0VNKQorCQlyZXR1cm47CQkJLyogRG9uJ3Qgd29yayBvbiBEU1AgUG93ZXIgRG9tYWluICovCisKKwltZHN0YXQgPSBSRUdfUChQU0NfTURTVEFUX0JBU0UgKyAoaWQgKiA0KSk7CisJbWRjdGwgPSBSRUdfUChQU0NfTURDVExfQkFTRSArIChpZCAqIDQpKTsKKworCXdoaWxlIChSRUcoUFNDX1BUU1RBVCkgJiAweDAxKTsKKworCWlmICgoKm1kc3RhdCAmIDB4MWYpID09IDB4MDMpCisJCXJldHVybjsJCQkvKiBBbHJlYWR5IG9uIGFuZCBlbmFibGVkICovCisKKwkqbWRjdGwgfD0gMHgwMzsKKworCS8qIFNwZWNpYWwgdHJlYXRtZW50IGZvciBzb21lIG1vZHVsZXMgYXMgZm9yIHNwcnVlMTQgcC43LjQuMiAqLworCXN3aXRjaCAoaWQpIHsKKwljYXNlIERBVklOQ0lfTFBTQ19WUFNTU0xWOgorCWNhc2UgREFWSU5DSV9MUFNDX0VNQUM6CisJY2FzZSBEQVZJTkNJX0xQU0NfRU1BQ19XUkFQUEVSOgorCWNhc2UgREFWSU5DSV9MUFNDX01ESU86CisJY2FzZSBEQVZJTkNJX0xQU0NfVVNCOgorCWNhc2UgREFWSU5DSV9MUFNDX0FUQToKKwljYXNlIERBVklOQ0lfTFBTQ19WTFlOUToKKwljYXNlIERBVklOQ0lfTFBTQ19VSFBJOgorCWNhc2UgREFWSU5DSV9MUFNDX0REUl9FTUlGOgorCWNhc2UgREFWSU5DSV9MUFNDX0FFTUlGOgorCWNhc2UgREFWSU5DSV9MUFNDX01NQ19TRDoKKwljYXNlIERBVklOQ0lfTFBTQ19NRU1TVElDSzoKKwljYXNlIERBVklOQ0lfTFBTQ19NY0JTUDoKKwljYXNlIERBVklOQ0lfTFBTQ19HUElPOgorCQkqbWRjdGwgfD0gMHgyMDA7CisJCWJyZWFrOworCX0KKworCVJFRyhQU0NfUFRDTUQpID0gMHgwMTsKKworCXdoaWxlIChSRUcoUFNDX1BUU1RBVCkgJiAweDAzKTsKKwl3aGlsZSAoKCptZHN0YXQgJiAweDFmKSAhPSAweDAzKTsJLyogUHJvYmFibHkgYW4gb3ZlcmtpbGwuLi4gKi8KK30KKworLyogSWYgRFNQTElOSyBpcyB1c2VkLCB3ZSBkb24ndCB3YW50IFUtQm9vdCB0byBwb3dlciBvbiB0aGUgRFNQLiAqLworI2lmICFkZWZpbmVkKENGR19VU0VfRFNQTElOSykKK3ZvaWQgZHNwX29uKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoUkVHKFBTQ19QRFNUQVQxKSAmIDB4MWYpCisJCXJldHVybjsJCQkvKiBBbHJlYWR5IG9uICovCisKKwlSRUcoUFNDX0dCTENUTCkgfD0gMHgwMTsKKwlSRUcoUFNDX1BEQ1RMMSkgfD0gMHgwMTsKKwlSRUcoUFNDX1BEQ1RMMSkgJj0gfjB4MTAwOworCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfR0VNICogNCkpIHw9IDB4MDM7CisJUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19HRU0gKiA0KSkgJj0gMHhmZmZmZmVmZjsKKwlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0lNQ09QICogNCkpIHw9IDB4MDM7CisJUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19JTUNPUCAqIDQpKSAmPSAweGZmZmZmZWZmOworCVJFRyhQU0NfUFRDTUQpID0gMHgwMjsKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlpZiAoUkVHKFBTQ19FUENQUikgJiAweDAyKQorCQkJYnJlYWs7CisJfQorCisJUkVHKFBTQ19DSFBfU0hSVFNXKSA9IDB4MDE7CisJUkVHKFBTQ19QRENUTDEpIHw9IDB4MTAwOworCVJFRyhQU0NfRVBDQ1IpID0gMHgwMjsKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlpZiAoIShSRUcoUFNDX1BUU1RBVCkgJiAweDAyKSkKKwkJCWJyZWFrOworCX0KKworCVJFRyhQU0NfR0JMQ1RMKSAmPSB+MHgxZjsKK30KKyNlbmRpZiAvKiBDRkdfVVNFX0RTUExJTksgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvY29tbW9uL3BzYy5oIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vcHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiMjU3NQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvY29tbW9uL3BzYy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTHlydGVjaCA8d3d3Lmx5cnRlY2guY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19QU0NfSAorI2RlZmluZSBfX1BTQ19ICisKK3ZvaWQgbHBzY19vbih1bnNpZ25lZCBpbnQgaWQpOwordm9pZCBkc3Bfb24odm9pZCk7CisKKyNlbmRpZiAvKiBfX1BTQ19IICovCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9kdl9ib2FyZC5jIGIvYm9hcmQvZGF2aW5jaS9kdi1ldm0vZHZfYm9hcmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0ZWI2OC4uMDAwMDAwMAotLS0gYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9kdl9ib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+Ci0gKgotICogUGFydHMgYXJlIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIHZhcmlvdXMgVEkgc291cmNlcywgb3JpZ2luYWwgY29weXJpZ2h0Ci0gKiBmb2xsb3dzOgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGkyYy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvZW1hY19kZWZzLmg+Ci0KLURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCi1leHRlcm4gdm9pZAl0aW1lcl9pbml0KHZvaWQpOwotZXh0ZXJuIGludAlldGhfaHdfaW5pdCh2b2lkKTsKLQotCi0vKiBXb3JrcyBvbiBBbHdheXMgT24gcG93ZXIgZG9tYWluIG9ubHkgKG5vIFBEIGFyZ3VtZW50KSAqLwotdm9pZCBscHNjX29uKHVuc2lnbmVkIGludCBpZCkKLXsKLQlkdl9yZWdfcAltZHN0YXQsIG1kY3RsOwotCi0JaWYgKGlkID49IERBVklOQ0lfTFBTQ19HRU0pCi0JCXJldHVybjsJCQkvKiBEb24ndCB3b3JrIG9uIERTUCBQb3dlciBEb21haW4gKi8KLQotCW1kc3RhdCA9IFJFR19QKFBTQ19NRFNUQVRfQkFTRSArIChpZCAqIDQpKTsKLQltZGN0bCA9IFJFR19QKFBTQ19NRENUTF9CQVNFICsgKGlkICogNCkpOwotCi0Jd2hpbGUgKFJFRyhQU0NfUFRTVEFUKSAmIDB4MDEpIHs7fQotCi0JaWYgKCgqbWRzdGF0ICYgMHgxZikgPT0gMHgwMykKLQkJcmV0dXJuOwkJCS8qIEFscmVhZHkgb24gYW5kIGVuYWJsZWQgKi8KLQotCSptZGN0bCB8PSAweDAzOwotCi0JLyogU3BlY2lhbCB0cmVhdG1lbnQgZm9yIHNvbWUgbW9kdWxlcyBhcyBmb3Igc3BydWUxNCBwLjcuNC4yICovCi0JaWYgKAkoaWQgPT0gREFWSU5DSV9MUFNDX1ZQU1NTTFYpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfRU1BQykgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19FTUFDX1dSQVBQRVIpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTURJTykgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19VU0IpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfQVRBKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX1ZMWU5RKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX1VIUEkpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfRERSX0VNSUYpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfQUVNSUYpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTU1DX1NEKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX01FTVNUSUNLKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX01jQlNQKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX0dQSU8pCi0JICAgKQotCQkqbWRjdGwgfD0gMHgyMDA7Ci0KLQlSRUcoUFNDX1BUQ01EKSA9IDB4MDE7Ci0KLQl3aGlsZSAoUkVHKFBTQ19QVFNUQVQpICYgMHgwMykgezt9Ci0Jd2hpbGUgKCgqbWRzdGF0ICYgMHgxZikgIT0gMHgwMykgezt9CS8qIFByb2JhYmx5IGFuIG92ZXJraWxsLi4uICovCi19Ci0KLXZvaWQgZHNwX29uKHZvaWQpCi17Ci0JaW50CWk7Ci0KLQlpZiAoUkVHKFBTQ19QRFNUQVQxKSAmIDB4MWYpCi0JCXJldHVybjsJCQkvKiBBbHJlYWR5IG9uICovCi0KLQlSRUcoUFNDX0dCTENUTCkgfD0gMHgwMTsKLQlSRUcoUFNDX1BEQ1RMMSkgfD0gMHgwMTsKLQlSRUcoUFNDX1BEQ1RMMSkgJj0gfjB4MTAwOwotCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfR0VNICogNCkpIHw9IDB4MDM7Ci0JUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19HRU0gKiA0KSkgJj0gMHhmZmZmZmVmZjsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0lNQ09QICogNCkpIHw9IDB4MDM7Ci0JUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19JTUNPUCAqIDQpKSAmPSAweGZmZmZmZWZmOwotCVJFRyhQU0NfUFRDTUQpID0gMHgwMjsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoUkVHKFBTQ19FUENQUikgJiAweDAyKQotCQkJYnJlYWs7Ci0JfQotCi0JUkVHKFBTQ19DSFBfU0hSVFNXKSA9IDB4MDE7Ci0JUkVHKFBTQ19QRENUTDEpIHw9IDB4MTAwOwotCVJFRyhQU0NfRVBDQ1IpID0gMHgwMjsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoIShSRUcoUFNDX1BUU1RBVCkgJiAweDAyKSkKLQkJCWJyZWFrOwotCX0KLQotCVJFRyhQU0NfR0JMQ1RMKSAmPSB+MHgxZjsKLX0KLQotCi1pbnQgYm9hcmRfaW5pdCh2b2lkKQotewotCS8qIGFyY2ggbnVtYmVyIG9mIHRoZSBib2FyZCAqLwotCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfREFWSU5DSV9FVk07Ci0KLQkvKiBhZGRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwotCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UX1BBUkFNX0FERFI7Ci0KLQkvKiBXb3JrYXJvdW5kIGZvciBUTVMzMjBETTY0NDYgZXJyYXRhIDEuMy4yMiAqLwotCVJFRyhQU0NfU0lMVkVSX0JVTExFVCkgPSAwOwotCi0JLyogUG93ZXIgb24gcmVxdWlyZWQgcGVyaXBoZXJhbHMgKi8KLQlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDKTsKLQlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDX1dSQVBQRVIpOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX01ESU8pOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX0kyQyk7Ci0JbHBzY19vbihEQVZJTkNJX0xQU0NfVUFSVDApOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX1RJTUVSMSk7Ci0JbHBzY19vbihEQVZJTkNJX0xQU0NfR1BJTyk7Ci0KLQkvKiBQb3dlcnVwIHRoZSBEU1AgKi8KLQlkc3Bfb24oKTsKLQotCS8qIEJyaW5ndXAgVUFSVDAgb3V0IG9mIHJlc2V0ICovCi0JUkVHKFVBUlQwX1BXUkVNVV9NR01UKSA9IDB4MDAwMGUwMDM7Ci0KLQkvKiBFbmFibGUgR0lPMy4zViBjZWxscyB1c2VkIGZvciBFTUFDICovCi0JUkVHKFZERDNQM1ZfUFdETikgPSAwOwotCi0JLyogRW5hYmxlIFVBUlQwIE1VWCBsaW5lcyAqLwotCVJFRyhQSU5NVVgxKSB8PSAxOwotCi0JLyogRW5hYmxlIEVNQUMgYW5kIEFFTUlGIHBpbnMgKi8KLQlSRUcoUElOTVVYMCkgPSAweDgwMDAwYzFmOwotCi0JLyogRW5hYmxlIEkyQyBwaW4gTXV4ICovCi0JUkVHKFBJTk1VWDEpIHw9ICgxIDw8IDcpOwotCi0JLyogU2V0IHRoZSBCdXMgUHJpb3JpdHkgUmVnaXN0ZXIgdG8gYXBwcm9wcmlhdGUgdmFsdWUgKi8KLQlSRUcoVkJQUikgPSAweDIwOwotCi0JdGltZXJfaW5pdCgpOwotCi0JcmV0dXJuKDApOwotfQotCi1pbnQgbWlzY19pbml0X3IgKHZvaWQpCi17Ci0JdV9pbnQ4X3QJdG1wWzIwXSwgYnVmWzEwXTsKLQlpbnQJCWkgPSAwOwotCWludAkJY2xrID0gMDsKLQotCWNsayA9ICgoUkVHKFBMTDJfUExMTSkgKyAxKSAqIDI3KSAvICgoUkVHKFBMTDJfRElWMikgJiAweDFmKSArIDEpOwotCi0JcHJpbnRmICgiQVJNIENsb2NrIDogJWRNSHpcbiIsICgoUkVHKFBMTDFfUExMTSkgKyAxKSAqIDI3ICkgLyAyKTsKLQlwcmludGYgKCJERFIgQ2xvY2sgOiAlZE1IelxuIiwgKGNsayAvIDIpKTsKLQotCS8qIFNldCBFdGhlcm5ldCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSAqLwotCWlmIChpMmNfcmVhZChDRkdfSTJDX0VFUFJPTV9BRERSLCAweDdmMDAsIENGR19JMkNfRUVQUk9NX0FERFJfTEVOLCBidWYsIDYpKSB7Ci0JCXByaW50ZigiXG5FRVBST00gQCAweCUwMnggcmVhZCBGQUlMRUQhISFcbiIsIENGR19JMkNfRUVQUk9NX0FERFIpOwotCX0gZWxzZSB7Ci0JCXRtcFswXSA9IDB4ZmY7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQl0bXBbMF0gJj0gYnVmW2ldOwotCi0JCWlmICgodG1wWzBdICE9IDB4ZmYpICYmIChnZXRlbnYoImV0aGFkZHIiKSA9PSBOVUxMKSkgewotCQkJc3ByaW50ZigoY2hhciAqKSZ0bXBbMF0sICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCi0JCQkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0sIGJ1Zls1XSk7Ci0JCQlzZXRlbnYoImV0aGFkZHIiLCAoY2hhciAqKSZ0bXBbMF0pOwotCQl9Ci0JfQotCi0JaWYgKCFldGhfaHdfaW5pdCgpKQotCQlwcmludGYoImV0aGVybmV0IGluaXQgZmFpbGVkIVxuIik7Ci0KLQlpMmNfcmVhZCAoMHgzOSwgMHgwMCwgMSwgKHVfaW50OF90ICopJmksIDEpOwotCi0Jc2V0ZW52ICgidmlkZW9zdGQiLCAoKGkgICYgMHg4MCkgPyAicGFsIiA6ICJudHNjIikpOwotCi0JcmV0dXJuKDApOwotfQotCi1pbnQgZHJhbV9pbml0KHZvaWQpCi17Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0KLQlyZXR1cm4oMCk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZSBiL2JvYXJkL2RhdmluY2kvZHZldm0vTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKcmVuYW1lIHRvIGJvYXJkL2RhdmluY2kvZHZldm0vTWFrZWZpbGUKaW5kZXggNTc5ZWZlMi4uZmIzMWVlNCAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKKysrIGIvYm9hcmQvZGF2aW5jaS9kdmV2bS9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLUNPQkpTCTo9IGR2X2JvYXJkLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8KIFNPQkpTCTo9IGJvYXJkX2luaXQubwogCiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9ib2FyZF9pbml0LlMgYi9ib2FyZC9kYXZpbmNpL2R2ZXZtL2JvYXJkX2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvZGF2aW5jaS9kdi1ldm0vYm9hcmRfaW5pdC5TCnJlbmFtZSB0byBib2FyZC9kYXZpbmNpL2R2ZXZtL2JvYXJkX2luaXQuUwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vY29uZmlnLm1rIGIvYm9hcmQvZGF2aW5jaS9kdmV2bS9jb25maWcubWsKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL2NvbmZpZy5tawpyZW5hbWUgdG8gYm9hcmQvZGF2aW5jaS9kdmV2bS9jb25maWcubWsKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZHZldm0vZHZldm0uYyBiL2JvYXJkL2RhdmluY2kvZHZldm0vZHZldm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTFmOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGF2aW5jaS9kdmV2bS9kdmV2bS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgorICoKKyAqIFBhcnRzIGFyZSBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSB2YXJpb3VzIFRJIHNvdXJjZXMsIG9yaWdpbmFsIGNvcHlyaWdodAorICogZm9sbG93czoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxpMmMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2VtYWNfZGVmcy5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi9wc2MuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vbWlzYy5oIgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiB0aGUgYm9hcmQgKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0RBVklOQ0lfRVZNOworCisJLyogYWRkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVF9QQVJBTV9BRERSOworCisJLyogV29ya2Fyb3VuZCBmb3IgVE1TMzIwRE02NDQ2IGVycmF0YSAxLjMuMjIgKi8KKwlSRUcoUFNDX1NJTFZFUl9CVUxMRVQpID0gMDsKKworCS8qIFBvd2VyIG9uIHJlcXVpcmVkIHBlcmlwaGVyYWxzICovCisJbHBzY19vbihEQVZJTkNJX0xQU0NfRU1BQyk7CisJbHBzY19vbihEQVZJTkNJX0xQU0NfRU1BQ19XUkFQUEVSKTsKKwlscHNjX29uKERBVklOQ0lfTFBTQ19NRElPKTsKKwlscHNjX29uKERBVklOQ0lfTFBTQ19JMkMpOworCWxwc2Nfb24oREFWSU5DSV9MUFNDX1VBUlQwKTsKKwlscHNjX29uKERBVklOQ0lfTFBTQ19USU1FUjEpOworCWxwc2Nfb24oREFWSU5DSV9MUFNDX0dQSU8pOworCisjaWYgIWRlZmluZWQoQ0ZHX1VTRV9EU1BMSU5LKQorCS8qIFBvd2VydXAgdGhlIERTUCAqLworCWRzcF9vbigpOworI2VuZGlmIC8qIENGR19VU0VfRFNQTElOSyAqLworCisJLyogQnJpbmd1cCBVQVJUMCBvdXQgb2YgcmVzZXQgKi8KKwlSRUcoVUFSVDBfUFdSRU1VX01HTVQpID0gMHgwMDAwZTAwMzsKKworCS8qIEVuYWJsZSBHSU8zLjNWIGNlbGxzIHVzZWQgZm9yIEVNQUMgKi8KKwlSRUcoVkREM1AzVl9QV0ROKSA9IDA7CisKKwkvKiBFbmFibGUgVUFSVDAgTVVYIGxpbmVzICovCisJUkVHKFBJTk1VWDEpIHw9IDE7CisKKwkvKiBFbmFibGUgRU1BQyBhbmQgQUVNSUYgcGlucyAqLworCVJFRyhQSU5NVVgwKSA9IDB4ODAwMDBjMWY7CisKKwkvKiBFbmFibGUgSTJDIHBpbiBNdXggKi8KKwlSRUcoUElOTVVYMSkgfD0gKDEgPDwgNyk7CisKKwkvKiBTZXQgdGhlIEJ1cyBQcmlvcml0eSBSZWdpc3RlciB0byBhcHByb3ByaWF0ZSB2YWx1ZSAqLworCVJFRyhWQlBSKSA9IDB4MjA7CisKKwl0aW1lcl9pbml0KCk7CisKKwlyZXR1cm4oMCk7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXVpbnQ4X3QgdmlkZW9fbW9kZTsKKwl1aW50OF90IGVlcHJvbV9lbmV0YWRkcls2XTsKKworCWR2X2Rpc3BsYXlfY2xrX2luZm9zKCk7CisKKwkvKiBSZWFkIEV0aGVybmV0IE1BQyBhZGRyZXNzIGZyb20gRUVQUk9NIGlmIGF2YWlsYWJsZS4gKi8KKwlpZiAoZHZldm1fcmVhZF9tYWNfYWRkcmVzcyhlZXByb21fZW5ldGFkZHIpKQorCQlkdl9jb25maWd1cmVfbWFjX2FkZHJlc3MoZWVwcm9tX2VuZXRhZGRyKTsKKworCWlmICghZXRoX2h3X2luaXQoKSkKKwkJcHJpbnRmKCJldGhlcm5ldCBpbml0IGZhaWxlZCFcbiIpOworCisJaTJjX3JlYWQoMHgzOSwgMHgwMCwgMSwgJnZpZGVvX21vZGUsIDEpOworCisJc2V0ZW52KCJ2aWRlb3N0ZCIsICgodmlkZW9fbW9kZSAmIDB4ODApID8gInBhbCIgOiAibnRzYyIpKTsKKworCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZHYtZXZtL3UtYm9vdC5sZHMgYi9ib2FyZC9kYXZpbmNpL2R2ZXZtL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL3UtYm9vdC5sZHMKcmVuYW1lIHRvIGJvYXJkL2RhdmluY2kvZHZldm0vdS1ib290LmxkcwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9zY2htb29naWUvTWFrZWZpbGUgYi9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9NYWtlZmlsZQppbmRleCA1NzllZmUyLi5mYjMxZWU0IDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9NYWtlZmlsZQorKysgYi9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLUNPQkpTCTo9IGR2X2JvYXJkLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8KIFNPQkpTCTo9IGJvYXJkX2luaXQubwogCiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9kdl9ib2FyZC5jIGIvYm9hcmQvZGF2aW5jaS9zY2htb29naWUvc2NobW9vZ2llLmMKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gYm9hcmQvZGF2aW5jaS9zY2htb29naWUvZHZfYm9hcmQuYwpyZW5hbWUgdG8gYm9hcmQvZGF2aW5jaS9zY2htb29naWUvc2NobW9vZ2llLmMKaW5kZXggMzAxNzU0Ni4uOTlmZDMyNiAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9zY2htb29naWUvZHZfYm9hcmQuYworKysgYi9ib2FyZC9kYXZpbmNpL3NjaG1vb2dpZS9zY2htb29naWUuYwpAQCAtMjgsODkgKzI4LDExIEBACiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9lbWFjX2RlZnMuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vcHNjLmgiCisjaW5jbHVkZSAiLi4vY29tbW9uL21pc2MuaCIKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLWV4dGVybiB2b2lkCXRpbWVyX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CWV0aF9od19pbml0KHZvaWQpOwotCi0KLS8qIFdvcmtzIG9uIEFsd2F5cyBPbiBwb3dlciBkb21haW4gb25seSAobm8gUEQgYXJndW1lbnQpICovCi12b2lkIGxwc2Nfb24odW5zaWduZWQgaW50IGlkKQotewotCWR2X3JlZ19wCW1kc3RhdCwgbWRjdGw7Ci0KLQlpZiAoaWQgPj0gREFWSU5DSV9MUFNDX0dFTSkKLQkJcmV0dXJuOwkJCS8qIERvbid0IHdvcmsgb24gRFNQIFBvd2VyIERvbWFpbiAqLwotCi0JbWRzdGF0ID0gUkVHX1AoUFNDX01EU1RBVF9CQVNFICsgKGlkICogNCkpOwotCW1kY3RsID0gUkVHX1AoUFNDX01EQ1RMX0JBU0UgKyAoaWQgKiA0KSk7Ci0KLQl3aGlsZSAoUkVHKFBTQ19QVFNUQVQpICYgMHgwMSkgezt9Ci0KLQlpZiAoKCptZHN0YXQgJiAweDFmKSA9PSAweDAzKQotCQlyZXR1cm47CQkJLyogQWxyZWFkeSBvbiBhbmQgZW5hYmxlZCAqLwotCi0JKm1kY3RsIHw9IDB4MDM7Ci0KLQkvKiBTcGVjaWFsIHRyZWF0bWVudCBmb3Igc29tZSBtb2R1bGVzIGFzIGZvciBzcHJ1ZTE0IHAuNy40LjIgKi8KLQlpZiAoCShpZCA9PSBEQVZJTkNJX0xQU0NfVlBTU1NMVikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19FTUFDKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX0VNQUNfV1JBUFBFUikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19NRElPKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX1VTQikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19BVEEpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfVkxZTlEpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfVUhQSSkgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19ERFJfRU1JRikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19BRU1JRikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19NTUNfU0QpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTUVNU1RJQ0spIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTWNCU1ApIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfR1BJTykKLQkgICApCi0JCSptZGN0bCB8PSAweDIwMDsKLQotCVJFRyhQU0NfUFRDTUQpID0gMHgwMTsKLQotCXdoaWxlIChSRUcoUFNDX1BUU1RBVCkgJiAweDAzKSB7O30KLQl3aGlsZSAoKCptZHN0YXQgJiAweDFmKSAhPSAweDAzKSB7O30JLyogUHJvYmFibHkgYW4gb3ZlcmtpbGwuLi4gKi8KLX0KLQotdm9pZCBkc3Bfb24odm9pZCkKLXsKLQlpbnQJaTsKLQotCWlmIChSRUcoUFNDX1BEU1RBVDEpICYgMHgxZikKLQkJcmV0dXJuOwkJCS8qIEFscmVhZHkgb24gKi8KLQotCVJFRyhQU0NfR0JMQ1RMKSB8PSAweDAxOwotCVJFRyhQU0NfUERDVEwxKSB8PSAweDAxOwotCVJFRyhQU0NfUERDVEwxKSAmPSB+MHgxMDA7Ci0JUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19HRU0gKiA0KSkgfD0gMHgwMzsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0dFTSAqIDQpKSAmPSAweGZmZmZmZWZmOwotCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfSU1DT1AgKiA0KSkgfD0gMHgwMzsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0lNQ09QICogNCkpICY9IDB4ZmZmZmZlZmY7Ci0JUkVHKFBTQ19QVENNRCkgPSAweDAyOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmIChSRUcoUFNDX0VQQ1BSKSAmIDB4MDIpCi0JCQlicmVhazsKLQl9Ci0KLQlSRUcoUFNDX0NIUF9TSFJUU1cpID0gMHgwMTsKLQlSRUcoUFNDX1BEQ1RMMSkgfD0gMHgxMDA7Ci0JUkVHKFBTQ19FUENDUikgPSAweDAyOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmICghKFJFRyhQU0NfUFRTVEFUKSAmIDB4MDIpKQotCQkJYnJlYWs7Ci0JfQotCi0JUkVHKFBTQ19HQkxDVEwpICY9IH4weDFmOwotfQotCi0KIGludCBib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogYXJjaCBudW1iZXIgb2YgdGhlIGJvYXJkICovCkBAIC0xMzEsOCArNTMsMTAgQEAKIAlscHNjX29uKERBVklOQ0lfTFBTQ19USU1FUjEpOwogCWxwc2Nfb24oREFWSU5DSV9MUFNDX0dQSU8pOwogCisjaWYgIWRlZmluZWQoQ0ZHX1VTRV9EU1BMSU5LKQogCS8qIFBvd2VydXAgdGhlIERTUCAqLwogCWRzcF9vbigpOworI2VuZGlmIC8qIENGR19VU0VfRFNQTElOSyAqLwogCiAJLyogQnJpbmd1cCBVQVJUMCBvdXQgb2YgcmVzZXQgKi8KIAlSRUcoVUFSVDBfUFdSRU1VX01HTVQpID0gMHgwMDAwZTAwMzsKQEAgLTE1NywxMSArODEsMTAgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLWludCBtaXNjX2luaXRfciAodm9pZCkKK2ludCBtaXNjX2luaXRfcih2b2lkKQogewogCXVfaW50OF90CXRtcFsyMF0sIGJ1ZlsxMF07CiAJaW50CQlpID0gMDsKLQlpbnQJCWNsayA9IDA7CiAKIAkvKiBTZXQgc2VyaWFsIG51bWJlciBmcm9tIFVJRCBjaGlwICovCiAJdV9pbnQ4X3QJY3JjX3RibFsyNTZdID0gewpAQCAtMTk5LDE3ICsxMjIsMTUgQEAKIAkJCTB4YjYsIDB4ZTgsIDB4MGEsIDB4NTQsIDB4ZDcsIDB4ODksIDB4NmIsIDB4MzUKIAkJfTsKIAotCWNsayA9ICgoUkVHKFBMTDJfUExMTSkgKyAxKSAqIDI3KSAvICgoUkVHKFBMTDJfRElWMikgJiAweDFmKSArIDEpOwotCi0JcHJpbnRmICgiQVJNIENsb2NrIDogJWRNSHpcbiIsICgoUkVHKFBMTDFfUExMTSkgKyAxKSAqIDI3ICkgLyAyKTsKLQlwcmludGYgKCJERFIgQ2xvY2sgOiAlZE1IelxuIiwgKGNsayAvIDIpKTsKKwlkdl9kaXNwbGF5X2Nsa19pbmZvcygpOwogCiAJLyogU2V0IHNlcmlhbCBudW1iZXIgZnJvbSBVSUQgY2hpcCAqLwogCWlmIChpMmNfcmVhZChDRkdfVUlEX0FERFIsIDAsIDEsIGJ1ZiwgOCkpIHsKIAkJcHJpbnRmKCJcblVJRCBAIDB4JTAyeCByZWFkIEZBSUxFRCEhIVxuIiwgQ0ZHX1VJRF9BRERSKTsKIAkJZm9yY2VlbnYoInNlcmlhbCMiLCAiRkFJTEVEIik7CiAJfSBlbHNlIHsKLQkJaWYgKGJ1ZlswXSAhPSAweDcwKSB7CS8qIERldmljZSBGYW1pbHkgQ29kZSAqLworCQlpZiAoYnVmWzBdICE9IDB4NzApIHsKKwkJCS8qIERldmljZSBGYW1pbHkgQ29kZSAqLwogCQkJcHJpbnRmKCJcblVJRCBAIDB4JTAyeCByZWFkIEZBSUxFRCEhIVxuIiwgQ0ZHX1VJRF9BRERSKTsKIAkJCWZvcmNlZW52KCJzZXJpYWwjIiwgIkZBSUxFRCIpOwogCQl9CkBAIC0yMzQsMTEgKzE1NSwzIEBACiAKIAlyZXR1cm4oMCk7CiB9Ci0KLWludCBkcmFtX2luaXQodm9pZCkKLXsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKLQotCXJldHVybigwKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvc2Zmc2RyL3NmZnNkci5jIGIvYm9hcmQvZGF2aW5jaS9zZmZzZHIvc2Zmc2RyLmMKaW5kZXggZjQxMDgxZi4uZjQ3YmEwZiAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9zZmZzZHIvc2Zmc2RyLmMKKysrIGIvYm9hcmQvZGF2aW5jaS9zZmZzZHIvc2Zmc2RyLmMKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxpMmMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2VtYWNfZGVmcy5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi9wc2MuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vbWlzYy5oIgogCiAjZGVmaW5lIERBVklOQ0lfQTNDUiAgICAgKDB4MDFFMDAwMTQpCS8qIEVNSUYtQSBDUzMgY29uZmlnIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBEQVZJTkNJX0EzQ1JfVkFMICgweDNGRkZGRkZEKQkvKiBFTUlGLUEgQ1MzIHZhbHVlIGZvciBGUEdBLiAqLwpAQCAtNDEsODkgKzQzLDYgQEAKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLWV4dGVybiB2b2lkIHRpbWVyX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGV0aF9od19pbml0KHZvaWQpOwotCi0KLS8qIFdvcmtzIG9uIEFsd2F5cyBPbiBwb3dlciBkb21haW4gb25seSAobm8gUEQgYXJndW1lbnQpICovCi12b2lkIGxwc2Nfb24odW5zaWduZWQgaW50IGlkKQotewotCWR2X3JlZ19wIG1kc3RhdCwgbWRjdGw7Ci0KLQlpZiAoaWQgPj0gREFWSU5DSV9MUFNDX0dFTSkKLQkJcmV0dXJuOwkJCS8qIERvbid0IHdvcmsgb24gRFNQIFBvd2VyIERvbWFpbiAqLwotCi0JbWRzdGF0ID0gUkVHX1AoUFNDX01EU1RBVF9CQVNFICsgKGlkICogNCkpOwotCW1kY3RsID0gUkVHX1AoUFNDX01EQ1RMX0JBU0UgKyAoaWQgKiA0KSk7Ci0KLQl3aGlsZSAoUkVHKFBTQ19QVFNUQVQpICYgMHgwMSk7Ci0KLQlpZiAoKCptZHN0YXQgJiAweDFmKSA9PSAweDAzKQotCQlyZXR1cm47CQkJLyogQWxyZWFkeSBvbiBhbmQgZW5hYmxlZCAqLwotCi0JKm1kY3RsIHw9IDB4MDM7Ci0KLQkvKiBTcGVjaWFsIHRyZWF0bWVudCBmb3Igc29tZSBtb2R1bGVzIGFzIGZvciBzcHJ1ZTE0IHAuNy40LjIgKi8KLQlzd2l0Y2ggKGlkKSB7Ci0JY2FzZSBEQVZJTkNJX0xQU0NfVlBTU1NMVjoKLQljYXNlIERBVklOQ0lfTFBTQ19FTUFDOgotCWNhc2UgREFWSU5DSV9MUFNDX0VNQUNfV1JBUFBFUjoKLQljYXNlIERBVklOQ0lfTFBTQ19NRElPOgotCWNhc2UgREFWSU5DSV9MUFNDX1VTQjoKLQljYXNlIERBVklOQ0lfTFBTQ19BVEE6Ci0JY2FzZSBEQVZJTkNJX0xQU0NfVkxZTlE6Ci0JY2FzZSBEQVZJTkNJX0xQU0NfVUhQSToKLQljYXNlIERBVklOQ0lfTFBTQ19ERFJfRU1JRjoKLQljYXNlIERBVklOQ0lfTFBTQ19BRU1JRjoKLQljYXNlIERBVklOQ0lfTFBTQ19NTUNfU0Q6Ci0JY2FzZSBEQVZJTkNJX0xQU0NfTUVNU1RJQ0s6Ci0JY2FzZSBEQVZJTkNJX0xQU0NfTWNCU1A6Ci0JY2FzZSBEQVZJTkNJX0xQU0NfR1BJTzoKLQkJKm1kY3RsIHw9IDB4MjAwOwotCQlicmVhazsKLQl9Ci0KLQlSRUcoUFNDX1BUQ01EKSA9IDB4MDE7Ci0KLQl3aGlsZSAoUkVHKFBTQ19QVFNUQVQpICYgMHgwMyk7Ci0Jd2hpbGUgKCgqbWRzdGF0ICYgMHgxZikgIT0gMHgwMyk7CS8qIFByb2JhYmx5IGFuIG92ZXJraWxsLi4uICovCi19Ci0KLSNpZiAhZGVmaW5lZChDRkdfVVNFX0RTUExJTkspCi12b2lkIGRzcF9vbih2b2lkKQotewotCWludCBpOwotCi0JaWYgKFJFRyhQU0NfUERTVEFUMSkgJiAweDFmKQotCQlyZXR1cm47CQkJLyogQWxyZWFkeSBvbiAqLwotCi0JUkVHKFBTQ19HQkxDVEwpIHw9IDB4MDE7Ci0JUkVHKFBTQ19QRENUTDEpIHw9IDB4MDE7Ci0JUkVHKFBTQ19QRENUTDEpICY9IH4weDEwMDsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0dFTSAqIDQpKSB8PSAweDAzOwotCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfR0VNICogNCkpICY9IDB4ZmZmZmZlZmY7Ci0JUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19JTUNPUCAqIDQpKSB8PSAweDAzOwotCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfSU1DT1AgKiA0KSkgJj0gMHhmZmZmZmVmZjsKLQlSRUcoUFNDX1BUQ01EKSA9IDB4MDI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJaWYgKFJFRyhQU0NfRVBDUFIpICYgMHgwMikKLQkJCWJyZWFrOwotCX0KLQotCVJFRyhQU0NfQ0hQX1NIUlRTVykgPSAweDAxOwotCVJFRyhQU0NfUERDVEwxKSB8PSAweDEwMDsKLQlSRUcoUFNDX0VQQ0NSKSA9IDB4MDI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJaWYgKCEoUkVHKFBTQ19QVFNUQVQpICYgMHgwMikpCi0JCQlicmVhazsKLQl9Ci0KLQlSRUcoUFNDX0dCTENUTCkgJj0gfjB4MWY7Ci19Ci0jZW5kaWYgLyogQ0ZHX1VTRV9EU1BMSU5LICovCi0KIGludCBib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogYXJjaCBudW1iZXIgb2YgdGhlIGJvYXJkICovCkBAIC0xNzIsOCArOTEsMTAgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLS8qIFJlYWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MgZnJvbSBJbnRlZ3JpdHkgZGF0YSBzdHJ1Y3R1cmUgaW5zaWRlIEVFUFJPTS4gKi8KLWludCByZWFkX21hY19hZGRyZXNzKHVpbnQ4X3QgKmJ1ZikKKy8qIFJlYWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MgZnJvbSBJbnRlZ3JpdHkgZGF0YSBzdHJ1Y3R1cmUgaW5zaWRlIEVFUFJPTS4KKyAqIFJldHVybnMgMSBpZiBmb3VuZCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgc2Zmc2RyX3JlYWRfbWFjX2FkZHJlc3ModWludDhfdCAqYnVmKQogewogCXVfaW50MzJfdCB2YWx1ZSwgbWFjWzJdLCBhZGRyZXNzOwogCkBAIC0xODIsNyArMTAzLDcgQEAKIAkJICAgICBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiwgKHVpbnQ4X3QgKikgJnZhbHVlLCA0KSkKIAkJZ290byBlcnI7CiAJaWYgKHZhbHVlICE9IElOVEVHUklUWV9DSEVDS1dPUkRfVkFMVUUpCi0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAogCS8qIFJlYWQgU1lTQ0ZHIHN0cnVjdHVyZSBvZmZzZXQuICovCiAJaWYgKGkyY19yZWFkKENGR19JMkNfRUVQUk9NX0FERFIsIElOVEVHUklUWV9TWVNDRkdfT0ZGU0VULApAQCAtMjE2LDMwICsxMzcsMjMgQEAKIAlidWZbNF0gPSBtYWNbMV0gPj4gMjQ7CiAJYnVmWzVdID0gbWFjWzFdID4+IDE2OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIDE7IC8qIEZvdW5kICovCiAKIGVycjoKIAlwcmludGYoIlJlYWQgZnJvbSBFRVBST00gQCAweCUwMnggZmFpbGVkXG4iLCBDRkdfSTJDX0VFUFJPTV9BRERSKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogLyogUGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9uLiAqLwogaW50IG1pc2NfaW5pdF9yKHZvaWQpCiB7Ci0JaW50IGk7Ci0JdV9pbnQ4X3QgaTJjYnVmOwotCXVfaW50OF90IGVudl9lbmV0YWRkcls2XSwgZWVwcm9tX2VuZXRhZGRyWzZdOwotCWNoYXIgKnRtcCA9IGdldGVudigiZXRoYWRkciIpOwotCWNoYXIgKmVuZDsKLQlpbnQgY2xrOworCXVpbnQ4X3QgaTJjYnVmOworCXVpbnQ4X3QgZWVwcm9tX2VuZXRhZGRyWzZdOwogCiAJLyogRU1JRi1BIENTMyBjb25maWd1cmF0aW9uIGZvciBGUEdBLiAqLwogCVJFRyhEQVZJTkNJX0EzQ1IpID0gREFWSU5DSV9BM0NSX1ZBTDsKIAotCWNsayA9ICgoUkVHKFBMTDJfUExMTSkgKyAxKSAqIDI3KSAvICgoUkVHKFBMTDJfRElWMikgJiAweDFmKSArIDEpOwotCi0JcHJpbnRmKCJBUk0gQ2xvY2s6ICVkTUh6XG4iLCAoKFJFRyhQTEwxX1BMTE0pICsgMSkgKiAyNykgLyAyKTsKLQlwcmludGYoIkREUiBDbG9jazogJWRNSHpcbiIsIChjbGsgLyAyKSk7CisJZHZfZGlzcGxheV9jbGtfaW5mb3MoKTsKIAogCS8qIENvbmZpZ3VyZSBJMkMgc3dpdGNoIChQQ0E5NTQzKSB0byBlbmFibGUgY2hhbm5lbCAwLiAqLwogCWkyY2J1ZiA9IENGR19JMkNfUENBOTU0M19FTkFCTEVfQ0gwOwpAQCAtMjQ5LDQzICsxNjMsOSBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQkvKiBSZWFkIEV0aGVybmV0IE1BQyBhZGRyZXNzIGZyb20gdGhlIFUtQm9vdCBlbnZpcm9ubWVudC4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCWVudl9lbmV0YWRkcltpXSA9IHRtcCA/IHNpbXBsZV9zdHJ0b3VsKHRtcCwgJmVuZCwgMTYpIDogMDsKLQkJaWYgKHRtcCkKLQkJCXRtcCA9ICgqZW5kKSA/IGVuZCsxIDogZW5kOwotCX0KLQotCS8qIFJlYWQgRXRoZXJuZXQgTUFDIGFkZHJlc3MgZnJvbSBFRVBST00uICovCi0JaWYgKHJlYWRfbWFjX2FkZHJlc3MoZWVwcm9tX2VuZXRhZGRyKSA9PSAwKSB7Ci0JCWlmIChtZW1jbXAoZW52X2VuZXRhZGRyLCAiXDBcMFwwXDBcMFwwIiwgNikgIT0gMCAmJgotCQkgICAgbWVtY21wKGVudl9lbmV0YWRkciwgZWVwcm9tX2VuZXRhZGRyLCA2KSAhPSAwKSB7Ci0JCQlwcmludGYoIlxuV2FybmluZzogTUFDIGFkZHJlc3NlcyBkb24ndCBtYXRjaDpcbiIpOwotCQkJcHJpbnRmKCJcdEhXIE1BQyBhZGRyZXNzOiAgIgotCQkJICAgICAgICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkJCSAgICAgICBlZXByb21fZW5ldGFkZHJbMF0sIGVlcHJvbV9lbmV0YWRkclsxXSwKLQkJCSAgICAgICBlZXByb21fZW5ldGFkZHJbMl0sIGVlcHJvbV9lbmV0YWRkclszXSwKLQkJCSAgICAgICBlZXByb21fZW5ldGFkZHJbNF0sIGVlcHJvbV9lbmV0YWRkcls1XSk7Ci0JCQlwcmludGYoIlx0XCJldGhhZGRyXCIgdmFsdWU6ICIKLQkJCSAgICAgICAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCQkgICAgICAgZW52X2VuZXRhZGRyWzBdLCBlbnZfZW5ldGFkZHJbMV0sCi0JCQkgICAgICAgZW52X2VuZXRhZGRyWzJdLCBlbnZfZW5ldGFkZHJbM10sCi0JCQkgICAgICAgZW52X2VuZXRhZGRyWzRdLCBlbnZfZW5ldGFkZHJbNV0pIDsKLQkJCWRlYnVnKCIjIyMgU2V0IE1BQyBhZGRyIGZyb20gZW52aXJvbm1lbnRcbiIpOwotCQkJbWVtY3B5KGVlcHJvbV9lbmV0YWRkciwgZW52X2VuZXRhZGRyLCA2KTsKLQkJfQotCQlpZiAoIXRtcCkgewotCQkJY2hhciBldGhhZGRyWzIwXTsKLQotCQkJc3ByaW50ZihldGhhZGRyLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLAotCQkJCWVlcHJvbV9lbmV0YWRkclswXSwgZWVwcm9tX2VuZXRhZGRyWzFdLAotCQkJCWVlcHJvbV9lbmV0YWRkclsyXSwgZWVwcm9tX2VuZXRhZGRyWzNdLAotCQkJCWVlcHJvbV9lbmV0YWRkcls0XSwgZWVwcm9tX2VuZXRhZGRyWzVdKSA7Ci0JCQlkZWJ1ZygiIyMjIFNldCBlbnZpcm9ubWVudCBmcm9tIEhXIE1BQyBhZGRyID0gXCIlc1wiXG4iLAotCQkJICAgICAgZXRoYWRkcik7Ci0JCQlzZXRlbnYoImV0aGFkZHIiLCBldGhhZGRyKTsKLQkJfQotCX0KKwkvKiBSZWFkIEV0aGVybmV0IE1BQyBhZGRyZXNzIGZyb20gRUVQUk9NIGlmIGF2YWlsYWJsZS4gKi8KKwlpZiAoc2Zmc2RyX3JlYWRfbWFjX2FkZHJlc3MoZWVwcm9tX2VuZXRhZGRyKSkKKwkJZHZfY29uZmlndXJlX21hY19hZGRyZXNzKGVlcHJvbV9lbmV0YWRkcik7CiAKIAlpZiAoIWV0aF9od19pbml0KCkpCiAJCXByaW50ZigiRXRoZXJuZXQgaW5pdCBmYWlsZWRcbiIpOwpAQCAtMjk2LDExICsxNzYsMyBAQAogCiAJcmV0dXJuKDApOwogfQotCi1pbnQgZHJhbV9pbml0KHZvaWQpCi17Ci0JZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOwotCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7Ci0KLQlyZXR1cm4oMCk7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL3NvbmF0YS9NYWtlZmlsZSBiL2JvYXJkL2RhdmluY2kvc29uYXRhL01ha2VmaWxlCmluZGV4IDU3OWVmZTIuLmZiMzFlZTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmluY2kvc29uYXRhL01ha2VmaWxlCisrKyBiL2JvYXJkL2RhdmluY2kvc29uYXRhL01ha2VmaWxlCkBAIC0yNyw3ICsyNyw3IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotQ09CSlMJOj0gZHZfYm9hcmQubworQ09CSlMJOj0gJChCT0FSRCkubwogU09CSlMJOj0gYm9hcmRfaW5pdC5vCiAKIFNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvc29uYXRhL2R2X2JvYXJkLmMgYi9ib2FyZC9kYXZpbmNpL3NvbmF0YS9kdl9ib2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmY5YmM3Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2RhdmluY2kvc29uYXRhL2R2X2JvYXJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KLSAqCi0gKiBQYXJ0cyBhcmUgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdmFyaW91cyBUSSBzb3VyY2VzLCBvcmlnaW5hbCBjb3B5cmlnaHQKLSAqIGZvbGxvd3M6Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KLSAqCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8aTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9lbWFjX2RlZnMuaD4KLQotREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLWV4dGVybiB2b2lkCXRpbWVyX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CWV0aF9od19pbml0KHZvaWQpOwotCi0KLS8qIFdvcmtzIG9uIEFsd2F5cyBPbiBwb3dlciBkb21haW4gb25seSAobm8gUEQgYXJndW1lbnQpICovCi12b2lkIGxwc2Nfb24odW5zaWduZWQgaW50IGlkKQotewotCWR2X3JlZ19wCW1kc3RhdCwgbWRjdGw7Ci0KLQlpZiAoaWQgPj0gREFWSU5DSV9MUFNDX0dFTSkKLQkJcmV0dXJuOwkJCS8qIERvbid0IHdvcmsgb24gRFNQIFBvd2VyIERvbWFpbiAqLwotCi0JbWRzdGF0ID0gUkVHX1AoUFNDX01EU1RBVF9CQVNFICsgKGlkICogNCkpOwotCW1kY3RsID0gUkVHX1AoUFNDX01EQ1RMX0JBU0UgKyAoaWQgKiA0KSk7Ci0KLQl3aGlsZSAoUkVHKFBTQ19QVFNUQVQpICYgMHgwMSkgezt9Ci0KLQlpZiAoKCptZHN0YXQgJiAweDFmKSA9PSAweDAzKQotCQlyZXR1cm47CQkJLyogQWxyZWFkeSBvbiBhbmQgZW5hYmxlZCAqLwotCi0JKm1kY3RsIHw9IDB4MDM7Ci0KLQkvKiBTcGVjaWFsIHRyZWF0bWVudCBmb3Igc29tZSBtb2R1bGVzIGFzIGZvciBzcHJ1ZTE0IHAuNy40LjIgKi8KLQlpZiAoCShpZCA9PSBEQVZJTkNJX0xQU0NfVlBTU1NMVikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19FTUFDKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX0VNQUNfV1JBUFBFUikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19NRElPKSB8fAotCQkoaWQgPT0gREFWSU5DSV9MUFNDX1VTQikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19BVEEpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfVkxZTlEpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfVUhQSSkgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19ERFJfRU1JRikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19BRU1JRikgfHwKLQkJKGlkID09IERBVklOQ0lfTFBTQ19NTUNfU0QpIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTUVNU1RJQ0spIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfTWNCU1ApIHx8Ci0JCShpZCA9PSBEQVZJTkNJX0xQU0NfR1BJTykKLQkgICApCi0JCSptZGN0bCB8PSAweDIwMDsKLQotCVJFRyhQU0NfUFRDTUQpID0gMHgwMTsKLQotCXdoaWxlIChSRUcoUFNDX1BUU1RBVCkgJiAweDAzKSB7O30KLQl3aGlsZSAoKCptZHN0YXQgJiAweDFmKSAhPSAweDAzKSB7O30JLyogUHJvYmFibHkgYW4gb3ZlcmtpbGwuLi4gKi8KLX0KLQotdm9pZCBkc3Bfb24odm9pZCkKLXsKLQlpbnQJaTsKLQotCWlmIChSRUcoUFNDX1BEU1RBVDEpICYgMHgxZikKLQkJcmV0dXJuOwkJCS8qIEFscmVhZHkgb24gKi8KLQotCVJFRyhQU0NfR0JMQ1RMKSB8PSAweDAxOwotCVJFRyhQU0NfUERDVEwxKSB8PSAweDAxOwotCVJFRyhQU0NfUERDVEwxKSAmPSB+MHgxMDA7Ci0JUkVHKFBTQ19NRENUTF9CQVNFICsgKERBVklOQ0lfTFBTQ19HRU0gKiA0KSkgfD0gMHgwMzsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0dFTSAqIDQpKSAmPSAweGZmZmZmZWZmOwotCVJFRyhQU0NfTURDVExfQkFTRSArIChEQVZJTkNJX0xQU0NfSU1DT1AgKiA0KSkgfD0gMHgwMzsKLQlSRUcoUFNDX01EQ1RMX0JBU0UgKyAoREFWSU5DSV9MUFNDX0lNQ09QICogNCkpICY9IDB4ZmZmZmZlZmY7Ci0JUkVHKFBTQ19QVENNRCkgPSAweDAyOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmIChSRUcoUFNDX0VQQ1BSKSAmIDB4MDIpCi0JCQlicmVhazsKLQl9Ci0KLQlSRUcoUFNDX0NIUF9TSFJUU1cpID0gMHgwMTsKLQlSRUcoUFNDX1BEQ1RMMSkgfD0gMHgxMDA7Ci0JUkVHKFBTQ19FUENDUikgPSAweDAyOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmICghKFJFRyhQU0NfUFRTVEFUKSAmIDB4MDIpKQotCQkJYnJlYWs7Ci0JfQotCi0JUkVHKFBTQ19HQkxDVEwpICY9IH4weDFmOwotfQotCi0KLWludCBib2FyZF9pbml0KHZvaWQpCi17Ci0JLyogYXJjaCBudW1iZXIgb2YgdGhlIGJvYXJkICovCi0JZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9TT05BVEE7Ci0KLQkvKiBhZGRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLwotCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UX1BBUkFNX0FERFI7Ci0KLQkvKiBXb3JrYXJvdW5kIGZvciBUTVMzMjBETTY0NDYgZXJyYXRhIDEuMy4yMiAqLwotCVJFRyhQU0NfU0lMVkVSX0JVTExFVCkgPSAwOwotCi0JLyogUG93ZXIgb24gcmVxdWlyZWQgcGVyaXBoZXJhbHMgKi8KLQlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDKTsKLQlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDX1dSQVBQRVIpOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX01ESU8pOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX0kyQyk7Ci0JbHBzY19vbihEQVZJTkNJX0xQU0NfVUFSVDApOwotCWxwc2Nfb24oREFWSU5DSV9MUFNDX1RJTUVSMSk7Ci0JbHBzY19vbihEQVZJTkNJX0xQU0NfR1BJTyk7Ci0KLQkvKiBQb3dlcnVwIHRoZSBEU1AgKi8KLQlkc3Bfb24oKTsKLQotCS8qIEJyaW5ndXAgVUFSVDAgb3V0IG9mIHJlc2V0ICovCi0JUkVHKFVBUlQwX1BXUkVNVV9NR01UKSA9IDB4MDAwMGUwMDM7Ci0KLQkvKiBFbmFibGUgR0lPMy4zViBjZWxscyB1c2VkIGZvciBFTUFDICovCi0JUkVHKFZERDNQM1ZfUFdETikgPSAwOwotCi0JLyogRW5hYmxlIFVBUlQwIE1VWCBsaW5lcyAqLwotCVJFRyhQSU5NVVgxKSB8PSAxOwotCi0JLyogRW5hYmxlIEVNQUMgYW5kIEFFTUlGIHBpbnMgKi8KLQlSRUcoUElOTVVYMCkgPSAweDgwMDAwYzFmOwotCi0JLyogRW5hYmxlIEkyQyBwaW4gTXV4ICovCi0JUkVHKFBJTk1VWDEpIHw9ICgxIDw8IDcpOwotCi0JLyogU2V0IHRoZSBCdXMgUHJpb3JpdHkgUmVnaXN0ZXIgdG8gYXBwcm9wcmlhdGUgdmFsdWUgKi8KLQlSRUcoVkJQUikgPSAweDIwOwotCi0JdGltZXJfaW5pdCgpOwotCi0JcmV0dXJuKDApOwotfQotCi1pbnQgbWlzY19pbml0X3IgKHZvaWQpCi17Ci0JdV9pbnQ4X3QJdG1wWzIwXSwgYnVmWzEwXTsKLQlpbnQJCWkgPSAwOwotCWludAkJY2xrID0gMDsKLQotCi0JY2xrID0gKChSRUcoUExMMl9QTExNKSArIDEpICogMjcpIC8gKChSRUcoUExMMl9ESVYyKSAmIDB4MWYpICsgMSk7Ci0KLQlwcmludGYgKCJBUk0gQ2xvY2sgOiAlZE1IelxuIiwgKChSRUcoUExMMV9QTExNKSArIDEpICogMjcgKSAvIDIpOwotCXByaW50ZiAoIkREUiBDbG9jayA6ICVkTUh6XG4iLCAoY2xrIC8gMikpOwotCi0JLyogU2V0IEV0aGVybmV0IE1BQyBhZGRyZXNzIGZyb20gRUVQUk9NICovCi0JaWYgKGkyY19yZWFkKENGR19JMkNfRUVQUk9NX0FERFIsIDB4N2YwMCwgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4sIGJ1ZiwgNikpIHsKLQkJcHJpbnRmKCJcbkVFUFJPTSBAIDB4JTAyeCByZWFkIEZBSUxFRCEhIVxuIiwgQ0ZHX0kyQ19FRVBST01fQUREUik7Ci0JfSBlbHNlIHsKLQkJdG1wWzBdID0gMHhmZjsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCXRtcFswXSAmPSBidWZbaV07Ci0KLQkJaWYgKCh0bXBbMF0gIT0gMHhmZikgJiYgKGdldGVudigiZXRoYWRkciIpID09IE5VTEwpKSB7Ci0JCQlzcHJpbnRmKChjaGFyICopJnRtcFswXSwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKLQkJCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdKTsKLQkJCXNldGVudigiZXRoYWRkciIsIChjaGFyICopJnRtcFswXSk7Ci0JCX0KLQl9Ci0KLQlpZiAoIWV0aF9od19pbml0KCkpCi0JCXByaW50ZigiZXRoZXJuZXQgaW5pdCBmYWlsZWQhXG4iKTsKLQotCXJldHVybigwKTsKLX0KLQotaW50IGRyYW1faW5pdCh2b2lkKQotewotCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKLQlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwotCi0JcmV0dXJuKDApOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9zb25hdGEvc29uYXRhLmMgYi9ib2FyZC9kYXZpbmNpL3NvbmF0YS9zb25hdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmZlODI1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZGF2aW5jaS9zb25hdGEvc29uYXRhLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyAqCisgKiBQYXJ0cyBhcmUgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdmFyaW91cyBUSSBzb3VyY2VzLCBvcmlnaW5hbCBjb3B5cmlnaHQKKyAqIGZvbGxvd3M6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9lbWFjX2RlZnMuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vcHNjLmgiCisjaW5jbHVkZSAiLi4vY29tbW9uL21pc2MuaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgdGhlIGJvYXJkICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9TT05BVEE7CisKKwkvKiBhZGRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UX1BBUkFNX0FERFI7CisKKwkvKiBXb3JrYXJvdW5kIGZvciBUTVMzMjBETTY0NDYgZXJyYXRhIDEuMy4yMiAqLworCVJFRyhQU0NfU0lMVkVSX0JVTExFVCkgPSAwOworCisJLyogUG93ZXIgb24gcmVxdWlyZWQgcGVyaXBoZXJhbHMgKi8KKwlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDKTsKKwlscHNjX29uKERBVklOQ0lfTFBTQ19FTUFDX1dSQVBQRVIpOworCWxwc2Nfb24oREFWSU5DSV9MUFNDX01ESU8pOworCWxwc2Nfb24oREFWSU5DSV9MUFNDX0kyQyk7CisJbHBzY19vbihEQVZJTkNJX0xQU0NfVUFSVDApOworCWxwc2Nfb24oREFWSU5DSV9MUFNDX1RJTUVSMSk7CisJbHBzY19vbihEQVZJTkNJX0xQU0NfR1BJTyk7CisKKyNpZiAhZGVmaW5lZChDRkdfVVNFX0RTUExJTkspCisJLyogUG93ZXJ1cCB0aGUgRFNQICovCisJZHNwX29uKCk7CisjZW5kaWYgLyogQ0ZHX1VTRV9EU1BMSU5LICovCisKKwkvKiBCcmluZ3VwIFVBUlQwIG91dCBvZiByZXNldCAqLworCVJFRyhVQVJUMF9QV1JFTVVfTUdNVCkgPSAweDAwMDBlMDAzOworCisJLyogRW5hYmxlIEdJTzMuM1YgY2VsbHMgdXNlZCBmb3IgRU1BQyAqLworCVJFRyhWREQzUDNWX1BXRE4pID0gMDsKKworCS8qIEVuYWJsZSBVQVJUMCBNVVggbGluZXMgKi8KKwlSRUcoUElOTVVYMSkgfD0gMTsKKworCS8qIEVuYWJsZSBFTUFDIGFuZCBBRU1JRiBwaW5zICovCisJUkVHKFBJTk1VWDApID0gMHg4MDAwMGMxZjsKKworCS8qIEVuYWJsZSBJMkMgcGluIE11eCAqLworCVJFRyhQSU5NVVgxKSB8PSAoMSA8PCA3KTsKKworCS8qIFNldCB0aGUgQnVzIFByaW9yaXR5IFJlZ2lzdGVyIHRvIGFwcHJvcHJpYXRlIHZhbHVlICovCisJUkVHKFZCUFIpID0gMHgyMDsKKworCXRpbWVyX2luaXQoKTsKKworCXJldHVybigwKTsKK30KKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJdWludDhfdCBlZXByb21fZW5ldGFkZHJbNl07CisKKwlkdl9kaXNwbGF5X2Nsa19pbmZvcygpOworCisJLyogUmVhZCBFdGhlcm5ldCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTSBpZiBhdmFpbGFibGUuICovCisJaWYgKGR2ZXZtX3JlYWRfbWFjX2FkZHJlc3MoZWVwcm9tX2VuZXRhZGRyKSkKKwkJZHZfY29uZmlndXJlX21hY19hZGRyZXNzKGVlcHJvbV9lbmV0YWRkcik7CisKKwlpZiAoIWV0aF9od19pbml0KCkpCisJCXByaW50ZigiZXRoZXJuZXQgaW5pdCBmYWlsZWQhXG4iKTsKKworCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tNTQ0NTFldmIvbTU0NDUxZXZiLmMgYi9ib2FyZC9mcmVlc2NhbGUvbTU0NDUxZXZiL201NDQ1MWV2Yi5jCmluZGV4IDViMzNhODMuLjc2OGY0MGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tNTQ0NTFldmIvbTU0NDUxZXZiLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL201NDQ1MWV2Yi9tNTQ0NTFldmIuYwpAQCAtNDksNyArNDksNyBAQAogCSAqIFNlcmlhbCBCb290OiBUaGUgZHJhbSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGluIHN0YXJ0LlMKIAkgKiBvbmx5IHJlcXVpcmUgdG8gcmV0dXJuIERSQU0gc2l6ZQogCSAqLwotCWRyYW1zaXplID0gQ0ZHX1NEUkFNX1NJWkUgKiAweDEwMDAwMCA+PiAxOworCWRyYW1zaXplID0gQ0ZHX1NEUkFNX1NJWkUgKiAweDEwMDAwMDsKICNlbHNlCiAJdm9sYXRpbGUgc2RyYW1jX3QgKnNkcmFtID0gKHZvbGF0aWxlIHNkcmFtY190ICopKE1NQVBfU0RSQU0pOwogCXZvbGF0aWxlIGdwaW9fdCAqZ3BpbyA9ICh2b2xhdGlsZSBncGlvX3QgKikoTU1BUF9HUElPKTsKQEAgLTY3LDcgKzY3LDcgQEAKIAl9CiAJaS0tOwogCi0JZ3Bpby0+bXNjcl9zZHJhbSA9IDB4NDQ7CisJZ3Bpby0+bXNjcl9zZHJhbSA9IENGR19TRFJBTV9EUlZfU1RSRU5HVEg7CiAKIAlzZHJhbS0+c2RjczAgPSAoQ0ZHX1NEUkFNX0JBU0UgfCBpKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL201NDQ1NWV2Yi9tNTQ0NTVldmIuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tNTQ0NTVldmIvbTU0NDU1ZXZiLmMKaW5kZXggNGYwMjEyMS4uMTAwNjgyYSAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL201NDQ1NWV2Yi9tNTQ0NTVldmIuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbTU0NDU1ZXZiL201NDQ1NWV2Yi5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIH0KICNlbmRpZgkJCQkvKiBDT05GSUdfUENJICovCiAKLSNpZiBkZWZpbmVkKENGR19GTEFTSF9DRkkpCisjaWYgZGVmaW5lZChDT05GSUdfRkxBU0hfQ0ZJX0xFR0FDWSkKICNpbmNsdWRlIDxmbGFzaC5oPgogdWxvbmcgYm9hcmRfZmxhc2hfZ2V0X2xlZ2FjeSAodWxvbmcgYmFzZSwgaW50IGJhbmtudW0sIGZsYXNoX2luZm9fdCAqIGluZm8pCiB7CkBAIC0xODksNyArMTg5LDcgQEAKIAlpbmZvLT5lcmFzZV9ibGtfdG91dCAgICA9IDE2Mzg0OwogCWluZm8tPndyaXRlX3RvdXQgICAgICAgID0gMjsKIAlpbmZvLT5idWZmZXJfd3JpdGVfdG91dCA9IDU7Ci0JaW5mby0+dmVuZG9yICAgICAgICAgICAgPSAyOyAvKiBDRklfQ01EU0VUX0FNRF9TVEFOREFSRCAqLworCWluZm8tPnZlbmRvciAgICAgICAgICAgID0gMHhGRkYwOyAvKiBDRklfQ01EU0VUX0FNRF9MRUdBQ1kgKi8KIAlpbmZvLT5jbWRfcmVzZXQgICAgICAgICA9IDB4MDBGMDsKIAlpbmZvLT5pbnRlcmZhY2UgICAgICAgICA9IEZMQVNIX0NGSV9YODsKIAlpbmZvLT5sZWdhY3lfdW5sb2NrICAgICA9IDA7CkBAIC0xOTksMTIgKzE5OSwxMSBAQAogCiAJaW5mby0+ZXh0X2FkZHIgICAgICAgICAgPSAwOwogCWluZm8tPmNmaV92ZXJzaW9uICAgICAgID0gMHgzMTMzOwotCWluZm8tPmNmaV9vZmZzZXQgICAgICAgID0gMHgwMDU1OworCWluZm8tPmNmaV9vZmZzZXQgICAgICAgID0gMHgwMDAwOwogCWluZm8tPmFkZHJfdW5sb2NrMSAgICAgID0gMHgwMDAwMDU1NTsKIAlpbmZvLT5hZGRyX3VubG9jazIgICAgICA9IDB4MDAwMDAyQUE7CiAJaW5mby0+bmFtZSAgICAgICAgICAgICAgPSAiQ0ZJIGNvbmZvcm1hbnQiOwogCi0KIAlpbmZvLT5zaXplICAgICAgICAgICAgICA9IDA7CiAJaW5mby0+c2VjdG9yX2NvdW50ICAgICAgPSBDRkdfQVRNRUxfVE9UQUxTRUNUOwogCWluZm8tPnN0YXJ0WzBdID0gYmFzZTsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tNTQ0NTVldmIvbWlpLmMgYi9ib2FyZC9mcmVlc2NhbGUvbTU0NDU1ZXZiL21paS5jCmluZGV4IDdhNTlhYTAuLjBiZTU0MzkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tNTQ0NTVldmIvbWlpLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL201NDQ1NWV2Yi9taWkuYwpAQCAtMjM3LDYgKzIzNywxMCBAQAogCiAJZmVjcCA9IChmZWNfdCAqKSBpbmZvLT5taWliYXNlOwogCisJZmVjcGluX3NldGNsZWFyKGRldiwgMSk7CisKKwltaWlfcmVzZXQoaW5mbyk7CisKIAkvKiBXZSB1c2Ugc3RyaWN0bHkgcG9sbGluZyBtb2RlIG9ubHkgKi8KIAlmZWNwLT5laW1yID0gMDsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmFwL01ha2VmaWxlIGIvYm9hcmQvaW50ZWdyYXRvcmFwL01ha2VmaWxlCmluZGV4IGY3OGRlM2EuLjc5ZjUwMWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JhcC9NYWtlZmlsZQorKysgYi9ib2FyZC9pbnRlZ3JhdG9yYXAvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDcgQEAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogQ09CSlMJOj0gaW50ZWdyYXRvcmFwLm8gZmxhc2gubwotU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vIG1lbXNldHVwLm8KK1NPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCiBTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JjcC9NYWtlZmlsZSBiL2JvYXJkL2ludGVncmF0b3JjcC9NYWtlZmlsZQppbmRleCA5MjAxYWNjLi45MmExYTA3IDEwMDY0NAotLS0gYS9ib2FyZC9pbnRlZ3JhdG9yY3AvTWFrZWZpbGUKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmNwL01ha2VmaWxlCkBAIC0yNiw3ICsyNiw3IEBACiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIENPQkpTCTo9IGludGVncmF0b3JjcC5vIGZsYXNoLm8KLVNPQkpTCTo9IGxvd2xldmVsX2luaXQubyBtZW1zZXR1cC5vCitTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yY3AvbWVtc2V0dXAuUyBiL2JvYXJkL2ludGVncmF0b3JjcC9tZW1zZXR1cC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQzY2I2Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2ludGVncmF0b3JjcC9tZW1zZXR1cC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIE1lbW9yeSBzZXR1cCBmb3IgaW50ZWdyYXRvckFQCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLS8qCi0gKglNZW1vcnkgc2V0dXAKLSAqICAgICAgLSB0aGUgcmVzZXQgZGVmYXVsdHMgYXJlIGFzc3VtZWQgc3VmZmljaWVudAotICovCi0KLS5nbG9ibCBtZW1zZXR1cAotbWVtc2V0dXA6Ci0JbW92CXBjLGxyCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZSBiL2JvYXJkL3JzazcyMDMvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA2OSUKY29weSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlCmNvcHkgdG8gYm9hcmQvcnNrNzIwMy9NYWtlZmlsZQppbmRleCA1NzllZmUyLi43MzY1ZDE5IDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQorKysgYi9ib2FyZC9yc2s3MjAzL01ha2VmaWxlCkBAIC0xLDExICsxLDggQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCi0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjIENvcHlyaWdodCAoQykgMjAwNywyMDA4IE5vYnVoaXJvIEl3YW1hdHN1CisjIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+Ci0jCi0jIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0jIHByb2plY3QuCisjIHUtYm9vdC9ib2FyZC9yc2s3MjAzL01ha2VmaWxlCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTIxLDE4ICsxOCwxMyBAQAogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogIyBNQSAwMjExMS0xMzA3IFVTQQotIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorTElCCT0gbGliJChCT0FSRCkuYQogCi1DT0JKUwk6PSBkdl9ib2FyZC5vCi1TT0JKUwk6PSBib2FyZF9pbml0Lm8KLQotU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCi1TT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCitPQkpTCTo9IHJzazcyMDMubworU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKICQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCkBAIC00MSwxMCArMzMsMTEgQEAKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCiAKIGRpc3RjbGVhbjoJY2xlYW4KLQlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2JvYXJkL3JzazcyMDMvY29uZmlnLm1rIGIvYm9hcmQvcnNrNzIwMy9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhYTUxZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3JzazcyMDMvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LDIwMDggTm9idWhpcm8gSXdhbWF0c3UKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisjCisjIHUtYm9vdC9ib2FyZC9yc2s3MjAzL2NvbmZpZy5taworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorCisjCisjIFRFWFRfQkFTRSByZWZlcnMgdG8gaW1hZ2UgX2FmdGVyXyByZWxvY2F0aW9uLgorIworIyBOT1RFOiBNdXN0IG1hdGNoIHZhbHVlIHVzZWQgaW4gdS1ib290LmxkcyAoaW4gdGhpcyBkaXJlY3RvcnkpLgorIworCitURVhUX0JBU0UgPSAweDBDN0MwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9yc2s3MjAzL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL3JzazcyMDMvbG93bGV2ZWxfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDZmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9yc2s3MjAzL2xvd2xldmVsX2luaXQuUwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2J1aGlybyBJd2FtYXRzdQorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKwkuZ2xvYmFsCWxvd2xldmVsX2luaXQKKworCS50ZXh0CisJLmFsaWduCTIKKworbG93bGV2ZWxfaW5pdDoKKwkvKiBDYWNoZSBzZXR0aW5nICovCisJbW92LmwgQ0NSMV9BICxyMQorCW1vdi5sIENDUjFfRCAscjAKKwltb3YubCByMCxAcjEKKworCS8qIENvbmZpZ3VyZVBvcnRQaW5zICovCisJbW92LmwgUEVDUkwzX0EsIHIxCisJbW92LmwgUEVDUkwzX0QsIHIwCisJbW92LncgcjAsQHIxCisKKwltb3YubCBQQ0NSTDRfQSwgcjEKKwltb3YubCBQQ0NSTDRfRDAsIHIwCisJbW92LncgcjAsQHIxCisKKwltb3YubCBQRUNSTDRfQSwgcjEKKwltb3YubCBQRUNSTDRfRDAsIHIwCisJbW92LncgcjAsQHIxCisKKwltb3YubCBQRUlPUkxfQSwgcjEKKwltb3YubCBQRUlPUkxfRDAsIHIwCisJbW92LncgcjAsQHIxCisKKwltb3YubCBQQ0lPUkxfQSwgcjEKKwltb3YubCBQQ0lPUkxfRCwgcjAKKwltb3YudyByMCxAcjEKKworCW1vdi5sIFBGQ1JIMl9BLCByMQorCW1vdi5sIFBGQ1JIMl9ELCByMAorCW1vdi53IHIwLEByMQorCisJbW92LmwgUEZDUkgzX0EsIHIxCisJbW92LmwgUEZDUkgzX0QsIHIwCisJbW92LncgcjAsQHIxCisKKwltb3YubCBQRkNSSDFfQSwgcjEKKwltb3YubCBQRkNSSDFfRCwgcjAKKwltb3YudyByMCxAcjEKKworCW1vdi5sIFBGSU9SSF9BLCByMQorCW1vdi5sIFBGSU9SSF9ELCByMAorCW1vdi53IHIwLEByMQorCisJbW92LmwgUEVDUkwxX0EsIHIxCisJbW92LmwgUEVDUkwxX0QwLCByMAorCW1vdi53IHIwLEByMQorCisJbW92LmwgUEVJT1JMX0EsIHIxCisJbW92LmwgUEVJT1JMX0QxLCByMAorCW1vdi53IHIwLEByMQorCisJLyogQ29uZmlndXJlIE9wZXJhdGluZyBGcmVxdWVuY3kgKi8KKwltb3YubCBXVENTUl9BICxyMQorCW1vdi5sIFdUQ1NSX0QwICxyMAorCW1vdi53IHIwLEByMQorCisJbW92LmwgV1RDU1JfQSAscjEKKwltb3YubCBXVENTUl9EMSAscjAKKwltb3YudyByMCxAcjEKKworCW1vdi5sIFdUQ05UX0EgLHIxCisJbW92LmwgV1RDTlRfRCAscjAKKwltb3YudyByMCxAcjEKKworCS8qIFNldCBjbG9jayBtb2RlKi8KKwltb3YubCBGUlFDUl9BLHIxCisJbW92LmwgRlJRQ1JfRCxyMAorCW1vdi53IHIwLEByMQorCisJLyogQ29uZmlndXJlIEJ1cyBBbmQgTWVtb3J5ICovCitpbml0X2JzY19jczA6CisJbW92LmwgICBQQ0NSTDRfQSxyMQorCW1vdi5sICAgUENDUkw0X0QxLHIwCisJbW92LncgICByMCxAcjEKKworCW1vdi5sICAgUEVDUkwxX0EscjEKKwltb3YubCAgIFBFQ1JMMV9EMSxyMAorCW1vdi53ICAgcjAsQHIxCisKKwltb3YubCBDTU5DUl9BLHIxCisJbW92LmwgQ01OQ1JfRCxyMAorCW1vdi5sIHIwLEByMQorCisJbW92LmwgU0MwQkNSX0EscjEKKwltb3YubCBTQzBCQ1JfRCxyMAorCW1vdi5sIHIwLEByMQorCisJbW92LmwgQ1MwV0NSX0EscjEKKwltb3YubCBDUzBXQ1JfRCxyMAorCW1vdi5sIHIwLEByMQorCitpbml0X2JzY19jczE6CisJbW92LmwgICBQRUNSTDRfQSxyMQorCW1vdi5sICAgUEVDUkw0X0QxLHIwCisJbW92LncgICByMCxAcjEKKworCW1vdi5sIENTMVdDUl9BLHIxCisJbW92LmwgQ1MxV0NSX0QscjAKKwltb3YubCByMCxAcjEKKworaW5pdF9zZHJhbToKKwltb3YubAlQQ0NSTDJfQSxyMQorCW1vdi5sCVBDQ1JMMl9ELHIwCisJbW92LncJcjAsQHIxCisKKwltb3YubAlQQ0NSTDRfQSxyMQorCW1vdi5sCVBDQ1JMNF9EMixyMAorCW1vdi53ICAgcjAsQHIxCisKKwltb3YubCAgIFBDQ1JMMV9BLHIxCisJbW92LmwJUENDUkwxX0QscjAKKwltb3YudyAgIHIwLEByMQorCisJbW92LmwgICBQQ0NSTDNfQSxyMQorCW1vdi5sCVBDQ1JMM19ELHIwCisJbW92LncgICByMCxAcjEKKworCW1vdi5sIENTM0JDUl9BLHIxCisJbW92LmwgQ1MzQkNSX0QscjAKKwltb3YubCByMCxAcjEKKworCW1vdi5sIENTM1dDUl9BLHIxCisJbW92LmwgQ1MzV0NSX0QscjAKKwltb3YubCByMCxAcjEKKworCW1vdi5sIFNEQ1JfQSxyMQorCW1vdi5sIFNEQ1JfRCxyMAorCW1vdi5sIHIwLEByMQorCisJbW92LmwgUlRDT1JfQSxyMQorCW1vdi5sIFJUQ09SX0QscjAKKwltb3YubCByMCxAcjEKKworCW1vdi5sIFJUQ1NSX0EscjEKKwltb3YubCBSVENTUl9ELHIwCisJbW92LmwgcjAsQHIxCisKKwkvKiB3YWl0IDIwMHVzICovCisJbW92LmwgICBSRVBFQVRfRCxyMworCW1vdiAgICAgIzAscjIKK3JlcGVhdDA6CisJYWRkICAgICAjMSxyMgorCWNtcC9ocyAgcjMscjIKKwliZiAgICAgIHJlcGVhdDAKKwlub3AKKworCW1vdi5sIFNEUkFNX01PREUsIHIxCisJbW92ICAgIzAscjAKKwltb3YubCByMCwgQHIxCisKKwlub3AKKwlydHMKKworCS5hbGlnbiA0CisKK0NDUjFfQToJCS5sb25nIENDUjEKK0NDUjFfRDoJCS5sb25nIDB4MDAwMDA5MEIKK1BDQ1JMNF9BOgkubG9uZyAweEZGRkUzOTEwCitQQ0NSTDRfRDA6CS5sb25nIDB4MDAwMDAwMDAKK1BFQ1JMNF9BOgkubG9uZyAweEZGRkUzQTEwCitQRUNSTDRfRDA6CS5sb25nIDB4MDAwMDAwMDAKK1BFQ1JMM19BOgkubG9uZyAweEZGRkUzQTEyCitQRUNSTDNfRDoJLmxvbmcgMHgwMDAwMDAwMAorUEVJT1JMX0E6CS5sb25nIDB4RkZGRTNBMDYKK1BFSU9STF9EMDoJLmxvbmcgMHgwMDAwMUMwMAorUEVJT1JMX0QxOgkubG9uZyAweDAwMDAxQzAyCitQQ0lPUkxfQToJLmxvbmcgMHhGRkZFMzkwNgorUENJT1JMX0Q6CS5sb25nIDB4MDAwMDQwMDAKK1BGQ1JIMl9BOgkubG9uZyAweEZGRkUzQThDCitQRkNSSDJfRDoJLmxvbmcgMHgwMDAwMDAwMAorUEZDUkgzX0E6CS5sb25nIDB4RkZGRTNBOEEKK1BGQ1JIM19EOgkubG9uZyAweDAwMDAwMDAwCitQRkNSSDFfQToJLmxvbmcgMHhGRkZFM0E4RQorUEZDUkgxX0Q6CS5sb25nIDB4MDAwMDAwMDAKK1BGSU9SSF9BOgkubG9uZyAweEZGRkUzQTg0CitQRklPUkhfRDoJLmxvbmcgMHgwMDAwMDcyOQorUEVDUkwxX0E6CS5sb25nIDB4RkZGRTNBMTYKK1BFQ1JMMV9EMDoJLmxvbmcgMHgwMDAwMDAzMworCisKK1dUQ1NSX0E6CS5sb25nIDB4RkZGRTAwMDAKK1dUQ1NSX0QwOiAJLmxvbmcgMHgwMDAwQTUxOAorV1RDU1JfRDE6IAkubG9uZyAweDAwMDBBNTFECitXVENOVF9BOgkubG9uZyAweEZGRkUwMDAyCitXVENOVF9EOgkubG9uZyAweDAwMDA1QTg0CitGUlFDUl9BOgkubG9uZyAweEZGRkUwMDEwCitGUlFDUl9EOgkubG9uZyAweDAwMDAwMTA0CisKK1BDQ1JMNF9EMToJLmxvbmcgMHgwMDAwMDAxMAorUEVDUkwxX0QxOgkubG9uZyAweDAwMDAwMTMzCisKK0NNTkNSX0E6CS5sb25nIDB4RkZGQzAwMDAKK0NNTkNSX0Q6CS5sb25nIDB4MDAwMDE4MTAKK1NDMEJDUl9BOgkubG9uZyAweEZGRkMwMDA0CitTQzBCQ1JfRDoJLmxvbmcgMHgxMDAwMDQwMAorQ1MwV0NSX0E6CS5sb25nIDB4RkZGQzAwMjgKK0NTMFdDUl9EOgkubG9uZyAweDAwMDAwQjQxCitQRUNSTDRfRDE6CS5sb25nIDB4MDAwMDAxMDAKK0NTMVdDUl9BOgkubG9uZyAweEZGRkMwMDJDCitDUzFXQ1JfRDoJLmxvbmcgMHgwMDAwMEIwMQorUENDUkw0X0QyOgkubG9uZyAweDAwMDAwMDExCitQQ0NSTDNfQToJLmxvbmcgMHhGRkZFMzkxMgorUENDUkwzX0Q6CS5sb25nIDB4MDAwMDAwMTEKK1BDQ1JMMl9BOgkubG9uZyAweEZGRkUzOTE0CitQQ0NSTDJfRDoJLmxvbmcgMHgwMDAwMTExMQorUENDUkwxX0E6CS5sb25nIDB4RkZGRTM5MTYKK1BDQ1JMMV9EOgkubG9uZyAweDAwMDAxMDEwCitQRENSTDRfQToJLmxvbmcgMHhGRkZFMzk5MAorUERDUkw0X0Q6CS5sb25nIDB4MDAwMDAwMTEKK1BEQ1JMM19BOgkubG9uZyAweEZGRkUzOTkyCitQRENSTDNfRDoJLmxvbmcgMHgwMDAwMDAxMQorUERDUkwyX0E6CS5sb25nIDB4RkZGRTM5OTQKK1BEQ1JMMl9EOgkubG9uZyAweDAwMDAxMTExCitQRENSTDFfQToJLmxvbmcgMHhGRkZFMzk5NgorUERDUkwxX0Q6CS5sb25nIDB4MDAwMDEwMDAKK0NTM0JDUl9BOgkubG9uZyAweEZGRkMwMDEwCitDUzNCQ1JfRDoJLmxvbmcgMHgwMDAwNDQwMAorQ1MzV0NSX0E6CS5sb25nIDB4RkZGQzAwMzQKK0NTM1dDUl9EOgkubG9uZyAweDAwMDAyODkyCitTRENSX0E6CQkubG9uZyAweEZGRkMwMDRDCitTRENSX0Q6CQkubG9uZyAweDAwMDAwODA5CitSVENPUl9BOgkubG9uZyAweEZGRkMwMDU4CitSVENPUl9EOgkubG9uZyAweEE1NUEwMDQxCitSVENTUl9BOgkubG9uZyAweEZGRkMwMDUwCitSVENTUl9EOgkubG9uZyAweGE1NWEwMDEwCisKK1NUQkNSM19BOgkubG9uZyAweEZGRkUwNDA4CitTVEJDUjNfRDoJLmxvbmcgMHgwMDAwMDAwMAorU1RCQ1I0X0E6CS5sb25nIDB4RkZGRTA0MEMKK1NUQkNSNF9EOgkubG9uZyAweDAwMDAwMDA4CitTVEJDUjVfQToJLmxvbmcgMHhGRkZFMDQxMAorU1RCQ1I1X0Q6CS5sb25nIDB4MDAwMDAwMDAKK1NUQkNSNl9BOiAJLmxvbmcgMHhGRkZFMDQxNAorU1RCQ1I2X0Q6CS5sb25nIDB4MDAwMDAwMDIKK1NEUkFNX01PREU6CS5sb25nIDB4RkZGQzUwNDAKK1JFUEVBVF9EOgkubG9uZyAweDAwMDA5QzQwCmRpZmYgLS1naXQgYS9ib2FyZC9yc2s3MjAzL3JzazcyMDMuYyBiL2JvYXJkL3JzazcyMDMvcnNrNzIwMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjk0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9yc2s3MjAzL3JzazcyMDMuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vYnVoaXJvIEl3YW1hdHN1CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiB1LWJvb3QvYm9hcmQvcnNrNzIwMy9yc2s3MjAzLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitpbnQgY2hlY2tib2FyZCh2b2lkKQoreworCXB1dHMoIkJPQVJEOiBSZW5lc2FzIFRlY2hub2xvZ3kgUlNLNzIwM1xuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWdkLT5iZC0+YmlfbWVtc3RhcnQgPSBDRkdfU0RSQU1fQkFTRTsKKwlnZC0+YmQtPmJpX21lbXNpemUgPSBDRkdfU0RSQU1fU0laRTsKKwlwcmludGYoIkRSQU06ICAlZE1CXG4iLCBDRkdfU0RSQU1fU0laRSAvICgxMDI0ICogMTAyNCkpOworCXJldHVybiAwOworfQorCit2b2lkIGxlZF9zZXRfc3RhdGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCit7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9yc2s3MjAzL3UtYm9vdC5sZHMgYi9ib2FyZC9yc2s3MjAzL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0NDMzYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3JzazcyMDMvdS1ib290LmxkcwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2J1aGlybyBJd2FtYXRzdQorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiKQorT1VUUFVUX0FSQ0goc2gpCitFTlRSWShfc3RhcnQpCisKK1NFQ1RJT05TCit7CisJLyoKKwkgKiBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJuYWwgU0RSQU0gaXMgMHgwQzAwMDAwMC4KKwkgKgorCSAqIE5PVEU6IFRoaXMgYWRkcmVzcyBtdXN0IG1hdGNoIHdpdGggdGhlIGRlZmluaXRpb24gb2YKKwkgKlRFWFRfQkFTRSBpbiBjb25maWcubWsgKGluIHRoaXMgZGlyZWN0b3J5KS4KKwkgKi8KKworCS4gPSAweDBDMDAwMDAwICsgKDgqMTAyNCoxMDI0KSAtICgyNTYqMTAyNCk7CisKKwlQUk9WSURFIChyZWxvY19kc3QgPSAuKTsKKworCVBST1ZJREUgKF9mdGV4dCA9IC4pOworCVBST1ZJREUgKF9mY29kZSA9IC4pOworCVBST1ZJREUgKF9zdGFydCA9IC4pOworCisJLnRleHQgOgorCXsKKwkJY3B1L3NoMi9zdGFydC5vCQkoLnRleHQpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnYpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnZyKQorCQkuID0gQUxJR04oODE5Mik7CisJCSooLnRleHQpCisJCS4gPSBBTElHTig0KTsKKwl9ID0weEZGCisJUFJPVklERSAoX2Vjb2RlID0gLik7CisJLnJvZGF0YSA6CisJeworCQkqKC5yb2RhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2V0ZXh0ID0gLik7CisKKworCVBST1ZJREUgKF9mZGF0YSA9IC4pOworCS5kYXRhIDoKKwl7CisJCSooLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2VkYXRhID0gLik7CisKKwlQUk9WSURFIChfZmdvdCA9IC4pOworCS5nb3QgOgorCXsKKwkJKiguZ290KQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9lZ290ID0gLik7CisKKwlQUk9WSURFIChfX3VfYm9vdF9jbWRfc3RhcnQgPSAuKTsKKwkudV9ib290X2NtZCA6CisJeworCQkqKC51X2Jvb3RfY21kKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9fdV9ib290X2NtZF9lbmQgPSAuKTsKKworCVBST1ZJREUgKHJlbG9jX2RzdF9lbmQgPSAuKTsKKworCVBST1ZJREUgKGJzc19zdGFydCA9IC4pOworCVBST1ZJREUgKF9fYnNzX3N0YXJ0ID0gLik7CisJLmJzcyA6CisJeworCQkqKC5ic3MpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoYnNzX2VuZCA9IC4pOworCisJUFJPVklERSAoX2VuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC8uZ2l0aWdub3JlIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWI0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwLy5naXRpZ25vcmUKQEAgLTAsMCArMSw1IEBACisjCisjIEdlbmVyYXRlZCBmaWxlcworIworCisvY29uZmlnLnRtcApkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUgYi9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggNzklCmNvcHkgZnJvbSBib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQpjb3B5IHRvIGJvYXJkL3NhbXN1bmcvc21kazY0MDAvTWFrZWZpbGUKaW5kZXggNTc5ZWZlMi4uNzEzMDIyMCAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKKysrIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9NYWtlZmlsZQpAQCAtMiw3ICsyLDggQEAKICMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyMgKEMpIENvcHlyaWdodCAyMDA4CisjIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KQEAgLTI3LDE1ICsyOCwxNSBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLUNPQkpTCTo9IGR2X2JvYXJkLm8KLVNPQkpTCTo9IGJvYXJkX2luaXQubworQ09CSlMteQk6PSBzbWRrNjQwMC5vCitTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTUkNTICAgIDo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlMteToubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMteSkpCiBTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChTT0JKUykgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChTT0JKUykgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC00NCw3ICs0NSw4IEBACiAJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvY29uZmlnLm1rIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4ZDM4NwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMgRGF2aWQgTXVlbGxlciwgRUxTT0ZUIEFHLCA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KKyMKKyMgKEMpIENvcHlyaWdodCAyMDA4CisjIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyMKKyMgU0FNU1VORyBTTURLNjQwMCBib2FyZCB3aXRoIG1EaXJhYzMgKEFSTTExNzYpIGNwdQorIworIyBzZWUgaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gU0FNU1VORworCisjIE9uIFNNREs2NDAwIHdlIHVzZSB0aGUgNjQgTUIgU0RSQU0gYmFuayBhdAorIworIyAweDUwMDAwMDAwIHRvIDB4NTgwMDAwMDAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDB4NTAwMDgwMDAsIGVudHJ5IDB4NTAwMDgwMDAKKyMKKyMgd2UgbG9hZCBvdXJzZWx2ZXMgdG8gMHg1N2UwMDAwMCB3aXRob3V0IE1NVQorIyB3aXRoIE1NVSwgbG9hZCBhZGRyZXNzIGlzIGNoYW5nZWQgdG8gMHhjN2UwMDAwMAorIworIyBkb3dubG9hZCBhcmVhIGlzIDB4NTAwMGMwMDAKKworc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCisKK2lmbmRlZiBDT05GSUdfTkFORF9TUEwKK1RFWFRfQkFTRSA9ICQoUkFNX1RFWFQpCitlbHNlCitURVhUX0JBU0UgPSAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL2xvd2xldmVsX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRjODEwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9sb3dsZXZlbF9pbml0LlMKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBNZW1vcnkgU2V0dXAgc3R1ZmYgLSB0YWtlbiBmcm9tIGJsb2IgbWVtc2V0dXAuUworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAyMDAwIDIwMDEgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgSmFuLURlcmsgQmFra2VyIChKLkQuQmFra2VyQGl0cy50dWRlbGZ0Lm5sKQorICoKKyAqIE1vZGlmaWVkIGZvciB0aGUgU2Ftc3VuZyBTTURLMjQxMCBieQorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYXZpZCBNdWVsbGVyLCBFTFNPRlQgQUcsIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2luY2x1ZGUgPHMzYzY0MDAuaD4KKworI2lmZGVmIENPTkZJR19TRVJJQUwxCisjZGVmaW5lIEVMRklOX1VBUlRfQ09OU09MRV9CQVNFIChFTEZJTl9VQVJUX0JBU0UgKyBFTEZJTl9VQVJUMF9PRkZTRVQpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TRVJJQUwyKQorI2RlZmluZSBFTEZJTl9VQVJUX0NPTlNPTEVfQkFTRSAoRUxGSU5fVUFSVF9CQVNFICsgRUxGSU5fVUFSVDFfT0ZGU0VUKQorI2Vsc2UKKyNkZWZpbmUgRUxGSU5fVUFSVF9DT05TT0xFX0JBU0UgKEVMRklOX1VBUlRfQkFTRSArIEVMRklOX1VBUlQyX09GRlNFVCkKKyNlbmRpZgorCitfVEVYVF9CQVNFOgorCS53b3JkCVRFWFRfQkFTRQorCisJLmdsb2JsIGxvd2xldmVsX2luaXQKK2xvd2xldmVsX2luaXQ6CisJbW92CXIxMiwgbHIKKworCS8qIExFRCBvbiBvbmx5ICM4ICovCisJbGRyCXIwLCA9RUxGSU5fR1BJT19CQVNFCisJbGRyCXIxLCA9MHg1NTU0MDAwMAorCXN0cglyMSwgW3IwLCAjR1BOQ09OX09GRlNFVF0KKworCWxkcglyMSwgPTB4NTU1NTU1NTUKKwlzdHIJcjEsIFtyMCwgI0dQTlBVRF9PRkZTRVRdCisKKwlsZHIJcjEsID0weGYwMDAKKwlzdHIJcjEsIFtyMCwgI0dQTkRBVF9PRkZTRVRdCisKKwkvKiBEaXNhYmxlIFdhdGNoZG9nICovCisJbGRyCXIwLCA9MHg3ZTAwMDAwMAkJQDB4N2UwMDQwMDAKKwlvcnIJcjAsIHIwLCAjMHg0MDAwCisJbW92CXIxLCAjMAorCXN0cglyMSwgW3IwXQorCisJLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBlbmRpbmcgY2xlYXIgKi8KKwlsZHIJcjAsID0oRUxGSU5fR1BJT19CQVNFK0VJTlRQRU5EX09GRlNFVCkJLypFSU5UUEVORCovCisJbGRyCXIxLCBbcjBdCisJc3RyCXIxLCBbcjBdCisKKwlsZHIJcjAsID1FTEZJTl9WSUMwX0JBU0VfQUREUiAJQDB4NzEyMDAwMDAKKwlsZHIJcjEsID1FTEZJTl9WSUMxX0JBU0VfQUREUiAJQDB4NzEzMDAwMDAKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKFZJQzAgYW5kIFZJQzEpICovCisJbXZuCXIzLCAjMHgwCisJc3RyCXIzLCBbcjAsICNvSU5UTVNLXQorCXN0cglyMywgW3IxLCAjb0lOVE1TS10KKworCS8qIFNldCBhbGwgaW50ZXJydXB0cyBhcyBJUlEgKi8KKwltb3YJcjMsICMweDAKKwlzdHIJcjMsIFtyMCwgI29JTlRNT0RdCisJc3RyCXIzLCBbcjEsICNvSU5UTU9EXQorCisJLyogUGVuZGluZyBJbnRlcnJ1cHQgQ2xlYXIgKi8KKwltb3YJcjMsICMweDAKKwlzdHIJcjMsIFtyMCwgI29WRUNUQUREUl0KKwlzdHIJcjMsIFtyMSwgI29WRUNUQUREUl0KKworCS8qIGluaXQgc3lzdGVtIGNsb2NrICovCisJYmwgc3lzdGVtX2Nsb2NrX2luaXQKKworI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKKwkvKiBmb3IgVUFSVCAqLworCWJsIHVhcnRfYXNtX2luaXQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JPT1RfTkFORAorCS8qIHNpbXBsZSBpbml0IGZvciBOQU5EICovCisJYmwgbmFuZF9hc21faW5pdAorI2VuZGlmCisKKwlibAltZW1fY3RybF9hc21faW5pdAorCisvKiBXYWtldXAgc3VwcG9ydC4gRG9uJ3Qga25vdyBpZiBpdCdzIGdvaW5nIHRvIGJlIHVzZWQsIHVudGVzdGVkLiAqLworICAgICAgICBsZHIgICAgIHIwLCA9KEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBSU1RfU1RBVF9PRkZTRVQpCisgICAgICAgIGxkciAgICAgcjEsIFtyMF0KKyAgICAgICAgYmljICAgICByMSwgcjEsICMweGZmZmZmZmY3CisgICAgICAgIGNtcCAgICAgcjEsICMweDgKKyAgICAgICAgYmVxICAgICB3YWtldXBfcmVzZXQKKworMToKKwltb3YJbHIsIHIxMgorCW1vdglwYywgbHIKKword2FrZXVwX3Jlc2V0OgorCisJLyogQ2xlYXIgd2FrZXVwIHN0YXR1cyByZWdpc3RlciAqLworCWxkcglyMCwgPShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgV0FLRVVQX1NUQVRfT0ZGU0VUKQorCWxkcglyMSwgW3IwXQorCXN0cglyMSwgW3IwXQorCisgICAgICAgIC8qIExFRCB0ZXN0ICovCisgICAgICAgIGxkciAgICAgcjAsID1FTEZJTl9HUElPX0JBU0UKKyAgICAgICAgbGRyICAgICByMSwgPTB4MzAwMAorICAgICAgICBzdHIgICAgIHIxLCBbcjAsICNHUE5EQVRfT0ZGU0VUXQorCisJLyogTG9hZCByZXR1cm4gYWRkcmVzcyBhbmQganVtcCB0byBrZXJuZWwgKi8KKwlsZHIJcjAsID0oRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUcwX09GRlNFVCkKKwkvKiByMSA9IHBoeXNpY2FsIGFkZHJlc3Mgb2YgczNjNjQwMF9jcHVfcmVzdW1lIGZ1bmN0aW9uICovCisJbGRyCXIxLCBbcjBdCisJLyogSnVtcCB0byBrZXJuZWwgKHNsZWVwLXMzYzY0MDAuUykgKi8KKwltb3YJcGMsIHIxCisJbm9wCisJbm9wCisvKgorICogc3lzdGVtX2Nsb2NrX2luaXQ6IEluaXRpYWxpemUgY29yZSBjbG9jayBhbmQgYnVzIGNsb2NrLgorICogdm9pZCBzeXN0ZW1fY2xvY2tfaW5pdCh2b2lkKQorICovCitzeXN0ZW1fY2xvY2tfaW5pdDoKKwlsZHIJcjAsID1FTEZJTl9DTE9DS19QT1dFUl9CQVNFCS8qIDB4N2UwMGYwMDAgKi8KKworI2lmZGVmIENPTkZJR19TWU5DX01PREUKKwlsZHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisJbW92CXIyLCAjMHg0MAorCW9ycglyMSwgcjEsIHIyCisJc3RyCXIxLCBbcjAsICNPVEhFUlNfT0ZGU0VUXQorCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisKKwlsZHIJcjIsID0weDgwCisJb3JyCXIxLCByMSwgcjIKKwlzdHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisKK2NoZWNrX3N5bmNhY2s6CisJbGRyCXIxLCBbcjAsICNPVEhFUlNfT0ZGU0VUXQorCWxkcglyMiwgPTB4ZjAwCisJYW5kCXIxLCByMSwgcjIKKwljbXAJcjEsICMweGYwMAorCWJuZQljaGVja19zeW5jYWNrCisjZWxzZQkvKiBBU1lOQyBNb2RlICovCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisKKwkvKgorCSAqIFRoaXMgd2FzIHVuY29uZGl0aW9uYWwgaW4gb3JpZ2luYWwgU2Ftc3VuZyBzb3VyY2VzLCBidXQgaXQgZG9lc24ndAorCSAqIHNlZW0gdG8gbWFrZSBtdWNoIHNlbnNlIG9uIFMzQzY0MDAuCisJICovCisjaWZuZGVmIENPTkZJR19TM0M2NDAwCisJbGRyCXIxLCBbcjAsICNPVEhFUlNfT0ZGU0VUXQorCWJpYwlyMSwgcjEsICMweEMwCisJb3JyCXIxLCByMSwgIzB4NDAKKwlzdHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisKK3dhaXRfZm9yX2FzeW5jOgorCWxkcglyMSwgW3IwLCAjT1RIRVJTX09GRlNFVF0KKwlhbmQJcjEsIHIxLCAjMHhmMDAKKwljbXAJcjEsICMweDAKKwlibmUJd2FpdF9mb3JfYXN5bmMKKyNlbmRpZgorCisJbGRyCXIxLCBbcjAsICNPVEhFUlNfT0ZGU0VUXQorCWJpYwlyMSwgcjEsICMweDQwCisJc3RyCXIxLCBbcjAsICNPVEhFUlNfT0ZGU0VUXQorI2VuZGlmCisKKwltb3YJcjEsICMweGZmMDAKKwlvcnIJcjEsIHIxLCAjMHhmZgorCXN0cglyMSwgW3IwLCAjQVBMTF9MT0NLX09GRlNFVF0KKwlzdHIJcjEsIFtyMCwgI01QTExfTE9DS19PRkZTRVRdCisKKwkvKiBTZXQgQ2xvY2sgRGl2aWRlciAqLworCWxkciAgIAlyMSwgW3IwLCAjQ0xLX0RJVjBfT0ZGU0VUXQorCWJpYwlyMSwgcjEsICMweDMwMDAwCisJYmljCXIxLCByMSwgIzB4ZmYwMAorCWJpYwlyMSwgcjEsICMweGZmCisJbGRyCXIyLCA9Q0xLX0RJVl9WQUwKKwlvcnIJcjEsIHIxLCByMgorCXN0cglyMSwgW3IwLCAjQ0xLX0RJVjBfT0ZGU0VUXQorCisJbGRyCXIxLCA9QVBMTF9WQUwKKwlzdHIJcjEsIFtyMCwgI0FQTExfQ09OX09GRlNFVF0KKwlsZHIJcjEsID1NUExMX1ZBTAorCXN0cglyMSwgW3IwLCAjTVBMTF9DT05fT0ZGU0VUXQorCisJLyogRk9VVCBvZiBFUExMIGlzIDk2TUh6ICovCisJbGRyCXIxLCA9MHgyMDAyMDMKKwlzdHIJcjEsIFtyMCwgI0VQTExfQ09OMF9PRkZTRVRdCisJbGRyCXIxLCA9MHgwCisJc3RyCXIxLCBbcjAsICNFUExMX0NPTjFfT0ZGU0VUXQorCisJLyogQVBMTCwgTVBMTCwgRVBMTCBzZWxlY3QgdG8gRm91dCAqLworCWxkcglyMSwgW3IwLCAjQ0xLX1NSQ19PRkZTRVRdCisJb3JyCXIxLCByMSwgIzB4NworCXN0cglyMSwgW3IwLCAjQ0xLX1NSQ19PRkZTRVRdCisKKwkvKiB3YWl0IGF0IGxlYXN0IDIwMHVzIHRvIHN0YWJsaXplIGFsbCBjbG9jayAqLworCW1vdglyMSwgIzB4MTAwMDAKKzE6CXN1YnMJcjEsIHIxLCAjMQorCWJuZQkxYgorCisJLyogU3luY2hyb25pemF0aW9uIGZvciBWSUMgcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX1NZTkNfTU9ERSkKKwlsZHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisJb3JyCXIxLCByMSwgIzB4MjAKKwlzdHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisjZWxpZiAhZGVmaW5lZChDT05GSUdfUzNDNjQwMCkKKwkvKiBBY2NvcmRpbmcgdG8gNjYxNTU4dW1fUzNDNjQwMFhfcmV2MTAucGRmIDB4MjAgaXMgcmVzZXJ2ZWQgKi8KKwlsZHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisJYmljCXIxLCByMSwgIzB4MjAKKwlzdHIJcjEsIFtyMCwgI09USEVSU19PRkZTRVRdCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKworI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKKy8qCisgKiB1YXJ0X2FzbV9pbml0OiBJbml0aWFsaXplIFVBUlQncyBwaW5zCisgKi8KK3VhcnRfYXNtX2luaXQ6CisJLyogc2V0IEdQSU8gdG8gZW5hYmxlIFVBUlQgKi8KKwlsZHIJcjAsID1FTEZJTl9HUElPX0JBU0UKKwlsZHIJcjEsID0weDIyMDAyMgorCXN0ciAgIAlyMSwgW3IwLCAjR1BBQ09OX09GRlNFVF0KKwltb3YJcGMsIGxyCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CT09UX05BTkQKKy8qCisgKiBOQU5EIEludGVyZmFjZSBpbml0IGZvciBTTURLNjQwMAorICovCituYW5kX2FzbV9pbml0OgorCWxkcglyMCwgPUVMRklOX05BTkRfQkFTRQorCWxkcglyMSwgW3IwLCAjTkZDT05GX09GRlNFVF0KKwlvcnIJcjEsIHIxLCAjMHg3MAorCW9ycglyMSwgcjEsICMweDc3MDAKKwlzdHIgICAgIHIxLCBbcjAsICNORkNPTkZfT0ZGU0VUXQorCisJbGRyCXIxLCBbcjAsICNORkNPTlRfT0ZGU0VUXQorCW9ycglyMSwgcjEsICMweDA3CisJc3RyICAgICByMSwgW3IwLCAjTkZDT05UX09GRlNFVF0KKworCW1vdglwYywgbHIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9NTVUKKy8qCisgKiBNTVUgVGFibGUgZm9yIFNNREs2NDAwCisgKi8KKworCS8qIGZvcm0gYSBmaXJzdC1sZXZlbCBzZWN0aW9uIGVudHJ5ICovCisubWFjcm8gRkxfU0VDVElPTl9FTlRSWSBiYXNlLGFwLGQsYyxiCisJLndvcmQgKFxiYXNlIDw8IDIwKSB8IChcYXAgPDwgMTApIHwgXAorCSAgICAgIChcZCA8PCA1KSB8ICgxPDw0KSB8IChcYyA8PCAzKSB8IChcYiA8PCAyKSB8ICgxPDwxKQorLmVuZG0KKworLnNlY3Rpb24gLm1tdWRhdGEsICJhIgorCS5hbGlnbiAxNAorCS8qIHRoZSBmb2xsb3dpbmcgYWxpZ25tZW50IGNyZWF0ZXMgdGhlIG1tdSB0YWJsZSBhdCBhZGRyZXNzIDB4NDAwMC4gKi8KKwkuZ2xvYmwgbW11X3RhYmxlCittbXVfdGFibGU6CisJLnNldCBfX2Jhc2UsIDAKKwkvKiAxOjEgbWFwcGluZyBmb3IgZGVidWdnaW5nICovCisJLnJlcHQgMHhBMDAKKwlGTF9TRUNUSU9OX0VOVFJZIF9fYmFzZSwgMywgMCwgMCwgMAorCS5zZXQgX19iYXNlLCBfX2Jhc2UgKyAxCisJLmVuZHIKKworCS8qIGFjY2VzcyBpcyBub3QgYWxsb3dlZC4gKi8KKwkucmVwdCAweEMwMCAtIDB4QTAwCisJLndvcmQgMHgwMDAwMDAwMAorCS5lbmRyCisKKwkvKiAxMjhNQiBmb3IgU0RSQU0gMHhDMDAwMDAwMCAtPiAweDUwMDAwMDAwICovCisJLnNldCBfX2Jhc2UsIDB4NTAwCisJLnJlcHQgMHhDODAgLSAweEMwMAorCUZMX1NFQ1RJT05fRU5UUlkgX19iYXNlLCAzLCAwLCAxLCAxCisJLnNldCBfX2Jhc2UsIF9fYmFzZSArIDEKKwkuZW5kcgorCisJLyogYWNjZXNzIGlzIG5vdCBhbGxvd2VkLiAqLworCS5yZXB0IDB4MTAwMCAtIDB4YzgwCisJLndvcmQgMHgwMDAwMDAwMAorCS5lbmRyCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvc21kazY0MDAuYyBiL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvc21kazY0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ZkMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9zbWRrNjQwMC5jCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgPGQubXVlbGxlckBlbHNvZnQuY2g+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBHdWVubmFkaSBMaWFraG92ZXRraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHMzYzY0MDAuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBDUzg5MDBfVGFjcwkweDAJLyogMGNsawkJYWRkcmVzcyBzZXQtdXAJCSovCisjZGVmaW5lIENTODkwMF9UY29zCTB4NAkvKiA0Y2xrCQljaGlwIHNlbGVjdGlvbiBzZXQtdXAJKi8KKyNkZWZpbmUgQ1M4OTAwX1RhY2MJMHhFCS8qIDE0Y2xrCWFjY2VzcyBjeWNsZQkJKi8KKyNkZWZpbmUgQ1M4OTAwX1Rjb2gJMHgxCS8qIDFjbGsJCWNoaXAgc2VsZWN0aW9uIGhvbGQJKi8KKyNkZWZpbmUgQ1M4OTAwX1RhaAkweDQJLyogNGNsawkJYWRkcmVzcyBob2xkaW5nIHRpbWUJKi8KKyNkZWZpbmUgQ1M4OTAwX1RhY3AJMHg2CS8qIDZjbGsJCXBhZ2UgbW9kZSBhY2Nlc3MgY3ljbGUJKi8KKyNkZWZpbmUgQ1M4OTAwX1BNQwkweDAJLyogbm9ybWFsKDFkYXRhKXBhZ2UgbW9kZSBjb25maWd1cmF0aW9uCSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIiAic3VicyAlMCwgJTEsICMxXG4iCisJCQkgICJibmUgMWIiCisJCQkgIDogIj1yIiAobG9vcHMpIDogIjAiIChsb29wcykpOworfQorCisvKgorICogTWlzY2VsbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zCisgKi8KKworc3RhdGljIHZvaWQgY3M4OTAwX3ByZV9pbml0KHZvaWQpCit7CisJU1JPTV9CV19SRUcgJj0gfigweGYgPDwgNCk7CisJU1JPTV9CV19SRUcgfD0gKDEgPDwgNykgfCAoMSA8PCA2KSB8ICgxIDw8IDQpOworCVNST01fQkMxX1JFRyA9ICgoQ1M4OTAwX1RhY3MgPDwgMjgpICsgKENTODkwMF9UY29zIDw8IDI0KSArCisJCQkoQ1M4OTAwX1RhY2MgPDwgMTYpICsgKENTODkwMF9UY29oIDw8IDEyKSArCisJCQkoQ1M4OTAwX1RhaCA8PCA4KSArIChDUzg5MDBfVGFjcCA8PCA0KSArIENTODkwMF9QTUMpOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJY3M4OTAwX3ByZV9pbml0KCk7CisKKwkvKiBOT1ItZmxhc2ggaW4gU1JPTTAgKi8KKworCS8qIEVuYWJsZSBXQUlUICovCisJU1JPTV9CV19SRUcgfD0gNCB8IDggfCAxOworCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRTsKKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gUEhZU19TRFJBTV8xICsgMHgxMDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTworaW50IGNoZWNrYm9hcmQodm9pZCkKK3sKKwlwcmludGYoIkJvYXJkOiAgIFNNREs2NDAwXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9NTVUKK3Vsb25nIHZpcnRfdG9fcGh5X3NtZGs2NDAwKHVsb25nIGFkZHIpCit7CisJaWYgKCgweGMwMDAwMDAwIDw9IGFkZHIpICYmIChhZGRyIDwgMHhjODAwMDAwMCkpCisJCXJldHVybiBhZGRyIC0gMHhjMDAwMDAwMCArIDB4NTAwMDAwMDA7CisJZWxzZQorCQlwcmludGYoImRvIG5vdCBzdXBwb3J0IHRoaXMgYWRkcmVzcyA6ICUwOGx4XG4iLCBhZGRyKTsKKworCXJldHVybiBhZGRyOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkgJiYgZGVmaW5lZChDRkdfTkFORF9MRUdBQ1kpCisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KK2V4dGVybiBzdHJ1Y3QgbmFuZF9jaGlwIG5hbmRfZGV2X2Rlc2NbQ0ZHX01BWF9OQU5EX0RFVklDRV07Cit2b2lkIG5hbmRfaW5pdCh2b2lkKQoreworCW5hbmRfcHJvYmUoQ0ZHX05BTkRfQkFTRSk7CisJaWYgKG5hbmRfZGV2X2Rlc2NbMF0uQ2hpcElEICE9IE5BTkRfQ2hpcElEX1VOS05PV04pCisJCXByaW50X3NpemUobmFuZF9kZXZfZGVzY1swXS50b3RsZW4sICJcbiIpOworfQorI2VuZGlmCisKK3Vsb25nIGJvYXJkX2ZsYXNoX2dldF9sZWdhY3kgKHVsb25nIGJhc2UsIGludCBiYW5rbnVtLCBmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJaWYgKGJhbmtudW0gPT0gMCkgewkvKiBub24tQ0ZJIGJvb3QgZmxhc2ggKi8KKwkJaW5mby0+cG9ydHdpZHRoID0gRkxBU0hfQ0ZJXzE2QklUOworCQlpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlkxNjsKKwkJaW5mby0+aW50ZXJmYWNlID0gRkxBU0hfQ0ZJX1gxNjsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC91LWJvb3QtbmFuZC5sZHMgYi9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL3UtYm9vdC1uYW5kLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJhYjIxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC91LWJvb3QtbmFuZC5sZHMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTExNzYvc3RhcnQubwkoLnRleHQpCisJICBjcHUvYXJtMTE3Ni9zM2M2NHh4L2NwdV9pbml0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwkubW11ZGF0YSA6IHsgKigubW11ZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlIGIvYm9hcmQvc2g3Nzg1bGNyL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggNjYlCmNvcHkgZnJvbSBib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQpjb3B5IHRvIGJvYXJkL3NoNzc4NWxjci9NYWtlZmlsZQppbmRleCA1NzllZmUyLi5iMWI1MzhjIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQorKysgYi9ib2FyZC9zaDc3ODVsY3IvTWFrZWZpbGUKQEAgLTEsMTEgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKLSMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgotIwotIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotIyBwcm9qZWN0LgorIyBDb3B5cmlnaHQgKEMpIDIwMDggIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMjEsMjEgKzE1LDE2IEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAjIE1BIDAyMTExLTEzMDcgVVNBCi0jCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCitMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLUNPQkpTCTo9IGR2X2JvYXJkLm8KLVNPQkpTCTo9IGJvYXJkX2luaXQubworQ09CSlMJOj0gc2g3Nzg1bGNyLm8gc2VsZmNoZWNrLm8gcnRsODE2OV9tYWMubworU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLVNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQotU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQotCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoQ09CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKENPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC00NCw3ICszMyw4IEBACiAJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2JvYXJkL3NoNzc4NWxjci9jb25maWcubWsgYi9ib2FyZC9zaDc3ODVsY3IvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzYxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zaDc3ODVsY3IvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3CisjIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKworIworIyBURVhUX0JBU0UgcmVmZXJzIHRvIGltYWdlIF9hZnRlcl8gcmVsb2NhdGlvbi4KKyMKKyMgTk9URTogTXVzdCBtYXRjaCB2YWx1ZSB1c2VkIGluIHUtYm9vdC5sZHMgKGluIHRoaXMgZGlyZWN0b3J5KS4KKyMKK1RFWFRfQkFTRSA9IDB4MGZmODAwMDAKKwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2g3Nzg1bGNyL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL3NoNzc4NWxjci9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyNjI5NgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NoNzc4NWxjci9sb3dsZXZlbF9pbml0LlMKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWW9zaGloaXJvIFNoaW1vZGEgPHNoaW1vZGEueW9zaGloaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworLm1hY3JvCXdyaXRlMzIsIGFkZHIsIGRhdGEKKwltb3YubCBcYWRkciAscjEKKwltb3YubCBcZGF0YSAscjAKKwltb3YubCByMCwgQHIxCisuZW5kbQorCisubWFjcm8Jd3JpdGUxNiwgYWRkciwgZGF0YQorCW1vdi5sIFxhZGRyICxyMQorCW1vdi5sIFxkYXRhICxyMAorCW1vdi53IHIwLCBAcjEKKy5lbmRtCisKKy5tYWNybwl3cml0ZTgsIGFkZHIsIGRhdGEKKwltb3YubCBcYWRkciAscjEKKwltb3YubCBcZGF0YSAscjAKKwltb3YuYiByMCwgQHIxCisuZW5kbQorCisubWFjcm8Jd2FpdF90aW1lciwgdGltZQorCW1vdi5sCVx0aW1lICxyMworMToKKwlub3AKKwl0c3QJcjMsIHIzCisJYmYvcwkxYgorCWR0CXIzCisuZW5kbQorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisJLmdsb2JhbAlsb3dsZXZlbF9pbml0CisKKwkudGV4dAorCS5hbGlnbgkyCisKK2xvd2xldmVsX2luaXQ6CisJd2FpdF90aW1lcglXQUlUXzIwMFVTCisJd2FpdF90aW1lcglXQUlUXzIwMFVTCisKKwkvKi0tLS0tLS0gTEJTQyAtLS0tLS0tKi8KKwl3cml0ZTMyIE1NU0VMUl9BLAlNTVNFTFJfRAorCisJLyotLS0tLS0tIERCU0MyIC0tLS0tLS0qLworCXdyaXRlMzIgREJTQzJfREJDT05GX0EsCURCU0MyX0RCQ09ORl9ECisJd3JpdGUzMiBEQlNDMl9EQlRSMF9BLAlEQlNDMl9EQlRSMF9ECisJd3JpdGUzMiBEQlNDMl9EQlRSMV9BLAlEQlNDMl9EQlRSMV9ECisJd3JpdGUzMiBEQlNDMl9EQlRSMl9BLAlEQlNDMl9EQlRSMl9ECisJd3JpdGUzMiBEQlNDMl9EQkZSRVFfQSwJREJTQzJfREJGUkVRX0QxCisJd3JpdGUzMiBEQlNDMl9EQkZSRVFfQSwJREJTQzJfREJGUkVRX0QyCisJd2FpdF90aW1lcglXQUlUXzIwMFVTCisKKwl3cml0ZTMyIERCU0MyX0RCRElDT0RUT0NEX0EsCURCU0MyX0RCRElDT0RUT0NEX0QKKwl3cml0ZTMyIERCU0MyX0RCQ01EQ05UX0EsCURCU0MyX0RCQ01EQ05UX0RfQ0tFX0gKKwl3YWl0X3RpbWVyCVdBSVRfMjAwVVMKKwl3cml0ZTMyIERCU0MyX0RCQ01EQ05UX0EsCURCU0MyX0RCQ01EQ05UX0RfUEFMTAorCXdyaXRlMzIgREJTQzJfREJNUkNOVF9BLAlEQlNDMl9EQk1SQ05UX0RfRU1SUzIKKwl3cml0ZTMyIERCU0MyX0RCTVJDTlRfQSwJREJTQzJfREJNUkNOVF9EX0VNUlMzCisJd3JpdGUzMiBEQlNDMl9EQk1SQ05UX0EsCURCU0MyX0RCTVJDTlRfRF9FTVJTMV8xCisJd3JpdGUzMiBEQlNDMl9EQk1SQ05UX0EsCURCU0MyX0RCTVJDTlRfRF9NUlNfMQorCXdyaXRlMzIgREJTQzJfREJDTURDTlRfQSwJREJTQzJfREJDTURDTlRfRF9QQUxMCisJd3JpdGUzMiBEQlNDMl9EQkNNRENOVF9BLAlEQlNDMl9EQkNNRENOVF9EX1JFRgorCXdyaXRlMzIgREJTQzJfREJDTURDTlRfQSwJREJTQzJfREJDTURDTlRfRF9SRUYKKwl3cml0ZTMyIERCU0MyX0RCTVJDTlRfQSwJREJTQzJfREJNUkNOVF9EX01SU18yCisJd2FpdF90aW1lcglXQUlUXzIwMFVTCisKKwl3cml0ZTMyIERCU0MyX0RCTVJDTlRfQSwJREJTQzJfREJNUkNOVF9EX0VNUlMxXzIKKwl3cml0ZTMyIERCU0MyX0RCTVJDTlRfQSwJREJTQzJfREJNUkNOVF9EX0VNUlMxXzEKKworCXdyaXRlMzIgREJTQzJfREJFTl9BLAkJREJTQzJfREJFTl9ECisJd3JpdGUzMiBEQlNDMl9EQlJGQ05UMV9BLAlEQlNDMl9EQlJGQ05UMV9ECisJd3JpdGUzMiBEQlNDMl9EQlJGQ05UMl9BLAlEQlNDMl9EQlJGQ05UMl9ECisJd3JpdGUzMiBEQlNDMl9EQlJGQ05UMF9BLAlEQlNDMl9EQlJGQ05UMF9ECisJd2FpdF90aW1lcglXQUlUXzIwMFVTCisKKwkvKi0tLS0tLS0gR1BJTyAtLS0tLS0tKi8KKwl3cml0ZTE2IFBBQ1JfQSwJUEFDUl9ECisJd3JpdGUxNiBQQkNSX0EsCVBCQ1JfRAorCXdyaXRlMTYgUENDUl9BLAlQQ0NSX0QKKwl3cml0ZTE2IFBEQ1JfQSwJUERDUl9ECisJd3JpdGUxNiBQRUNSX0EsCVBFQ1JfRAorCXdyaXRlMTYgUEZDUl9BLAlQRkNSX0QKKwl3cml0ZTE2IFBHQ1JfQSwJUEdDUl9ECisJd3JpdGUxNiBQSENSX0EsCVBIQ1JfRAorCXdyaXRlMTYgUEpDUl9BLAlQSkNSX0QKKwl3cml0ZTE2IFBLQ1JfQSwJUEtDUl9ECisJd3JpdGUxNiBQTENSX0EsCVBMQ1JfRAorCXdyaXRlMTYgUE1DUl9BLAlQTUNSX0QKKwl3cml0ZTE2IFBOQ1JfQSwJUE5DUl9ECisJd3JpdGUxNiBQUENSX0EsCVBQQ1JfRAorCXdyaXRlMTYgUFFDUl9BLAlQUUNSX0QKKwl3cml0ZTE2IFBSQ1JfQSwJUFJDUl9ECisKKwl3cml0ZTgJUEVQVVBSX0EsCVBFUFVQUl9ECisJd3JpdGU4CVBIUFVQUl9BLAlQSFBVUFJfRAorCXdyaXRlOAlQSlBVUFJfQSwJUEpQVVBSX0QKKwl3cml0ZTgJUEtQVVBSX0EsCVBLUFVQUl9ECisJd3JpdGU4CVBMUFVQUl9BLAlQTFBVUFJfRAorCXdyaXRlOAlQTVBVUFJfQSwJUE1QVVBSX0QKKwl3cml0ZTgJUE5QVVBSX0EsCVBOUFVQUl9ECisJd3JpdGUxNglQUFVQUjFfQSwJUFBVUFIxX0QKKwl3cml0ZTE2CVBQVVBSMl9BLAlQUFVQUjJfRAorCXdyaXRlMTYJUDFNU0VMUl9BLAlQMU1TRUxSX0QKKwl3cml0ZTE2CVAyTVNFTFJfQSwJUDJNU0VMUl9ECisKKwkvKi0tLS0tLS0gTEJTQyAtLS0tLS0tKi8KKwl3cml0ZTMyCUJDUl9BLAkJQkNSX0QKKwl3cml0ZTMyCUNTMEJDUl9BLAlDUzBCQ1JfRAorCXdyaXRlMzIJQ1MwV0NSX0EsCUNTMFdDUl9ECisJd3JpdGUzMglDUzFCQ1JfQSwJQ1MxQkNSX0QKKwl3cml0ZTMyCUNTMVdDUl9BLAlDUzFXQ1JfRAorCXdyaXRlMzIJQ1M0QkNSX0EsCUNTNEJDUl9ECisJd3JpdGUzMglDUzRXQ1JfQSwJQ1M0V0NSX0QKKworCW1vdi5sCVBBU0NSX0EsIHIwCisJbW92LmwJQHIwLCByMgorCW1vdi5sCVBBU0NSXzMyQklUX01PREUsIHIxCisJdHN0CXIxLCByMgorCWJ0CWxic2NfMjliaXQKKworCXdyaXRlMzIJQ1MyQkNSX0EsCUNTX1VTQl9CQ1JfRAorCXdyaXRlMzIJQ1MyV0NSX0EsCUNTX1VTQl9XQ1JfRAorCXdyaXRlMzIJQ1MzQkNSX0EsCUNTX1NEX0JDUl9ECisJd3JpdGUzMglDUzNXQ1JfQSwJQ1NfU0RfV0NSX0QKKwl3cml0ZTMyCUNTNUJDUl9BLAlDU19JMkNfQkNSX0QKKwl3cml0ZTMyCUNTNVdDUl9BLAlDU19JMkNfV0NSX0QKKwl3cml0ZTMyCUNTNkJDUl9BLAlDUzBCQ1JfRAorCXdyaXRlMzIJQ1M2V0NSX0EsCUNTMFdDUl9ECisJYnJhCWxic2NfZW5kCisJIG5vcAorCitsYnNjXzI5Yml0OgorCXdyaXRlMzIJQ1M1QkNSX0EsCUNTX1VTQl9CQ1JfRAorCXdyaXRlMzIJQ1M1V0NSX0EsCUNTX1VTQl9XQ1JfRAorCXdyaXRlMzIJQ1M2QkNSX0EsCUNTX1NEX0JDUl9ECisJd3JpdGUzMglDUzZXQ1JfQSwJQ1NfU0RfV0NSX0QKKworbGJzY19lbmQ6CisKKwl3cml0ZTMyCUNDUl9BLAlDQ1JfRAorCisJcnRzCisJbm9wCisKKwkuYWxpZ24gNAorCisvKi0tLS0tLS0gTEJTQyAtLS0tLS0tKi8KK01NU0VMUl9BOgkubG9uZwkweGZjNDAwMDIwCitNTVNFTFJfRDoJLmxvbmcJMHhhNWE1MDAwMgorCisvKi0tLS0tLS0gREJTQzIgLS0tLS0tLSovCisjZGVmaW5lIERCU0MyX0JBU0UJMHhmZTgwMDAwMAorREJTQzJfREJTVEFURV9BOgkubG9uZwlEQlNDMl9CQVNFICsgMHgwYworREJTQzJfREJFTl9BOgkJLmxvbmcJREJTQzJfQkFTRSArIDB4MTAKK0RCU0MyX0RCQ01EQ05UX0E6CS5sb25nCURCU0MyX0JBU0UgKyAweDE0CitEQlNDMl9EQkNPTkZfQToJCS5sb25nCURCU0MyX0JBU0UgKyAweDIwCitEQlNDMl9EQlRSMF9BOgkJLmxvbmcJREJTQzJfQkFTRSArIDB4MzAKK0RCU0MyX0RCVFIxX0E6CQkubG9uZwlEQlNDMl9CQVNFICsgMHgzNAorREJTQzJfREJUUjJfQToJCS5sb25nCURCU0MyX0JBU0UgKyAweDM4CitEQlNDMl9EQlJGQ05UMF9BOgkubG9uZwlEQlNDMl9CQVNFICsgMHg0MAorREJTQzJfREJSRkNOVDFfQToJLmxvbmcJREJTQzJfQkFTRSArIDB4NDQKK0RCU0MyX0RCUkZDTlQyX0E6CS5sb25nCURCU0MyX0JBU0UgKyAweDQ4CitEQlNDMl9EQlJGU1RTX0E6CS5sb25nCURCU0MyX0JBU0UgKyAweDRjCitEQlNDMl9EQkZSRVFfQToJCS5sb25nCURCU0MyX0JBU0UgKyAweDUwCitEQlNDMl9EQkRJQ09EVE9DRF9BOgkubG9uZwlEQlNDMl9CQVNFICsgMHg1NAorREJTQzJfREJNUkNOVF9BOgkubG9uZwlEQlNDMl9CQVNFICsgMHg2MAorRERSX0RVTU1ZX0FDQ0VTU19BOgkubG9uZwkweDQwMDAwMDAwCisKK0RCU0MyX0RCQ09ORl9EOgkJLmxvbmcJMHgwMDYzMDAwMgorREJTQzJfREJUUjBfRDoJCS5sb25nCTB4MDUwYjFmMDQKK0RCU0MyX0RCVFIxX0Q6CQkubG9uZwkweDAwMDQwMjA0CitEQlNDMl9EQlRSMl9EOgkJLmxvbmcJMHgwMjEwMDMwOAorREJTQzJfREJGUkVRX0QxOgkubG9uZwkweDAwMDAwMDAwCitEQlNDMl9EQkZSRVFfRDI6CS5sb25nCTB4MDAwMDAxMDAKK0RCU0MyX0RCRElDT0RUT0NEX0Q6CS5sb25nCTB4MDAwZjA5MDcKKworREJTQzJfREJDTURDTlRfRF9DS0VfSDoJLmxvbmcJMHgwMDAwMDAwMworREJTQzJfREJDTURDTlRfRF9QQUxMOgkubG9uZwkweDAwMDAwMDAyCitEQlNDMl9EQkNNRENOVF9EX1JFRjoJLmxvbmcJMHgwMDAwMDAwNAorCitEQlNDMl9EQk1SQ05UX0RfRU1SUzI6CS5sb25nCTB4MDAwMjAwMDAKK0RCU0MyX0RCTVJDTlRfRF9FTVJTMzoJLmxvbmcJMHgwMDAzMDAwMAorREJTQzJfREJNUkNOVF9EX0VNUlMxXzE6CS5sb25nCTB4MDAwMTAwMDYKK0RCU0MyX0RCTVJDTlRfRF9FTVJTMV8yOgkubG9uZwkweDAwMDEwMzg2CitEQlNDMl9EQk1SQ05UX0RfTVJTXzE6CS5sb25nCTB4MDAwMDA5NTIKK0RCU0MyX0RCTVJDTlRfRF9NUlNfMjoJLmxvbmcJMHgwMDAwMDg1MgorCitEQlNDMl9EQkVOX0Q6CQkubG9uZwkweDAwMDAwMDAxCisKK0RCU0MyX0RCUERDTlQwX0QzOgkubG9uZwkweDAwMDAwMDgwCitEQlNDMl9EQlJGQ05UMV9EOgkubG9uZwkweDAwMDAwOTI2CitEQlNDMl9EQlJGQ05UMl9EOgkubG9uZwkweDAwZmUwMGZlCitEQlNDMl9EQlJGQ05UMF9EOgkubG9uZwkweDAwMDEwMDAwCisKK1dBSVRfMjAwVVM6CS5sb25nCTMzMzMzCisKKy8qLS0tLS0tLSBHUElPIC0tLS0tLS0qLworI2RlZmluZSBHUElPX0JBU0UJMHhmZmU3MDAwMAorUEFDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwMAorUEJDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwMgorUENDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwNAorUERDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwNgorUEVDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwOAorUEZDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwYQorUEdDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwYworUEhDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgwZQorUEpDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxMAorUEtDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxMgorUExDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxNAorUE1DUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxNgorUE5DUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxOAorUFBDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxYQorUFFDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxYworUFJDUl9BOgkJLmxvbmcJR1BJT19CQVNFICsgMHgxZQorUEVQVVBSX0E6CS5sb25nCUdQSU9fQkFTRSArIDB4NDgKK1BIUFVQUl9BOgkubG9uZwlHUElPX0JBU0UgKyAweDRlCitQSlBVUFJfQToJLmxvbmcJR1BJT19CQVNFICsgMHg1MAorUEtQVVBSX0E6CS5sb25nCUdQSU9fQkFTRSArIDB4NTIKK1BMUFVQUl9BOgkubG9uZwlHUElPX0JBU0UgKyAweDU0CitQTVBVUFJfQToJLmxvbmcJR1BJT19CQVNFICsgMHg1NgorUE5QVVBSX0E6CS5sb25nCUdQSU9fQkFTRSArIDB4NTgKK1BQVVBSMV9BOgkubG9uZwlHUElPX0JBU0UgKyAweDYwCitQUFVQUjJfQToJLmxvbmcJR1BJT19CQVNFICsgMHg2MgorUDFNU0VMUl9BOgkubG9uZwlHUElPX0JBU0UgKyAweDgwCitQMk1TRUxSX0E6CS5sb25nCUdQSU9fQkFTRSArIDB4ODIKKworUEFDUl9EOgkJLmxvbmcJMHgwMDAwCitQQkNSX0Q6CQkubG9uZwkweDAwMDAKK1BDQ1JfRDoJCS5sb25nCTB4MDAwMAorUERDUl9EOgkJLmxvbmcJMHgwMDAwCitQRUNSX0Q6CQkubG9uZwkweDAwMDAKK1BGQ1JfRDoJCS5sb25nCTB4MDAwMAorUEdDUl9EOgkJLmxvbmcJMHgwMDAwCitQSENSX0Q6CQkubG9uZwkweDAwYzAKK1BKQ1JfRDoJCS5sb25nCTB4YzNmYworUEtDUl9EOgkJLmxvbmcJMHgwM2ZmCitQTENSX0Q6CQkubG9uZwkweDAwMDAKK1BNQ1JfRDoJCS5sb25nCTB4ZmZmZgorUE5DUl9EOgkJLmxvbmcJMHhmMGMzCitQUENSX0Q6CQkubG9uZwkweDAwMDAKK1BRQ1JfRDoJCS5sb25nCTB4MDAwMAorUFJDUl9EOgkJLmxvbmcJMHgwMDAwCisKK1BFUFVQUl9EOgkubG9uZwkweGZmCitQSFBVUFJfRDoJLmxvbmcJMHgwMAorUEpQVVBSX0Q6CS5sb25nCTB4MDAKK1BLUFVQUl9EOgkubG9uZwkweDAwCitQTFBVUFJfRDoJLmxvbmcJMHgwMAorUE1QVVBSX0Q6CS5sb25nCTB4ZmMKK1BOUFVQUl9EOgkubG9uZwkweDAwCitQUFVQUjFfRDoJLmxvbmcJMHhmZmJmCitQUFVQUjJfRDoJLmxvbmcJMHhmZjAwCitQMU1TRUxSX0Q6CS5sb25nCTB4Mzc4MAorUDJNU0VMUl9EOgkubG9uZwkweDAwMDAKKworLyotLS0tLS0tIExCU0MgLS0tLS0tLSovCitQQVNDUl9BOgkJLmxvbmcJMHhmZjAwMDA3MAorUEFTQ1JfMzJCSVRfTU9ERToJLmxvbmcJMHg4MDAwMDAwMAkvKiBjaGVjayBib290aW5nIG1vZGUgKi8KKworQkNSX0E6CQkubG9uZwlCQ1IKK0NTMEJDUl9BOgkubG9uZwlDUzBCQ1IKK0NTMFdDUl9BOgkubG9uZwlDUzBXQ1IKK0NTMUJDUl9BOgkubG9uZwlDUzFCQ1IKK0NTMVdDUl9BOgkubG9uZwlDUzFXQ1IKK0NTMkJDUl9BOgkubG9uZwlDUzJCQ1IKK0NTMldDUl9BOgkubG9uZwlDUzJXQ1IKK0NTM0JDUl9BOgkubG9uZwlDUzNCQ1IKK0NTM1dDUl9BOgkubG9uZwlDUzNXQ1IKK0NTNEJDUl9BOgkubG9uZwlDUzRCQ1IKK0NTNFdDUl9BOgkubG9uZwlDUzRXQ1IKK0NTNUJDUl9BOgkubG9uZwlDUzVCQ1IKK0NTNVdDUl9BOgkubG9uZwlDUzVXQ1IKK0NTNkJDUl9BOgkubG9uZwlDUzZCQ1IKK0NTNldDUl9BOgkubG9uZwlDUzZXQ1IKKworQkNSX0Q6CQkubG9uZwkweDgwMDAwMDAzCitDUzBCQ1JfRDoJLmxvbmcJMHgyMjIyMjM0MAorQ1MwV0NSX0Q6CS5sb25nCTB4MDAxMTExMTgKK0NTMUJDUl9EOgkubG9uZwkweDExMTExMTAwCitDUzFXQ1JfRDoJLmxvbmcJMHgzMzMzMzMwMworQ1M0QkNSX0Q6CS5sb25nCTB4MTExMTEzMDAKK0NTNFdDUl9EOgkubG9uZwkweDAwMTAxMDEyCisKKy8qIFVTQiBzZXR0aW5nIDogMzJiaXQgbW9kZSA9IENTMiwgMjliaXQgbW9kZSA9IENTNSAqLworQ1NfVVNCX0JDUl9EOgkubG9uZwkweDExMTExMjAwCitDU19VU0JfV0NSX0Q6CS5sb25nCTB4MDAwMjAwMDQKKworLyogU0Qgc2V0dGluZyAgOiAzMmJpdCBtb2RlID0gQ1MzLCAyOWJpdCBtb2RlID0gQ1M2ICovCitDU19TRF9CQ1JfRDoJLmxvbmcJMHgwMDAwMDMwMAorQ1NfU0RfV0NSX0Q6CS5sb25nCTB4MDAwMzAxMDgKKworLyogSTJDIHNldHRpbmcgOiAzMmJpdCBtb2RlID0gQ1M1LCAyOWJpdCBtb2RlID0gQ1MxKGFscmVhZHkgc2V0dGluZykgKi8KK0NTX0kyQ19CQ1JfRDoJLmxvbmcJMHgxMTExMTEwMAorQ1NfSTJDX1dDUl9EOgkubG9uZwkweDAwMDAwMDAzCisKK0NDUl9BOgkJLmxvbmcJMHhmZjAwMDAxYworQ0NSX0Q6CQkubG9uZwkweDAwMDAwOTBiCisKZGlmZiAtLWdpdCBhL2JvYXJkL3NoNzc4NWxjci9ydGw4MTY5LmggYi9ib2FyZC9zaDc3ODVsY3IvcnRsODE2OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzBkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zaDc3ODVsY3IvcnRsODE2OS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWW9zaGloaXJvIFNoaW1vZGEgPHNoaW1vZGEueW9zaGloaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgUENJUkVHXzgoX2FkcikJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShfYWRyKSkKKyNkZWZpbmUgUENJUkVHXzMyKF9hZHIpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoX2FkcikpCisjZGVmaW5lIFBDSV9QQVIJCVBDSVJFR18zMigweGZlMDQwMWMwKQorI2RlZmluZSBQQ0lfUERSCQlQQ0lSRUdfMzIoMHhmZTA0MDIyMCkKKyNkZWZpbmUgUENJX0NSCQlQQ0lSRUdfMzIoMHhmZTA0MDEwMCkKKyNkZWZpbmUgUENJX0NPTkYxCVBDSVJFR18zMigweGZlMDQwMDA0KQorCisjZGVmaW5lIEhJR0gJCTEKKyNkZWZpbmUgTE9XCQkwCisKKyNkZWZpbmUgUENJX1BST0cJCTB4ODAKKyNkZWZpbmUgUENJX0VFUF9BRERSRVNTCQkodW5zaWduZWQgc2hvcnQpMHgwMDA3CisjZGVmaW5lIFBDSV9NQUNfQUREUkVTU19TSVpFCTMKKworI2RlZmluZSBUSU1FMQkxMDAKKyNkZWZpbmUgVElNRTIJMjAwMDAKKworI2RlZmluZSBCSVRfRFVNTVkJMAorI2RlZmluZSBNQUNfRUVQX1JFQUQJMQorI2RlZmluZSBNQUNfRUVQX1dSSVRFCTIKKyNkZWZpbmUgTUFDX0VFUF9FUkFDRQkzCisjZGVmaW5lIE1BQ19FRVBfRVdFTgk0CisjZGVmaW5lIE1BQ19FRVBfRVdEUwk1CisKKy8qIFJUTDgxNjkgKi8KK2NvbnN0IHVuc2lnbmVkIHNob3J0IEVFUFJPTV9XX0RhdGFfODE2OV9BW10gPSB7CisJMHg4MTI5LCAweDEwZWMsIDB4ODE2OSwgMHgxMTU0LCAweDAzMmIsCisJMHg0MDIwLCAweGExMDEKK307Citjb25zdCB1bnNpZ25lZCBzaG9ydCBFRVBST01fV19EYXRhXzgxNjlfQltdID0geworCTB4NGQxNSwgMHhmN2MyLCAweDgwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDEzMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAKK307CisKZGlmZiAtLWdpdCBhL2JvYXJkL3NoNzc4NWxjci9ydGw4MTY5X21hYy5jIGIvYm9hcmQvc2g3Nzg1bGNyL3J0bDgxNjlfbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjODczYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NoNzc4NWxjci9ydGw4MTY5X21hYy5jCkBAIC0wLDAgKzEsMzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSAicnRsODE2OS5oIgorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqUENJX01FTVI7CisKK3N0YXRpYyB2b2lkIG1hY19kZWxheSh1bnNpZ25lZCBpbnQgY250KQoreworCXVkZWxheShjbnQpOworfQorCitzdGF0aWMgdm9pZCBtYWNfcGNpX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwY2lfZGF0YTsKKworCVBDSV9QQVIgPSAweDAwMDAwMDEwOworCVBDSV9QRFIgPSAweDAwMDAxMDAwOworCVBDSV9QQVIgPSAweDAwMDAwMDA0OworCXBjaV9kYXRhID0gUENJX1BEUjsKKwlQQ0lfUERSID0gcGNpX2RhdGEgfCAweDAwMDAwMDA3OworCVBDSV9QQVIgPSAweDAwMDAwMDEwOworCisJUENJX01FTVIgPSAodW5zaWduZWQgY2hhciAqKSgoUENJX1BEUiB8IDB4RkUyNDAwNTApICYgMHhGRkZGRkZGMCk7Cit9CisKK3N0YXRpYyB2b2lkIEVFQ1MoaW50IGxldmVsKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YSA9ICpQQ0lfTUVNUjsKKworCWlmIChsZXZlbCkKKwkJKlBDSV9NRU1SID0gZGF0YSB8IDB4MDg7CisJZWxzZQorCQkqUENJX01FTVIgPSBkYXRhICYgMHhmNzsKK30KKworc3RhdGljIHZvaWQgRUVDTEsoaW50IGxldmVsKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YSA9ICpQQ0lfTUVNUjsKKworCWlmIChsZXZlbCkKKwkJKlBDSV9NRU1SID0gZGF0YSB8IDB4MDQ7CisJZWxzZQorCQkqUENJX01FTVIgPSBkYXRhICYgMHhmYjsKK30KKworc3RhdGljIHZvaWQgRUVESShpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgY2hhciBkYXRhID0gKlBDSV9NRU1SOworCisJaWYgKGxldmVsKQorCQkqUENJX01FTVIgPSBkYXRhIHwgMHgwMjsKKwllbHNlCisJCSpQQ0lfTUVNUiA9IGRhdGEgJiAweGZkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2g3Nzg1bGNyX2JpdHNldCh1bnNpZ25lZCBzaG9ydCBiaXQpCit7CisJaWYgKGJpdCkKKwkJRUVESShISUdIKTsKKwllbHNlCisJCUVFREkoTE9XKTsKKworCUVFQ0xLKExPVyk7CisJbWFjX2RlbGF5KFRJTUUxKTsKKwlFRUNMSyhISUdIKTsKKwltYWNfZGVsYXkoVElNRTEpOworCUVFREkoTE9XKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHNoNzc4NWxjcl9iaXRnZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJpdDsKKworCUVFQ0xLKExPVyk7CisJbWFjX2RlbGF5KFRJTUUxKTsKKwliaXQgPSAqUENJX01FTVIgJiAweDAxOworCUVFQ0xLKEhJR0gpOworCW1hY19kZWxheShUSU1FMSk7CisKKwlyZXR1cm4gYml0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2g3Nzg1bGNyX3NldGNtZCh1bnNpZ25lZCBjaGFyIGNvbW1hbmQpCit7CisJc2g3Nzg1bGNyX2JpdHNldChCSVRfRFVNTVkpOworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgTUFDX0VFUF9SRUFEOgorCQlzaDc3ODVsY3JfYml0c2V0KDEpOworCQlzaDc3ODVsY3JfYml0c2V0KDEpOworCQlzaDc3ODVsY3JfYml0c2V0KDApOworCQlicmVhazsKKwljYXNlIE1BQ19FRVBfV1JJVEU6CisJCXNoNzc4NWxjcl9iaXRzZXQoMSk7CisJCXNoNzc4NWxjcl9iaXRzZXQoMCk7CisJCXNoNzc4NWxjcl9iaXRzZXQoMSk7CisJCWJyZWFrOworCWNhc2UgTUFDX0VFUF9FUkFDRToKKwkJc2g3Nzg1bGNyX2JpdHNldCgxKTsKKwkJc2g3Nzg1bGNyX2JpdHNldCgxKTsKKwkJc2g3Nzg1bGNyX2JpdHNldCgxKTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfRUVQX0VXRU46CisJCXNoNzc4NWxjcl9iaXRzZXQoMSk7CisJCXNoNzc4NWxjcl9iaXRzZXQoMCk7CisJCXNoNzc4NWxjcl9iaXRzZXQoMCk7CisJCWJyZWFrOworCWNhc2UgTUFDX0VFUF9FV0RTOgorCQlzaDc3ODVsY3JfYml0c2V0KDEpOworCQlzaDc3ODVsY3JfYml0c2V0KDApOworCQlzaDc3ODVsY3JfYml0c2V0KDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc2g3Nzg1bGNyX2dldGR0KHZvaWQpCit7CisJdW5zaWduZWQgc2hvcnQgZGF0YSA9IDA7CisJaW50IGk7CisKKwlzaDc3ODVsY3JfYml0Z2V0KCk7CQkJLyogRFVNTVkgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IDE2IDsgaSsrKSB7CisJCWRhdGEgPDw9IDE7CisJCWRhdGEgfD0gc2g3Nzg1bGNyX2JpdGdldCgpOworCX0KKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoNzc4NWxjcl9zZXRhZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3sKKwlzaDc3ODVsY3JfYml0c2V0KGFkZHJlc3MgJiAweDAwMjApOwkvKiBBNSAqLworCXNoNzc4NWxjcl9iaXRzZXQoYWRkcmVzcyAmIDB4MDAxMCk7CS8qIEE0ICovCisJc2g3Nzg1bGNyX2JpdHNldChhZGRyZXNzICYgMHgwMDA4KTsJLyogQTMgKi8KKwlzaDc3ODVsY3JfYml0c2V0KGFkZHJlc3MgJiAweDAwMDQpOwkvKiBBMiAqLworCXNoNzc4NWxjcl9iaXRzZXQoYWRkcmVzcyAmIDB4MDAwMik7CS8qIEExICovCisJc2g3Nzg1bGNyX2JpdHNldChhZGRyZXNzICYgMHgwMDAxKTsJLyogQTAgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoNzc4NWxjcl9zZXRkYXRhKHVuc2lnbmVkIHNob3J0IGRhdGEpCit7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHg4MDAwKTsKKwlzaDc3ODVsY3JfYml0c2V0KGRhdGEgJiAweDQwMDApOworCXNoNzc4NWxjcl9iaXRzZXQoZGF0YSAmIDB4MjAwMCk7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHgxMDAwKTsKKwlzaDc3ODVsY3JfYml0c2V0KGRhdGEgJiAweDA4MDApOworCXNoNzc4NWxjcl9iaXRzZXQoZGF0YSAmIDB4MDQwMCk7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHgwMjAwKTsKKwlzaDc3ODVsY3JfYml0c2V0KGRhdGEgJiAweDAxMDApOworCXNoNzc4NWxjcl9iaXRzZXQoZGF0YSAmIDB4MDA4MCk7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHgwMDQwKTsKKwlzaDc3ODVsY3JfYml0c2V0KGRhdGEgJiAweDAwMjApOworCXNoNzc4NWxjcl9iaXRzZXQoZGF0YSAmIDB4MDAxMCk7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHgwMDA4KTsKKwlzaDc3ODVsY3JfYml0c2V0KGRhdGEgJiAweDAwMDQpOworCXNoNzc4NWxjcl9iaXRzZXQoZGF0YSAmIDB4MDAwMik7CisJc2g3Nzg1bGNyX2JpdHNldChkYXRhICYgMHgwMDAxKTsKK30KKworc3RhdGljIHZvaWQgc2g3Nzg1bGNyX2RhdGF3cml0ZShjb25zdCB1bnNpZ25lZCBzaG9ydCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgYWRkcmVzcywKKwkJCSB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlFRUNTKEhJR0gpOworCQlFRURJKExPVyk7CisJCW1hY19kZWxheShUSU1FMSk7CisKKwkJc2g3Nzg1bGNyX3NldGNtZChNQUNfRUVQX1dSSVRFKTsKKwkJc2g3Nzg1bGNyX3NldGFkZChhZGRyZXNzKyspOworCQlzaDc3ODVsY3Jfc2V0ZGF0YSgqKGRhdGEgKyBpKSk7CisKKwkJRUVDTEsoTE9XKTsKKwkJRUVESShMT1cpOworCQlFRUNTKExPVyk7CisJCW1hY19kZWxheShUSU1FMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaDc3ODVsY3JfbWFjZXJhc2Uodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBwY2lfYWRkcmVzcyA9IDc7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCUVFQ1MoSElHSCk7CisJCUVFREkoTE9XKTsKKwkJbWFjX2RlbGF5KFRJTUUxKTsKKwkJc2g3Nzg1bGNyX3NldGNtZChNQUNfRUVQX0VSQUNFKTsKKwkJc2g3Nzg1bGNyX3NldGFkZChwY2lfYWRkcmVzcysrKTsKKwkJbWFjX2RlbGF5KFRJTUUxKTsKKwkJRUVDTEsoTE9XKTsKKwkJRUVESShMT1cpOworCQlFRUNTKExPVyk7CisJfQorCisJbWFjX2RlbGF5KFRJTUUyKTsKKworCXByaW50ZigiXG5cbkVyYWNlIEVuZFxuIik7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCW1hY19kZWxheShUSU1FMik7Cit9CisKK3N0YXRpYyB2b2lkIHNoNzc4NWxjcl9tYWN3cml0ZSh1bnNpZ25lZCBzaG9ydCAqZGF0YSkKK3sKKwlzaDc3ODVsY3JfbWFjZXJhc2UoKTsKKworCXNoNzc4NWxjcl9kYXRhd3JpdGUoRUVQUk9NX1dfRGF0YV84MTY5X0EsIDB4MDAwMCwgNyk7CisJc2g3Nzg1bGNyX2RhdGF3cml0ZShkYXRhLCBQQ0lfRUVQX0FERFJFU1MsIFBDSV9NQUNfQUREUkVTU19TSVpFKTsKKwlzaDc3ODVsY3JfZGF0YXdyaXRlKEVFUFJPTV9XX0RhdGFfODE2OV9CLCAweDAwMGEsIDU0KTsKK30KKwordm9pZCBzaDc3ODVsY3JfbWFjZHRyZCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGFkZHJlc3MsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB3azsKKworCWZvciAoaSA9IDAgOyBpIDwgY291bnQ7IGkrKykgeworCQlFRUNTKEhJR0gpOworCQlFRURJKExPVyk7CisJCW1hY19kZWxheShUSU1FMSk7CisJCXNoNzc4NWxjcl9zZXRjbWQoTUFDX0VFUF9SRUFEKTsKKwkJc2g3Nzg1bGNyX3NldGFkZChhZGRyZXNzKyspOworCQl3ayA9IHNoNzc4NWxjcl9nZXRkdCgpOworCisJCSpidWYrKyA9ICh1bnNpZ25lZCBjaGFyKSh3ayAmIDB4ZmYpOworCQkqYnVmKysgPSAodW5zaWduZWQgY2hhcikoKHdrID4+IDgpICYgMHhmZik7CisJCUVFQ0xLKExPVyk7CisJCUVFREkoTE9XKTsKKwkJRUVDUyhMT1cpOworCX0KK30KKworc3RhdGljIHZvaWQgc2g3Nzg1bGNyX21hY2FkcmQodW5zaWduZWQgY2hhciAqYnVmKQoreworCSpQQ0lfTUVNUiA9IFBDSV9QUk9HOworCisJc2g3Nzg1bGNyX21hY2R0cmQoYnVmLCBQQ0lfRUVQX0FERFJFU1MsIFBDSV9NQUNfQUREUkVTU19TSVpFKTsKK30KKworc3RhdGljIHZvaWQgc2g3Nzg1bGNyX2VlcGV3ZW4odm9pZCkKK3sKKwkqUENJX01FTVIgPSBQQ0lfUFJPRzsKKwltYWNfZGVsYXkoVElNRTEpOworCUVFQ1MoTE9XKTsKKwlFRUNMSyhMT1cpOworCUVFREkoTE9XKTsKKwlFRUNTKEhJR0gpOworCW1hY19kZWxheShUSU1FMSk7CisKKwlzaDc3ODVsY3Jfc2V0Y21kKE1BQ19FRVBfRVdFTik7CisJc2g3Nzg1bGNyX2JpdHNldCgxKTsKKwlzaDc3ODVsY3JfYml0c2V0KDEpOworCXNoNzc4NWxjcl9iaXRzZXQoQklUX0RVTU1ZKTsKKwlzaDc3ODVsY3JfYml0c2V0KEJJVF9EVU1NWSk7CisJc2g3Nzg1bGNyX2JpdHNldChCSVRfRFVNTVkpOworCXNoNzc4NWxjcl9iaXRzZXQoQklUX0RVTU1ZKTsKKworCUVFQ0xLKExPVyk7CisJRUVESShMT1cpOworCUVFQ1MoTE9XKTsKKwltYWNfZGVsYXkoVElNRTEpOworfQorCit2b2lkIG1hY193cml0ZSh1bnNpZ25lZCBzaG9ydCAqZGF0YSkKK3sKKwltYWNfcGNpX3NldHVwKCk7CisJc2g3Nzg1bGNyX2VlcGV3ZW4oKTsKKwlzaDc3ODVsY3JfbWFjd3JpdGUoZGF0YSk7Cit9CisKK3ZvaWQgbWFjX3JlYWQodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGFbNl07CisKKwltYWNfcGNpX3NldHVwKCk7CisJc2g3Nzg1bGNyX21hY2FkcmQoZGF0YSk7CisJcHJpbnRmKCJNYWMgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSk7Cit9CisKK2ludCBkb19zZXRfbWFjKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgbWFjWzZdOworCWNoYXIgKnMsICplOworCisJaWYgKGFyZ2MgIT0gMikgeworCQlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCXJldHVybiAxOworCX0KKworCXMgPSBhcmd2WzFdOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQltYWNbaV0gPSBzID8gc2ltcGxlX3N0cnRvdWwocywgJmUsIDE2KSA6IDA7CisJCWlmIChzKQorCQkJcyA9ICgqZSkgPyBlICsgMSA6IGU7CisJfQorCW1hY193cml0ZSgodW5zaWduZWQgc2hvcnQgKiltYWMpOworCisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJc2V0bWFjLAkyLAkxLAlkb19zZXRfbWFjLAorCSJzZXRtYWMgLSB3cml0ZSBNQUMgYWRkcmVzcyBmb3IgUlRMODExMFNDTFxuIiwKKwkiXG4iCisJInNldG1hYyA8bWFjIGFkZHJlc3M+IC0gd3JpdGUgTUFDIGFkZHJlc3MgZm9yIFJUTDgxMTBTQ0xcbiIKKyk7CisKK2ludCBkb19wcmludF9tYWMoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGFyZ2MgIT0gMSkgeworCQlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCXJldHVybiAxOworCX0KKworCW1hY19yZWFkKCk7CisKKwlyZXR1cm4gMDsKK30KKworVV9CT09UX0NNRCgKKwlwcmludG1hYywJMSwJMSwJZG9fcHJpbnRfbWFjLAorCSJwcmludG1hYyAtIHByaW50IE1BQyBhZGRyZXNzIGZvciBSVEw4MTEwXG4iLAorCSJcbiIKKwkiICAgIC0gcHJpbnQgTUFDIGFkZHJlc3MgZm9yIFJUTDgxMTBcbiIKKyk7CisKZGlmZiAtLWdpdCBhL2JvYXJkL3NoNzc4NWxjci9zZWxmY2hlY2suYyBiL2JvYXJkL3NoNzc4NWxjci9zZWxmY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzIyOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2g3Nzg1bGNyL3NlbGZjaGVjay5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wY2kuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV8zMkJJVCkKKyNkZWZpbmUgTk9DQUNIRV9PRkZTRVQJCTB4MDAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIE5PQ0FDSEVfT0ZGU0VUCQkweGEwMDAwMDAwCisjZW5kaWYKKyNkZWZpbmUgUExEX0xFRENSCQkoMHgwNDAwMDAwOCArIE5PQ0FDSEVfT0ZGU0VUKQorI2RlZmluZSBQTERfU1dTUgkJKDB4MDQwMDAwMGEgKyBOT0NBQ0hFX09GRlNFVCkKKyNkZWZpbmUgUExEX1ZFUlNSCQkoMHgwNDAwMDAwYyArIE5PQ0FDSEVfT0ZGU0VUKQorCisjZGVmaW5lIFNNMTA3X0RFVklDRUlECQkoMHgxM2UwMDA2MCArIE5PQ0FDSEVfT0ZGU0VUKQorCitzdGF0aWMgdm9pZCB3YWl0X21zKHVuc2lnbmVkIGxvbmcgdGltZSkKK3sKKwl3aGlsZSAodGltZS0tKQorCQl1ZGVsYXkoMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfcGxkKHZvaWQpCit7CisJcHJpbnRmKCJQTEQgdmVyc2lvbiA9ICUwNHhcbiIsIHJlYWRiKFBMRF9WRVJTUikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3NtMTA3KHZvaWQpCit7CisJcHJpbnRmKCJTTTEwNyBkZXZpY2UgSUQgPSAlMDR4XG4iLCByZWFkbChTTTEwN19ERVZJQ0VJRCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2xlZCh2b2lkKQoreworCXByaW50ZigidHVybiBvbiBMRURzIDMsIDUsIDcsIDlcbiIpOworCXdyaXRlYigweDU1LCBQTERfTEVEQ1IpOworCXdhaXRfbXMoMjAwMCk7CisJcHJpbnRmKCJ0dXJuIG9uIExFRHMgNCwgNiwgOCwgMTBcbiIpOworCXdyaXRlYigweGFhLCBQTERfTEVEQ1IpOworCXdhaXRfbXMoMjAwMCk7CisJd3JpdGViKDB4MDAsIFBMRF9MRURDUik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZGlwc3codm9pZCkKK3sKKwlwcmludGYoIlBsZWFzZSBESVBTVyBzZXQgPSBCJzAxMDFcbiIpOworCXdoaWxlIChyZWFkYihQTERfU1dTUikgIT0gMHgwNSkgeworCQlpZiAoY3RybGMoKSkKKwkJCXJldHVybjsKKwl9CisJcHJpbnRmKCJQbGVhc2UgRElQU1cgc2V0ID0gQicxMDEwXG4iKTsKKwl3aGlsZSAocmVhZGIoUExEX1NXU1IpICE9IDB4MEEpIHsKKwkJaWYgKGN0cmxjKCkpCisJCQlyZXR1cm47CisJfQorCXByaW50ZigiRElQU1cgT0tcbiIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X25ldCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCXdyaXRlbCgweDgwMDAwMDAwLCAweGZlMDQwMWMwKTsKKwlkYXRhID0gcmVhZGwoMHhmZTA0MDIyMCk7CisJaWYgKGRhdGEgPT0gMHg4MTY5MTBlYykKKwkJcHJpbnRmKCJFdGhlcm5ldCBPS1xuIik7CisJZWxzZQorCQlwcmludGYoIkV0aGVybmV0IE5HLCBkYXRhID0gJTA4eFxuIiwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2F0YSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKworCXdyaXRlbCgweDgwMDAwODAwLCAweGZlMDQwMWMwKTsKKwlkYXRhID0gcmVhZGwoMHhmZTA0MDIyMCk7CisJaWYgKGRhdGEgPT0gMHgzNTEyMTA5NSkKKwkJcHJpbnRmKCJTQVRBIE9LXG4iKTsKKwllbHNlCisJCXByaW50ZigiU0FUQSBORywgZGF0YSA9ICUwOHhcbiIsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BjaSh2b2lkKQoreworCXdyaXRlbCgweDgwMDAxODAwLCAweGZlMDQwMWMwKTsKKwlwcmludGYoIlBDSSBDTjEgSUQgPSAlMDh4XG4iLCByZWFkbCgweGZlMDQwMjIwKSk7CisKKwl3cml0ZWwoMHg4MDAwMTAwMCwgMHhmZTA0MDFjMCk7CisJcHJpbnRmKCJQQ0kgQ04yIElEID0gJTA4eFxuIiwgcmVhZGwoMHhmZTA0MDIyMCkpOworfQorCitpbnQgZG9faHdfdGVzdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyICpjbWQ7CisKKwlpZiAoYXJnYyAhPSAyKSB7CisJCXByaW50ZigiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY21kID0gYXJndlsxXTsKKwlzd2l0Y2ggKGNtZFswXSkgeworCWNhc2UgJ2EnOgkvKiBhbGwgKi8KKwkJdGVzdF9wbGQoKTsKKwkJdGVzdF9sZWQoKTsKKwkJdGVzdF9kaXBzdygpOworCQl0ZXN0X3NtMTA3KCk7CisJCXRlc3RfbmV0KCk7CisJCXRlc3Rfc2F0YSgpOworCQl0ZXN0X3BjaSgpOworCQlicmVhazsKKwljYXNlICdwJzoJLyogcGxkIG9yIHBjaSAqLworCQlpZiAoY21kWzFdID09ICdsJykKKwkJCXRlc3RfcGxkKCk7CisJCWVsc2UKKwkJCXRlc3RfcGNpKCk7CisJCWJyZWFrOworCWNhc2UgJ2wnOgkvKiBsZWQgKi8KKwkJdGVzdF9sZWQoKTsKKwkJYnJlYWs7CisJY2FzZSAnZCc6CS8qIGRpcHN3ICovCisJCXRlc3RfZGlwc3coKTsKKwkJYnJlYWs7CisJY2FzZSAncyc6CS8qIHNtMTA3IG9yIHNhdGEgKi8KKwkJaWYgKGNtZFsxXSA9PSAnbScpCisJCQl0ZXN0X3NtMTA3KCk7CisJCWVsc2UKKwkJCXRlc3Rfc2F0YSgpOworCQlicmVhazsKKwljYXNlICduJzoJLyogbmV0ICovCisJCXRlc3RfbmV0KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJaHd0ZXN0LAkyLAkxLAlkb19od190ZXN0LAorCSJod3Rlc3QgLSBoYXJkd2FyZSB0ZXN0IGZvciBSMFA3Nzg1TEMwMDExUkwgYm9hcmRcbiIsCisJIlxuIgorCSJod3Rlc3QgYWxsICAgLSB0ZXN0IGFsbCBoYXJkd2FyZVxuIgorCSJod3Rlc3QgcGxkICAgLSBvdXRwdXQgUExEIHZlcnNpb25cbiIKKwkiaHd0ZXN0IGxlZCAgIC0gdHVybiBvbiBMRURzXG4iCisJImh3dGVzdCBkaXBzdyAtIHRlc3QgRElQIHN3aXRjaFxuIgorCSJod3Rlc3Qgc20xMDcgLSBvdXRwdXQgU00xMDcgdmVyc2lvblxuIgorCSJod3Rlc3QgbmV0ICAgLSBjaGVjayBSVEw4MTEwIElEXG4iCisJImh3dGVzdCBzYXRhICAtIGNoZWNrIFNpSTM1MTIgSURcbiIKKwkiaHd0ZXN0IHBjaSAgIC0gb3V0cHV0IFBDSSBzbG90IGRldmljZSBJRFxuIgorKTsKKwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2g3Nzg1bGNyL3NoNzc4NWxjci5jIGIvYm9hcmQvc2g3Nzg1bGNyL3NoNzc4NWxjci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOWM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zaDc3ODVsY3Ivc2g3Nzg1bGNyLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBZb3NoaWhpcm8gU2hpbW9kYSA8c2hpbW9kYS55b3NoaWhpcm9AcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGNpLmg+CisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJcHV0cygiQk9BUkQ6IFJlbmVzYXMgVGVjaG5vbG9neSBDb3JwLiBSMFA3Nzg1TEMwMDExUkxcbiIpOworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX21lbXN0YXJ0ID0gQ0ZHX1NEUkFNX0JBU0U7CisJZ2QtPmJkLT5iaV9tZW1zaXplID0gQ0ZHX1NEUkFNX1NJWkU7CisJcHJpbnRmKCJEUkFNOiAgJWRNQlxuIiwgQ0ZHX1NEUkFNX1NJWkUgLyAoMTAyNCAqIDEwMjQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlOwordm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQoreworCXBjaV9zaDc3ODBfaW5pdCgmaG9zZSk7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL3NoNzc4NWxjci91LWJvb3QubGRzIGIvYm9hcmQvc2g3Nzg1bGNyL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxMDllYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NoNzc4NWxjci91LWJvb3QubGRzCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlndGggKGMpIDIwMDcKKyAqIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAqIENvcHlyaWd0aCAoYykgMjAwOCBZb3NoaWhpcm8gU2hpbW9kYSA8c2hpbW9kYS55b3NoaWhpcm9AcmVuZXNhcy5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiKQorT1VUUFVUX0FSQ0goc2gpCitFTlRSWShfc3RhcnQpCisKK1NFQ1RJT05TCit7CisJLiA9IDB4MDgwMDAwMDAgKyAoMTI4ICogMTAyNCAqIDEwMjQpIC0gKDUxMiAqIDEwMjQpOworCisJUFJPVklERSAocmVsb2NfZHN0ID0gLik7CisKKwlQUk9WSURFIChfZnRleHQgPSAuKTsKKwlQUk9WSURFIChfZmNvZGUgPSAuKTsKKwlQUk9WSURFIChfc3RhcnQgPSAuKTsKKworCS50ZXh0IDoKKwl7CisJCWNwdS9zaDQvc3RhcnQubwkJKC50ZXh0KQorCQkuID0gQUxJR04oODE5Mik7CisJCWNvbW1vbi9lbnZpcm9ubWVudC5vCSgucHBjZW52KQorCQkuID0gQUxJR04oODE5Mik7CisJCWNvbW1vbi9lbnZpcm9ubWVudC5vCSgucHBjZW52cikKKwkJLiA9IEFMSUdOKDgxOTIpOworCQkqKC50ZXh0KQorCQkuID0gQUxJR04oNCk7CisJfSA9MHhGRgorCVBST1ZJREUgKF9lY29kZSA9IC4pOworCS5yb2RhdGEgOgorCXsKKwkJKigucm9kYXRhKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9ldGV4dCA9IC4pOworCisKKwlQUk9WSURFIChfZmRhdGEgPSAuKTsKKwkuZGF0YSA6CisJeworCQkqKC5kYXRhKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9lZGF0YSA9IC4pOworCisJUFJPVklERSAoX2Znb3QgPSAuKTsKKwkuZ290IDoKKwl7CisJCSooLmdvdCkKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChfZWdvdCA9IC4pOworCisJUFJPVklERSAoX191X2Jvb3RfY21kX3N0YXJ0ID0gLik7CisJLnVfYm9vdF9jbWQgOgorCXsKKwkJKigudV9ib290X2NtZCkKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChfX3VfYm9vdF9jbWRfZW5kID0gLik7CisKKwlQUk9WSURFIChyZWxvY19kc3RfZW5kID0gLik7CisJLyogX3JlbG9jX2RzdF9lbmQgPSAuOyAqLworCisJUFJPVklERSAoYnNzX3N0YXJ0ID0gLik7CisJUFJPVklERSAoX19ic3Nfc3RhcnQgPSAuKTsKKwkuYnNzIDoKKwl7CisJCSooLmJzcykKKwkJLiA9IEFMSUdOKDQpOworCX0KKwlQUk9WSURFIChic3NfZW5kID0gLik7CisKKwlQUk9WSURFIChfZW5kID0gLik7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlIGIvY3B1L2FybTExNzYvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA2OSUKY29weSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlCmNvcHkgdG8gY3B1L2FybTExNzYvTWFrZWZpbGUKaW5kZXggNTc5ZWZlMi4uMWNhOTE5OSAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKKysrIGIvY3B1L2FybTExNzYvTWFrZWZpbGUKQEAgLTEsOCArMSw5IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2VyZ2V5IEt1YnVzaHluIDxrc2lAa29pOC5uZXQ+CisjIChDKSBDb3B5cmlnaHQgMjAwOAorIyBHdWVubmFkaSBMaWFraG92ZXRraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAjIHByb2plY3QuCkBAIC0yNSwyNiArMjYsMjMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKLUNPQkpTCTo9IGR2X2JvYXJkLm8KLVNPQkpTCTo9IGJvYXJkX2luaXQubworU1RBUlQJPSBzdGFydC5vCitDT0JKUwk9IGNwdS5vCiAKLVNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQotU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKLWNsZWFuOgotCXJtIC1mICQoU09CSlMpICQoT0JKUykKLQotZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKyQoTElCKToJJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTc2L2NvbmZpZy5tayBiL2NwdS9hcm0xMTc2L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDgzNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExNzYvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZm5vLWNvbW1vbiAtZmZpeGVkLXI4IFwKKwktbXNvZnQtZmxvYXQKKworIyBNYWtlIEFSTXY1IHRvIGFsbG93IG1vcmUgY29tcGlsZXJzIHRvIHdvcmssIGV2ZW4gdGhvdWdoIGl0cyB2Ni4KK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tYXJjaD1hcm12NXQKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTdXBwbHkgb3B0aW9ucyBhY2NvcmRpbmcgdG8gY29tcGlsZXIgdmVyc2lvbgorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitQTEFURk9STV9DUFBGTEFHUyArPSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KQorUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKK1BMQVRGT1JNX1JFTEZMQUdTICs9JChjYWxsIGNjLW9wdGlvbiwtbXNob3J0LWxvYWQtYnl0ZXMsJChjYWxsIGNjLW9wdGlvbiwtbWFsaWdubWVudC10cmFwcywpKQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvY3B1LmMgYi9jcHUvYXJtMTE3Ni9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTk0ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExNzYvY3B1LmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgVGV4YXMgSW5zdHVybWVudHMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBDUFUgc3BlY2lmaWMgY29kZQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8czNjNjQwMC5oPgorCitzdGF0aWMgdm9pZCBjYWNoZV9mbHVzaCAodm9pZCk7CisKKy8qIHJlYWQgY28tcHJvY2Vzc29yIDE1LCByZWdpc3RlciAjMSAoY29udHJvbCByZWdpc3RlcikgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfcDE1X2MxICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDAgICBAIHJlYWQgY29udHJvbCByZWdcbiIKKwkJOiAiPXIiICh2YWx1ZSkKKwkJOgorCQk6ICJtZW1vcnkiKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHdyaXRlIHRvIGNvLXByb2Nlc3NvciAxNSwgcmVnaXN0ZXIgIzEgKGNvbnRyb2wgcmVnaXN0ZXIpICovCitzdGF0aWMgdm9pZCB3cml0ZV9wMTVfYzEgKHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJtY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwICAgQCB3cml0ZSBpdCBiYWNrXG4iCisJCToKKwkJOiAiciIgKHZhbHVlKQorCQk6ICJtZW1vcnkiKTsKKworCXJlYWRfcDE1X2MxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNwX2RlbGF5ICh2b2lkKQoreworCXZvbGF0aWxlIGludCBpOworCisJLyogTWFueSBPTUFQIHJlZ3MgbmVlZCBhdCBsZWFzdCAyIG5vcHMgICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibm9wXG4iKTsKK30KKworLyogU2VlIGFsc28gQVJNIFJlZi4gTWFuLiAqLworI2RlZmluZSBDMV9NTVUJCSgxIDw8IDApCS8qIG1tdSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfQUxJR04JKDEgPDwgMSkJLyogYWxpZ25tZW50IGZhdWx0cyBvZmYvb24gKi8KKyNkZWZpbmUgQzFfREMJCSgxIDw8IDIpCS8qIGRjYWNoZSBvZmYvb24gKi8KKyNkZWZpbmUgQzFfV0IJCSgxIDw8IDMpCS8qIG1lcmdpbmcgd3JpdGUgYnVmZmVyIG9uL29mZiAqLworI2RlZmluZSBDMV9CSUdfRU5ESUFOCSgxIDw8IDcpCS8qIGJpZyBlbmRpYW4gb2ZmL29uICovCisjZGVmaW5lIEMxX1NZU19QUk9UCSgxIDw8IDgpCS8qIHN5c3RlbSBwcm90ZWN0aW9uICovCisjZGVmaW5lIEMxX1JPTV9QUk9UCSgxIDw8IDkpCS8qIFJPTSBwcm90ZWN0aW9uICovCisjZGVmaW5lIEMxX0lDCQkoMSA8PCAxMikJLyogaWNhY2hlIG9mZi9vbiAqLworI2RlZmluZSBDMV9ISUdIX1ZFQ1RPUlMJKDEgPDwgMTMpCS8qIGxvY2F0aW9uIG9mIHZlY3RvcnM6IGxvdy9oaWdoICovCisjZGVmaW5lIFJFU0VSVkVEXzEJKDB4ZiA8PCAzKQkvKiBtdXN0IGJlIDExMWIgZm9yIFIvVyAqLworCitpbnQgY3B1X2luaXQgKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbGVhbnVwX2JlZm9yZV9saW51eCAodm9pZCkKK3sKKwkvKgorCSAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHdlIGNhbGwgbGludXgKKwkgKiBpdCBwcmVwYXJlcyB0aGUgcHJvY2Vzc29yIGZvciBsaW51eAorCSAqCisJICogd2UgdHVybiBvZmYgY2FjaGVzIGV0YyAuLi4KKwkgKi8KKworCWRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIHR1cm4gb2ZmIEkvRC1jYWNoZSAqLworCWljYWNoZV9kaXNhYmxlKCk7CisJZGNhY2hlX2Rpc2FibGUoKTsKKwljYWNoZV9mbHVzaCgpOworCisJcmV0dXJuIDA7Cit9CisKKworLyogKiByZXNldCB0aGUgY3B1IGJ5IHNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGFuZCBsZXQgaGltIHRpbWUgb3V0ICovCit2b2lkIHJlc2V0X2NwdSAodWxvbmcgaWdub3JlZCkKK3sKKwlwcmludGYoInJlc2V0Li4uIFxuXG5cbiIpOworCVNXX1JTVF9SRUcgPSAweDY0MDA7CisJLyogbG9vcCBmb3JldmVyIGFuZCB3YWl0IGZvciByZXNldCB0byBoYXBwZW4gKi8KKwl3aGlsZSAoMSkgeworCQlpZiAoc2VyaWFsX3RzdGMoKSkgeworCQkJc2VyaWFsX2dldGMoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qTk9UUkVBQ0hFRCovCit9CisKK2ludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZGlzYWJsZV9pbnRlcnJ1cHRzICgpOworCXJlc2V0X2NwdSAoMCk7CisJLypOT1RSRUFDSEVEKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBpY2FjaGVfZW5hYmxlICh2b2lkKQoreworCXVsb25nIHJlZzsKKworCXJlZyA9IHJlYWRfcDE1X2MxICgpOwkvKiBnZXQgY29udHJvbCByZWcuICovCisJY3BfZGVsYXkgKCk7CisJd3JpdGVfcDE1X2MxIChyZWcgfCBDMV9JQyk7Cit9CisKK3ZvaWQgaWNhY2hlX2Rpc2FibGUgKHZvaWQpCit7CisJdWxvbmcgcmVnOworCisJcmVnID0gcmVhZF9wMTVfYzEgKCk7CisJY3BfZGVsYXkgKCk7CisJd3JpdGVfcDE1X2MxIChyZWcgJiB+QzFfSUMpOworfQorCitpbnQgaWNhY2hlX3N0YXR1cyAodm9pZCkKK3sKKwlyZXR1cm4gKHJlYWRfcDE1X2MxICgpICYgQzFfSUMpICE9IDA7Cit9CisKKy8qIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHVzZSB0aGUgZGNhY2hlIGlmIHRoZSBNTVUgaXMgbm90IGVuYWJsZWQgKi8KK3ZvaWQgZGNhY2hlX2VuYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsKKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyB8IEMxX0RDKTsKK30KKwordm9pZCBkY2FjaGVfZGlzYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsKKwljcF9kZWxheSAoKTsKKwl3cml0ZV9wMTVfYzEgKHJlZyAmIH5DMV9EQyk7Cit9CisKK2ludCBkY2FjaGVfc3RhdHVzICh2b2lkKQoreworCXJldHVybiAocmVhZF9wMTVfYzEgKCkgJiBDMV9EQykgIT0gMDsKK30KKworLyogZmx1c2ggSS9ELWNhY2hlICovCitzdGF0aWMgdm9pZCBjYWNoZV9mbHVzaCAodm9pZCkKK3sKKwkvKiBpbnZhbGlkYXRlIGJvdGggY2FjaGVzIGFuZCBmbHVzaCBidGIgKi8KKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM3LCAwIjogOiJyIiAoMCkpOworCS8qIG1lbSBiYXJyaWVyIHRvIHN5bmMgdGhpbmdzICovCisJYXNtICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiOiA6InIiICgwKSk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZSBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA2OSUKY29weSBmcm9tIGJvYXJkL2RhdmluY2kvZHYtZXZtL01ha2VmaWxlCmNvcHkgdG8gY3B1L2FybTExNzYvczNjNjR4eC9NYWtlZmlsZQppbmRleCA1NzllZmUyLi40YWIxODExIDEwMDY0NAotLS0gYS9ib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQorKysgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L01ha2VmaWxlCkBAIC0xLDggKzEsOSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgorIyAoQykgQ29weXJpZ2h0IDIwMDgKKyMgR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogIyBwcm9qZWN0LgpAQCAtMjUsMjYgKzI2LDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQogCi1DT0JKUwk6PSBkdl9ib2FyZC5vCi1TT0JKUwk6PSBib2FyZF9pbml0Lm8KK0NPQkpTLXkJPSBpbnRlcnJ1cHRzLm8KK0NPQkpTLSQoQ09ORklHX1MzQzY0MDApCSs9IGNwdV9pbml0Lm8gc3BlZWQubworQ09CSlMtJChDT05GSUdfVVNCX09IQ0lfTkVXKSArPSB1c2IubwogCi1TUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKLVNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMteSkpCiAKLSQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKLWNsZWFuOgotCXJtIC1mICQoU09CSlMpICQoT0JKUykKLQotZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKyQoTElCKToJJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRoaXMgaXMgZm9yICQob2JqKS5kZXBlbmQgdGFyZ2V0CisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAogaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKIHNpbmNsdWRlICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTc2L3MzYzY0eHgvY29uZmlnLm1rIGIvY3B1L2FybTExNzYvczNjNjR4eC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyCisjIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZm5vLWNvbW1vbiAtZmZpeGVkLXI4IFwKKwktbXNvZnQtZmxvYXQKKworIyBNYWtlIEFSTXY1IHRvIGFsbG93IG1vcmUgY29tcGlsZXJzIHRvIHdvcmssIGV2ZW4gdGhvdWdoIGl0cyB2Ni4KK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tYXJjaD1hcm12NXQKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTdXBwbHkgb3B0aW9ucyBhY2NvcmRpbmcgdG8gY29tcGlsZXIgdmVyc2lvbgorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjUExBVEZPUk1fQ1BQRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tYXBjcy0zMiwtbWFiaT1hcGNzLWdudSkKK1BMQVRGT1JNX1JFTEZMQUdTICs9JChjYWxsIGNjLW9wdGlvbiwtbXNob3J0LWxvYWQtYnl0ZXMsJChjYWxsIGNjLW9wdGlvbiwtbWFsaWdubWVudC10cmFwcywpKQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvczNjNjR4eC9jcHVfaW5pdC5TIGIvY3B1L2FybTExNzYvczNjNjR4eC9jcHVfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmRhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L2NwdV9pbml0LlMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBPcmlnaW5hdGVzIGZyb20gU2Ftc3VuZydzIHUtYm9vdCAxLjEuNiBwb3J0IHRvIFMzQzY0MDAgLyBTTURLNjQwMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxzM2M2NDAwLmg+CisKKwkuZ2xvYmwgbWVtX2N0cmxfYXNtX2luaXQKK21lbV9jdHJsX2FzbV9pbml0OgorCS8qIE1lbW9yeSBzdWJzeXN0ZW0gYWRkcmVzcyAweDdlMDBmMTIwICovCisJbGRyCXIwLCA9RUxGSU5fTUVNX1NZU19DRkcKKworCS8qIFhtMENTbjIgPSBORkNPTiBDUzAsIFhtMENTbjMgPSBORkNPTiBDUzEgKi8KKwltb3YJcjEsICMweGQKKwlzdHIJcjEsIFtyMF0KKworCS8qIERNQzEgYmFzZSBhZGRyZXNzIDB4N2UwMDEwMDAgKi8KKwlsZHIJcjAsID1FTEZJTl9ETUMxX0JBU0UKKworCWxkcglyMSwgPTB4NAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX01FTUNfQ01EXQorCisJbGRyCXIxLCA9RE1DX0REUl9SRUZSRVNIX1BSRAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX1JFRlJFU0hfUFJEXQorCisJbGRyCXIxLCA9RE1DX0REUl9DQVNfTEFURU5DWQorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX0NBU19MQVRFTkNZXQorCisJbGRyCXIxLCA9RE1DX0REUl90X0RRU1MKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19UX0RRU1NdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfTVJECisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9NUkRdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfUkFTCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9SQVNdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfUkMKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19UX1JDXQorCisJbGRyCXIxLCA9RE1DX0REUl90X1JDRAorCWxkcglyMiwgPURNQ19ERFJfc2NoZWR1bGVfUkNECisJb3JyCXIxLCByMSwgcjIKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19UX1JDRF0KKworCWxkcglyMSwgPURNQ19ERFJfdF9SRkMKKwlsZHIJcjIsID1ETUNfRERSX3NjaGVkdWxlX1JGQworCW9ycglyMSwgcjEsIHIyCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9SRkNdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfUlAKKwlsZHIJcjIsID1ETUNfRERSX3NjaGVkdWxlX1JQCisJb3JyCXIxLCByMSwgcjIKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19UX1JQXQorCisJbGRyCXIxLCA9RE1DX0REUl90X1JSRAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX1RfUlJEXQorCisJbGRyCXIxLCA9RE1DX0REUl90X1dSCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9XUl0KKworCWxkcglyMSwgPURNQ19ERFJfdF9XVFIKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19UX1dUUl0KKworCWxkcglyMSwgPURNQ19ERFJfdF9YUAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX1RfWFBdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfWFNSCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9YU1JdCisKKwlsZHIJcjEsID1ETUNfRERSX3RfRVNSCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfVF9FU1JdCisKKwlsZHIJcjEsID1ETUMxX01FTV9DRkcKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19NRU1PUllfQ0ZHXQorCisJbGRyCXIxLCA9RE1DMV9NRU1fQ0ZHMgorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX01FTU9SWV9DRkcyXQorCisJbGRyCXIxLCA9RE1DMV9DSElQMF9DRkcKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19DSElQXzBfQ0ZHXQorCisJbGRyCXIxLCA9RE1DX0REUl8zMl9DRkcKKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19VU0VSX0NPTkZJR10KKworCS8qIERNQzAgRERSIENoaXAgMCBjb25maWd1cmF0aW9uIGRpcmVjdCBjb21tYW5kIHJlZyAqLworCWxkcglyMSwgPURNQ19OT1AwCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfRElSRUNUX0NNRF0KKworCS8qIFByZWNoYXJnZSBBbGwgKi8KKwlsZHIJcjEsID1ETUNfUEEwCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfRElSRUNUX0NNRF0KKworCS8qIEF1dG8gUmVmcmVzaCAyIHRpbWUgKi8KKwlsZHIJcjEsID1ETUNfQVIwCisJc3RyCXIxLCBbcjAsICNJTkRFWF9ETUNfRElSRUNUX0NNRF0KKwlzdHIJcjEsIFtyMCwgI0lOREVYX0RNQ19ESVJFQ1RfQ01EXQorCisJLyogTVJTICovCisJbGRyCXIxLCA9RE1DX21ERFJfRU1SMAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX0RJUkVDVF9DTURdCisKKwkvKiBNb2RlIFJlZyAqLworCWxkcglyMSwgPURNQ19tRERSX01SMAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX0RJUkVDVF9DTURdCisKKwkvKiBFbmFibGUgRE1DMSAqLworCW1vdglyMSwgIzB4MAorCXN0cglyMSwgW3IwLCAjSU5ERVhfRE1DX01FTUNfQ01EXQorCitjaGVja19kbWMxX3JlYWR5OgorCWxkcglyMSwgW3IwLCAjSU5ERVhfRE1DX01FTUNfU1RBVFVTXQorCW1vdglyMiwgIzB4MworCWFuZAlyMSwgcjEsIHIyCisJY21wCXIxLCAjMHgxCisJYm5lCWNoZWNrX2RtYzFfcmVhZHkKKwlub3AKKworCW1vdglwYywgbHIKKworCS5sdG9yZwpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvczNjNjR4eC9pbnRlcnJ1cHRzLmMgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU2YWU0Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExNzYvczNjNjR4eC9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzIDx3d3cudGkuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyLTIwMDQKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFBoaWxpcHBlIFJvYmluLCBBUk0gTHRkLiA8cGhpbGlwcGUucm9iaW5AYXJtLmNvbT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtYXJtdi9wdHJhY2UuaD4KKyNpbmNsdWRlIDxzM2M2NDAwLmg+CisKK3N0YXRpYyB1bG9uZyB0aW1lcl9sb2FkX3ZhbDsKKworI2RlZmluZSBQUkVTQ0FMRVIJMTY3CisKK3N0YXRpYyBzM2M2NHh4X3RpbWVycyAqczNjNjR4eF9nZXRfYmFzZV90aW1lcnModm9pZCkKK3sKKwlyZXR1cm4gKHMzYzY0eHhfdGltZXJzICopRUxGSU5fVElNRVJfQkFTRTsKK30KKworLyogbWFjcm8gdG8gcmVhZCB0aGUgMTYgYml0IHRpbWVyICovCitzdGF0aWMgaW5saW5lIHVsb25nIHJlYWRfdGltZXIodm9pZCkKK3sKKwlzM2M2NHh4X3RpbWVycyAqY29uc3QgdGltZXJzID0gczNjNjR4eF9nZXRfYmFzZV90aW1lcnMoKTsKKworCXJldHVybiB0aW1lcnMtPlRDTlRPNDsKK30KKworLyogSW50ZXJuYWwgdGljayB1bml0cyAqLworLyogTGFzdCBkZWNyZW1uZXRlciBzbmFwc2hvdCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdGRlYzsKKy8qIE1vbm90b25pYyBpbmNyZW1lbnRpbmcgdGltZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wOworCitpbnQgaW50ZXJydXB0X2luaXQodm9pZCkKK3sKKwlzM2M2NHh4X3RpbWVycyAqY29uc3QgdGltZXJzID0gczNjNjR4eF9nZXRfYmFzZV90aW1lcnMoKTsKKworCS8qIHVzZSBQV00gVGltZXIgNCBiZWNhdXNlIGl0IGhhcyBubyBvdXRwdXQgKi8KKwkvKgorCSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIHNjaGVtZSBmb3IgdGhlIHRpbWVyOgorCSAqIFByZXNjYWxlciBpcyBoYXJkIGZpeGVkIGF0IDE2NywgZGl2aWRlciBhdCAxLzQuCisJICogVGhpcyBnaXZlcyBhdCBQQ0xLIGZyZXF1ZW5jeSA2Nk1IeiBhcHByb3guIDEwdXMgdGlja3MKKwkgKiBUaGUgdGltZXIgaXMgc2V0IHRvIHdyYXAgYWZ0ZXIgMTAwcywgYXQgNjZNSHogdGhpcyBvYnZpb3VzbHkKKwkgKiBoYXBwZW5zIGFmdGVyIDEwLDAwMCwwMDAgdGlja3MuIEEgbG9uZyB2YXJpYWJsZSBjYW4gdGh1cworCSAqIGtlZXAgdmFsdWVzIHVwIHRvIDQwLDAwMHMsIGkuZS4sIDExIGhvdXJzLiBUaGlzIHNob3VsZCBiZQorCSAqIGVub3VnaCBmb3IgbW9zdCB1c2VzOi0pIFBvc3NpYmxlIG9wdGltaXphdGlvbnM6IHNlbGVjdCBhCisJICogYmluYXJ5LWZyaWVuZGx5IGZyZXF1ZW5jeSwgZS5nLiwgMW1zIC8gMTI4LiBBbHNvIGNhbGN1bGF0ZQorCSAqIHRoZSBwcmVzY2FsZXIgYXV0b21hdGljYWxseSBmb3Igb3RoZXIgUENMSyBmcmVxdWVuY2llcy4KKwkgKi8KKwl0aW1lcnMtPlRDRkcwID0gUFJFU0NBTEVSIDw8IDg7CisJaWYgKHRpbWVyX2xvYWRfdmFsID09IDApIHsKKwkJdGltZXJfbG9hZF92YWwgPSBnZXRfUENMSygpIC8gUFJFU0NBTEVSICogKDEwMCAvIDQpOyAvKiAxMDBzICovCisJCXRpbWVycy0+VENGRzEgPSAodGltZXJzLT5UQ0ZHMSAmIH4weGYwMDAwKSB8IDB4MjAwMDA7CisJfQorCisJLyogbG9hZCB2YWx1ZSBmb3IgMTAgbXMgdGltZW91dCAqLworCWxhc3RkZWMgPSB0aW1lcnMtPlRDTlRCNCA9IHRpbWVyX2xvYWRfdmFsOworCS8qIGF1dG8gbG9hZCwgbWFudWFsIHVwZGF0ZSBvZiBUaW1lciA0ICovCisJdGltZXJzLT5UQ09OID0gKHRpbWVycy0+VENPTiAmIH4weDAwNzAwMDAwKSB8IFRDT05fNF9BVVRPIHwKKwkJVENPTl80X1VQREFURTsKKworCS8qIGF1dG8gbG9hZCwgc3RhcnQgVGltZXIgNCAqLworCXRpbWVycy0+VENPTiA9ICh0aW1lcnMtPlRDT04gJiB+MHgwMDcwMDAwMCkgfCBUQ09OXzRfQVVUTyB8IENPVU5UXzRfT047CisJdGltZXN0YW1wID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgorICogT24gQVJNIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKK3sKKwl1bG9uZyBub3cgPSByZWFkX3RpbWVyKCk7CisKKwlpZiAobGFzdGRlYyA+PSBub3cpIHsKKwkJLyogbm9ybWFsIG1vZGUgKi8KKwkJdGltZXN0YW1wICs9IGxhc3RkZWMgLSBub3c7CisJfSBlbHNlIHsKKwkJLyogd2UgaGF2ZSBhbiBvdmVyZmxvdyAuLi4gKi8KKwkJdGltZXN0YW1wICs9IGxhc3RkZWMgKyB0aW1lcl9sb2FkX3ZhbCAtIG5vdzsKKwl9CisJbGFzdGRlYyA9IG5vdzsKKworCXJldHVybiB0aW1lc3RhbXA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCisgKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCisgKi8KK3Vsb25nIGdldF90YmNsayh2b2lkKQoreworCS8qIFdlIG92ZXJydW4gaW4gMTAwcyAqLworCXJldHVybiAodWxvbmcpKHRpbWVyX2xvYWRfdmFsIC8gMTAwKTsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwkvKiByZXNldCB0aW1lICovCisJbGFzdGRlYyA9IHJlYWRfdGltZXIoKTsKKwl0aW1lc3RhbXAgPSAwOworfQorCit2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCit7CisJcmVzZXRfdGltZXJfbWFza2VkKCk7Cit9CisKK3Vsb25nIGdldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3RpY2tzKCkgLyAodGltZXJfbG9hZF92YWwgLyAoMTAwICogQ0ZHX0haKSk7Cit9CisKK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCXJldHVybiBnZXRfdGltZXJfbWFza2VkKCkgLSBiYXNlOworfQorCit2b2lkIHNldF90aW1lcih1bG9uZyB0KQoreworCXRpbWVzdGFtcCA9IHQgKiAodGltZXJfbG9hZF92YWwgLyAoMTAwICogQ0ZHX0haKSk7Cit9CisKK3ZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOworCXVsb25nIHRtbzsKKworCXRtbyA9ICh1c2VjICsgOSkgLyAxMDsKKwl0bXAgPSBnZXRfdGlja3MoKSArIHRtbzsJLyogZ2V0IGN1cnJlbnQgdGltZXN0YW1wICovCisKKwl3aGlsZSAoZ2V0X3RpY2tzKCkgPCB0bXApLyogbG9vcCB0aWxsIGV2ZW50ICovCisJCSAvKk5PUCovOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvczNjNjR4eC9zcGVlZC5jIGIvY3B1L2FybTExNzYvczNjNjR4eC9zcGVlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L3NwZWVkLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgZC5tdWVsbGVyQGVsc29mdC5jaAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBUaGlzIGNvZGUgc2hvdWxkIHdvcmsgZm9yIGJvdGggdGhlIFMzQzI0MDAgYW5kIHRoZSBTM0MyNDEwCisgKiBhcyB0aGV5IHNlZW0gdG8gaGF2ZSB0aGUgc2FtZSBQTEwgYW5kIGNsb2NrIG1hY2hpbmVyeSBpbnNpZGUuCisgKiBUaGUgZGlmZmVyZW50IGFkZHJlc3MgbWFwcGluZyBpcyBoYW5kbGVkIGJ5IHRoZSBzM2MyNHh4LmggZmlsZXMgYmVsb3cuCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHMzYzY0MDAuaD4KKworI2RlZmluZSBBUExMIDAKKyNkZWZpbmUgTVBMTCAxCisjZGVmaW5lIEVQTEwgMgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogTk9URTogVGhpcyBkZXNjcmliZXMgdGhlIHByb3BlciB1c2Ugb2YgdGhpcyBmaWxlLgorICoKKyAqIENPTkZJR19TWVNfQ0xLX0ZSRVEgc2hvdWxkIGJlIGRlZmluZWQgYXMgdGhlIGlucHV0IGZyZXF1ZW5jeSBvZiB0aGUgUExMLgorICoKKyAqIGdldF9GQ0xLKCksIGdldF9IQ0xLKCksIGdldF9QQ0xLKCkgYW5kIGdldF9VQ0xLKCkgcmV0dXJuIHRoZSBjbG9jayBvZgorICogdGhlIHNwZWNpZmllZCBidXMgaW4gSFouCisgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVsb25nIGdldF9QTExDTEsoaW50IHBsbHJlZykKK3sKKwl1bG9uZyByLCBtLCBwLCBzOworCisJc3dpdGNoIChwbGxyZWcpIHsKKwljYXNlIEFQTEw6CisJCXIgPSBBUExMX0NPTl9SRUc7CisJCWJyZWFrOworCWNhc2UgTVBMTDoKKwkJciA9IE1QTExfQ09OX1JFRzsKKwkJYnJlYWs7CisJY2FzZSBFUExMOgorCQlyID0gRVBMTF9DT04wX1JFRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaGFuZygpOworCX0KKworCW0gPSAociA+PiAxNikgJiAweDNmZjsKKwlwID0gKHIgPj4gOCkgJiAweDNmOworCXMgPSByICYgMHg3OworCisJcmV0dXJuIG0gKiAoQ09ORklHX1NZU19DTEtfRlJFUSAvIChwICogKDEgPDwgcykpKTsKK30KKworLyogcmV0dXJuIEFSTUNPUkUgZnJlcXVlbmN5ICovCit1bG9uZyBnZXRfQVJNQ0xLKHZvaWQpCit7CisJdWxvbmcgZGl2OworCisJZGl2ID0gQ0xLX0RJVjBfUkVHOworCisJcmV0dXJuIGdldF9QTExDTEsoQVBMTCkgLyAoKGRpdiAmIDB4NykgKyAxKTsKK30KKworLyogcmV0dXJuIEZDTEsgZnJlcXVlbmN5ICovCit1bG9uZyBnZXRfRkNMSyh2b2lkKQoreworCXJldHVybiBnZXRfUExMQ0xLKEFQTEwpOworfQorCisvKiByZXR1cm4gSENMSyBmcmVxdWVuY3kgKi8KK3Vsb25nIGdldF9IQ0xLKHZvaWQpCit7CisJdWxvbmcgZmNsazsKKworCXVpbnQgaGNsa3gyX2RpdiA9ICgoQ0xLX0RJVjBfUkVHID4+IDkpICYgMHg3KSArIDE7CisJdWludCBoY2xrX2RpdiA9ICgoQ0xLX0RJVjBfUkVHID4+IDgpICYgMHgxKSArIDE7CisKKwkvKgorCSAqIEJpdCA3IGV4aXN0cyBvbiBzM2M2NDEwLCBhbmQgbm90IG9uIHMzYzY0MDAsIGl0IGlzIHJlc2VydmVkIG9uCisJICogczNjNjQwMCBhbmQgaXMgYWx3YXlzIDAsIGFuZCBpdCBpcyBpbmRlZWQgcnVubmluZyBpbiBBU1lOQyBtb2RlCisJICovCisJaWYgKE9USEVSU19SRUcgJiAweDgwKQorCQlmY2xrID0gZ2V0X0ZDTEsoKTsJCS8qIFNZTkMgTW9kZQkqLworCWVsc2UKKwkJZmNsayA9IGdldF9QTExDTEsoTVBMTCk7CS8qIEFTWU5DIE1vZGUJKi8KKworCXJldHVybiBmY2xrIC8gKGhjbGtfZGl2ICogaGNsa3gyX2Rpdik7Cit9CisKKy8qIHJldHVybiBQQ0xLIGZyZXF1ZW5jeSAqLwordWxvbmcgZ2V0X1BDTEsodm9pZCkKK3sKKwl1bG9uZyBmY2xrOworCXVpbnQgaGNsa3gyX2RpdiA9ICgoQ0xLX0RJVjBfUkVHID4+IDkpICYgMHg3KSArIDE7CisJdWludCBwcmVfZGl2ID0gKChDTEtfRElWMF9SRUcgPj4gMTIpICYgMHhmKSArIDE7CisKKwlpZiAoT1RIRVJTX1JFRyAmIDB4ODApCisJCWZjbGsgPSBnZXRfRkNMSygpOwkJLyogU1lOQyBNb2RlCSovCisJZWxzZQorCQlmY2xrID0gZ2V0X1BMTENMSyhNUExMKTsJLyogQVNZTkMgTW9kZQkqLworCisJcmV0dXJuIGZjbGsgLyAoaGNsa3gyX2RpdiAqIHByZV9kaXYpOworfQorCisvKiByZXR1cm4gVUNMSyBmcmVxdWVuY3kgKi8KK3Vsb25nIGdldF9VQ0xLKHZvaWQpCit7CisJcmV0dXJuIGdldF9QTExDTEsoRVBMTCk7Cit9CisKK2ludCBwcmludF9jcHVpbmZvKHZvaWQpCit7CisJcHJpbnRmKCJcbkNQVTogICAgIFMzQzY0MDBAJWx1TUh6XG4iLCBnZXRfQVJNQ0xLKCkgLyAxMDAwMDAwKTsKKwlwcmludGYoIiAgICAgICAgIEZjbGsgPSAlbHVNSHosIEhjbGsgPSAlbHVNSHosIFBjbGsgPSAlbHVNSHogIiwKKwkgICAgICAgZ2V0X0ZDTEsoKSAvIDEwMDAwMDAsIGdldF9IQ0xLKCkgLyAxMDAwMDAwLAorCSAgICAgICBnZXRfUENMSygpIC8gMTAwMDAwMCk7CisKKwlpZiAoT1RIRVJTX1JFRyAmIDB4ODApCisJCXByaW50ZigiKFNZTkMgTW9kZSkgXG4iKTsKKwllbHNlCisJCXByaW50ZigiKEFTWU5DIE1vZGUpIFxuIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvbWVtc2V0dXAuUyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvdXNiLmMKc2ltaWxhcml0eSBpbmRleCA2NiUKY29weSBmcm9tIGJvYXJkL2ludGVncmF0b3JhcC9tZW1zZXR1cC5TCmNvcHkgdG8gY3B1L2FybTExNzYvczNjNjR4eC91c2IuYwppbmRleCBkYTQzY2I2Li4yNzRhNGVkIDEwMDY0NAotLS0gYS9ib2FyZC9pbnRlZ3JhdG9yYXAvbWVtc2V0dXAuUworKysgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L3VzYi5jCkBAIC0xLDUgKzEsOCBAQAogLyoKLSAqIE1lbW9yeSBzZXR1cCBmb3IgaW50ZWdyYXRvckFQCisgKiBVUkIgT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGluaXRpYWxpemF0aW9uIGZvciBVU0Igb24gdGhlIFMzQzY0WFguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LAorICogR3Vlbm5hZGkgTGlha2hvdmV0c2tpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIDxsZ0BkZW54LmRlPgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtMTgsMTIgKzIxLDI1IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLS8qCi0gKglNZW1vcnkgc2V0dXAKLSAqICAgICAgLSB0aGUgcmVzZXQgZGVmYXVsdHMgYXJlIGFzc3VtZWQgc3VmZmljaWVudAorICoKICAqLwogCi0uZ2xvYmwgbWVtc2V0dXAKLW1lbXNldHVwOgotCW1vdglwYyxscgorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHMzYzY0MDAuaD4KKworaW50IHVzYl9jcHVfaW5pdCh2b2lkKQoreworCU9USEVSU19SRUcgfD0gMHgxMDAwMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYl9jcHVfc3RvcCh2b2lkKQoreworCU9USEVSU19SRUcgJj0gfjB4MTAwMDA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdXNiX2NwdV9pbml0X2ZhaWwodm9pZCkKK3sKKwlPVEhFUlNfUkVHICY9IH4weDEwMDAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvc3RhcnQuUyBiL2NwdS9hcm0xMTc2L3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxMjc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTc2L3N0YXJ0LlMKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiAgYXJtYm9vdCAtIFN0YXJ0dXAgQ29kZSBmb3IgUzNDNjQwMC9BUk0xMTc2IENQVS1jb3JlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3CVNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAyMDA3LTA5LTIxIC0gUmVzdHJ1Y3R1cmVkIGNvZGVzIGJ5IGpzZ29vZCAoanNnb29kLnlhbmdAc2Ftc3VuZy5jb20pCisgKiAyMDA3LTA5LTIxIC0gQWRkZWQgTW92aU5BTkQgYW5kIE9uZU5BTkQgYm9vdCBjb2RlcyBieQorICoganNnb29kIChqc2dvb2QueWFuZ0BzYW1zdW5nLmNvbSkKKyAqIEJhc2UgY29kZXMgYnkgc2NzdWggKHNjLnN1aCkKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2lmZGVmIENPTkZJR19FTkFCTEVfTU1VCisjaW5jbHVkZSA8YXNtL3Byb2MvZG9tYWluLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzM2M2NDAwLmg+CisKKyNpZiAhZGVmaW5lZChDT05GSUdfRU5BQkxFX01NVSkgJiYgIWRlZmluZWQoQ0ZHX1BIWV9VQk9PVF9CQVNFKQorI2RlZmluZSBDRkdfUEhZX1VCT09UX0JBU0UJQ0ZHX1VCT09UX0JBU0UKKyNlbmRpZgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6IGIJcmVzZXQKKyNpZm5kZWYgQ09ORklHX05BTkRfU1BMCisJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCisJbGRyCXBjLCBfc29mdHdhcmVfaW50ZXJydXB0CisJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKKwlsZHIJcGMsIF9kYXRhX2Fib3J0CisJbGRyCXBjLCBfbm90X3VzZWQKKwlsZHIJcGMsIF9pcnEKKwlsZHIJcGMsIF9maXEKKworX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwkud29yZCB1bmRlZmluZWRfaW5zdHJ1Y3Rpb24KK19zb2Z0d2FyZV9pbnRlcnJ1cHQ6CisJLndvcmQgc29mdHdhcmVfaW50ZXJydXB0CitfcHJlZmV0Y2hfYWJvcnQ6CisJLndvcmQgcHJlZmV0Y2hfYWJvcnQKK19kYXRhX2Fib3J0OgorCS53b3JkIGRhdGFfYWJvcnQKK19ub3RfdXNlZDoKKwkud29yZCBub3RfdXNlZAorX2lycToKKwkud29yZCBpcnEKK19maXE6CisJLndvcmQgZmlxCitfcGFkOgorCS53b3JkIDB4MTIzNDU2NzggLyogbm93IDE2KjQ9NjQgKi8KKyNlbHNlCisJLiA9IF9zdGFydCArIDY0CisjZW5kaWYKKworLmdsb2JhbCBfZW5kX3ZlY3QKK19lbmRfdmVjdDoKKwkuYmFsaWdubCAxNiwweGRlYWRiZWVmCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKKyAqCisgKiBkbyBpbXBvcnRhbnQgaW5pdCBvbmx5IGlmIHdlIGRvbid0IHN0YXJ0IGZyb20gbWVtb3J5IQorICogc2V0dXAgTWVtb3J5IGFuZCBib2FyZCBzcGVjaWZpYyBiaXRzIHByaW9yIHRvIHJlbG9jYXRpb24uCisgKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQorICogc2V0dXAgc3RhY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCisKKy8qCisgKiBCZWxvdyB2YXJpYWJsZSBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIHdlIHVzZSBNTVUgaW4gVS1Cb290LgorICogV2l0aG91dCBpdCwgd2UgY2Fubm90IHJ1biBjb2RlIGNvcnJlY3RseSBiZWZvcmUgTU1VIGlzIE9OLgorICogYnkgc2NzdWguCisgKi8KK19URVhUX1BIWV9CQVNFOgorCS53b3JkCUNGR19QSFlfVUJPT1RfQkFTRQorCisuZ2xvYmwgX2FybWJvb3Rfc3RhcnQKK19hcm1ib290X3N0YXJ0OgorCS53b3JkIF9zdGFydAorCisvKgorICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCisgKi8KKy5nbG9ibCBfYnNzX3N0YXJ0CitfYnNzX3N0YXJ0OgorCS53b3JkIF9fYnNzX3N0YXJ0CisKKy5nbG9ibCBfYnNzX2VuZAorX2Jzc19lbmQ6CisJLndvcmQgX2VuZAorCisvKgorICogdGhlIGFjdHVhbCByZXNldCBjb2RlCisgKi8KKworcmVzZXQ6CisJLyoKKwkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCisJICovCisJbXJzCXIwLCBjcHNyCisJYmljCXIwLCByMCwgIzB4M2YKKwlvcnIJcjAsIHIwLCAjMHhkMworCW1zcgljcHNyLCByMAorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDUFVfaW5pdF9jcml0aWNhbCByZWdpc3RlcnMKKyAqCisgKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCisgKiBzZXR1cCBtZW1vcnkgdGltaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCS8qCisJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LAorCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCisJICovCitjcHVfaW5pdF9jcml0OgorCS8qCisJICogV2hlbiBib290aW5nIGZyb20gTkFORCAtIGl0IGhhcyBkZWZpbml0ZWx5IGJlZW4gYSByZXNldCwgc28sIG5vIG5lZWQKKwkgKiB0byBmbHVzaCBjYWNoZXMgYW5kIGRpc2FibGUgdGhlIE1NVQorCSAqLworI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKKwkvKgorCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKKwkgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLworCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCisKKwkvKgorCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKKwliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCisJb3JyCXIwLCByMCwgIzB4MDAwMDAwMDIJQCBzZXQgYml0IDIgKEEpIEFsaWduCisJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCisJLyogUHJlcGFyZSB0byBkaXNhYmxlIHRoZSBNTVUgKi8KKwlhZHIJcjEsIG1tdV9kaXNhYmxlX3BoeXMKKwkvKiBXZSBwcmVzdW1lIHdlJ3JlIHdpdGhpbiB0aGUgZmlyc3QgMTAyNCBieXRlcyAqLworCWFuZAlyMSwgcjEsICMweDNmYworCWxkcglyMiwgX1RFWFRfUEhZX0JBU0UKKwlsZHIJcjMsID0weGZmZjAwMDAwCisJYW5kCXIyLCByMiwgcjMKKwlvcnIJcjIsIHIyLCByMQorCWIJbW11X2Rpc2FibGUKKworCS5hbGlnbiA1CisJLyogUnVuIGluIGEgc2luZ2xlIGNhY2hlLWxpbmUgKi8KK21tdV9kaXNhYmxlOgorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwlub3AKKwlub3AKKwltb3YJcGMsIHIyCisjZW5kaWYKKworbW11X2Rpc2FibGVfcGh5czoKKwkvKiBQZXJpIHBvcnQgc2V0dXAgKi8KKwlsZHIJcjAsID0weDcwMDAwMDAwCisJb3JyCXIwLCByMCwgIzB4MTMKKwltY3IJcDE1LDAscjAsYzE1LGMyLDQgICAgICAgQCAyNTZNICgweDcwMDAwMDAwIC0gMHg3ZmZmZmZmZikKKworCS8qCisJICogR28gc2V0dXAgTWVtb3J5IGFuZCBib2FyZCBzcGVjaWZpYyBiaXRzIHByaW9yIHRvIHJlbG9jYXRpb24uCisJICovCisJYmwJbG93bGV2ZWxfaW5pdAkJLyogZ28gc2V0dXAgcGxsLG11eCxtZW1vcnkgKi8KKworYWZ0ZXJfY29weToKKyNpZmRlZiBDT05GSUdfRU5BQkxFX01NVQorZW5hYmxlX21tdToKKwkvKiBlbmFibGUgZG9tYWluIGFjY2VzcyAqLworCWxkcglyNSwgPTB4MDAwMGZmZmYKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCS8qIGxvYWQgZG9tYWluIGFjY2VzcyByZWdpc3RlciAqLworCisJLyogU2V0IHRoZSBUVEIgcmVnaXN0ZXIgKi8KKwlsZHIJcjAsIF9tbXVfdGFibGVfYmFzZQorCWxkcglyMSwgPUNGR19QSFlfVUJPT1RfQkFTRQorCWxkcglyMiwgPTB4ZmZmMDAwMDAKKwliaWMJcjAsIHIwLCByMgorCW9ycglyMSwgcjAsIHIxCisJbWNyCXAxNSwgMCwgcjEsIGMyLCBjMCwgMAorCisJLyogRW5hYmxlIHRoZSBNTVUgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJb3JyCXIwLCByMCwgIzEJCS8qIFNldCBDUl9NIHRvIGVuYWJsZSBNTVUgKi8KKworCS8qIFByZXBhcmUgdG8gZW5hYmxlIHRoZSBNTVUgKi8KKwlhZHIJcjEsIHNraXBfaHdfaW5pdAorCWFuZAlyMSwgcjEsICMweDNmYworCWxkcglyMiwgX1RFWFRfQkFTRQorCWxkcglyMywgPTB4ZmZmMDAwMDAKKwlhbmQJcjIsIHIyLCByMworCW9ycglyMiwgcjIsIHIxCisJYgltbXVfZW5hYmxlCisKKwkuYWxpZ24gNQorCS8qIFJ1biBpbiBhIHNpbmdsZSBjYWNoZS1saW5lICovCittbXVfZW5hYmxlOgorCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAorCW5vcAorCW5vcAorCW1vdglwYywgcjIKKyNlbmRpZgorCitza2lwX2h3X2luaXQ6CisJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLworc3RhY2tfc2V0dXA6CisjaWZkZWYgQ09ORklHX01FTU9SWV9VUFBFUl9DT0RFCisJbGRyCXNwLCA9KENGR19VQk9PVF9CQVNFICsgQ0ZHX1VCT09UX1NJWkUgLSAweGMpCisjZWxzZQorCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogdXBwZXIgMTI4IEtpQjogcmVsb2NhdGVkIHVib290ICAgKi8KKwlzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdWIJcjAsIHIwLCAjQ0ZHX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCisKKyNlbmRpZgorCitjbGVhcl9ic3M6CisJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLworCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICovCisJbW92IAlyMiwgIzAJCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCitjbGJzc19sOgorCXN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLiAgICAgICAgICAgICAgICAgICAgKi8KKwlhZGQJcjAsIHIwLCAjNAorCWNtcAlyMCwgcjEKKwlibGUJY2xic3NfbAorCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAorCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKKworX3N0YXJ0X2FybWJvb3Q6CisJLndvcmQgc3RhcnRfYXJtYm9vdAorI2Vsc2UKKwliCW5hbmRfYm9vdAorLyoJLndvcmQgbmFuZF9ib290Ki8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VOQUJMRV9NTVUKK19tbXVfdGFibGVfYmFzZToKKwkud29yZCBtbXVfdGFibGUKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAorLyoKKyAqIHdlIGFzc3VtZSB0aGF0IGNhY2hlIG9wZXJhdGlvbiBpcyBkb25lIGJlZm9yZS4gKGVnLiBjbGVhbnVwX2JlZm9yZV9saW51eCgpKQorICogYWN0dWFsbHksIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYWJvdXQgY2FjaGUgaWYgbm90IHVzZSBkLWNhY2hlIGluCisgKiBVLUJvb3QuIFNvLCBpbiB0aGlzIGZ1bmN0aW9uIHdlIGNsZWFuIG9ubHkgTU1VLiBieSBzY3N1aAorICoKKyAqIHZvaWQJdGhlTGFzdEp1bXAodm9pZCAqa2VybmVsLCBpbnQgYXJjaF9udW0sIHVpbnQgYm9vdF9wYXJhbXMpOworICovCisjaWZkZWYgQ09ORklHX0VOQUJMRV9NTVUKKwkuZ2xvYmwgdGhlTGFzdEp1bXAKK3RoZUxhc3RKdW1wOgorCW1vdglyOSwgcjAKKwlsZHIJcjMsID0weGZmZjAwMDAwCisJbGRyCXI0LCBfVEVYVF9QSFlfQkFTRQorCWFkcglyNSwgcGh5X2xhc3RfanVtcAorCWJpYwlyNSwgcjUsIHIzCisJb3JyCXI1LCByNSwgcjQKKwltb3YJcGMsIHI1CitwaHlfbGFzdF9qdW1wOgorCS8qCisJICogZGlzYWJsZSBNTVUgc3R1ZmYKKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJLyogY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpICovCisJYmljCXIwLCByMCwgIzB4MDAwMDAwODcJLyogY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkgKi8KKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMgkvKiBzZXQgYml0IDIgKEEpIEFsaWduICovCisJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJLyogc2V0IGJpdCAxMiAoSSkgSS1DYWNoZSAqLworCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKworCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCisKKwltb3YJcjAsICMwCisJbW92CXBjLCByOQorI2VuZGlmCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitACitAIElSUSBzdGFjayBmcmFtZS4KK0AKKyNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCisKKyNkZWZpbmUgU19PTERfUjAJNjgKKyNkZWZpbmUgU19QU1IJCTY0CisjZGVmaW5lIFNfUEMJCTYwCisjZGVmaW5lIFNfTFIJCTU2CisjZGVmaW5lIFNfU1AJCTUyCisKKyNkZWZpbmUgU19JUAkJNDgKKyNkZWZpbmUgU19GUAkJNDQKKyNkZWZpbmUgU19SMTAJCTQwCisjZGVmaW5lIFNfUjkJCTM2CisjZGVmaW5lIFNfUjgJCTMyCisjZGVmaW5lIFNfUjcJCTI4CisjZGVmaW5lIFNfUjYJCTI0CisjZGVmaW5lIFNfUjUJCTIwCisjZGVmaW5lIFNfUjQJCTE2CisjZGVmaW5lIFNfUjMJCTEyCisjZGVmaW5lIFNfUjIJCTgKKyNkZWZpbmUgU19SMQkJNAorI2RlZmluZSBTX1IwCQkwCisKKyNkZWZpbmUgTU9ERV9TVkMgMHgxMworI2RlZmluZSBJX0JJVAkgMHg4MAorCisvKgorICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgorICovCisKKwkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCisJLyogY2FydmUgb3V0IGEgZnJhbWUgb24gY3VycmVudCB1c2VyIHN0YWNrICovCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQorCS8qIFNhdmUgdXNlciByZWdpc3RlcnMgKG5vdyBpbiBzdmMgbW9kZSkgcjAtcjEyICovCisJc3RtaWEJc3AsIHtyMCAtIHIxMn0KKworCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKKwlzdWIJcjIsIHIyLCAjKENGR19NQUxMT0NfTEVOKQorCS8qIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjayAqLworCXN1YglyMiwgcjIsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkKKwkvKiBnZXQgdmFsdWVzIGZvciAiYWJvcnRlZCIgcGMgYW5kIGNwc3IgKGludG8gcGFybSByZWdzKSAqLworCWxkbWlhCXIyLCB7cjIgLSByM30KKwkvKiBncmFiIHBvaW50ZXIgdG8gb2xkIHN0YWNrICovCisJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQorCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJLyogc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IgKi8KKwlzdG1pYQlyNSwge3IwIC0gcjN9CisJLyogc2F2ZSBjdXJyZW50IHN0YWNrIGludG8gcjAgKHBhcmFtIHJlZ2lzdGVyKSAqLworCW1vdglyMCwgc3AKKwkuZW5kbQorCisJLm1hY3JvIGdldF9iYWRfc3RhY2sKKwkvKiBzZXR1cCBvdXIgbW9kZSBzdGFjayAoZW50ZXIgaW4gYmFua2VkIG1vZGUpICovCisJbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQKKwkvKiBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wgKi8KKwlzdWIJcjEzLCByMTMsICMoQ0ZHX01BTExPQ19MRU4pCisJLyogbW92ZSB0byByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBmb3IgYWJvcnQgc3RhY2sgKi8KKwlzdWIJcjEzLCByMTMsICMoQ0ZHX0dCTF9EQVRBX1NJWkUgKyA4KQorCisJLyogc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjayAqLworCXN0cglsciwgW3IxM10KKwkvKiBnZXQgdGhlIHNwc3IgKi8KKwltcnMJbHIsIHNwc3IKKwkvKiBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZiBzYXZlZCBzdGFjayAqLworCXN0cglsciwgW3IxMywgIzRdCisKKwkvKiBwcmVwYXJlIFNWQy1Nb2RlICovCisJbW92CXIxMywgI01PREVfU1ZDCisJQCBtc3IJc3Bzcl9jLCByMTMKKwkvKiBzd2l0Y2ggbW9kZXMsIG1ha2Ugc3VyZSBtb3ZlcyB3aWxsIGV4ZWN1dGUgKi8KKwltc3IJc3BzciwgcjEzCisJLyogY2FwdHVyZSByZXR1cm4gcGMgKi8KKwltb3YJbHIsIHBjCisJLyoganVtcCB0byBuZXh0IGluc3RydWN0aW9uICYgc3dpdGNoIG1vZGVzLiAqLworCW1vdnMJcGMsIGxyCisJLmVuZG0KKworCS5tYWNybyBnZXRfYmFkX3N0YWNrX3N3aQorCS8qIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yIHNjcmF0Y2ggcmVnLiAqLworCXN1YglyMTMsIHIxMywgIzQKKwkvKiBzYXZlIFIwJ3MgdmFsdWUuICovCisJc3RyCXIwLCBbcjEzXQorCS8qIGdldCBkYXRhIHJlZ2lvbnMgc3RhcnQgKi8KKwlsZHIJcjAsIF9hcm1ib290X3N0YXJ0CisJLyogbW92ZSBwYXN0IG1hbGxvYyBwb29sICovCisJc3ViCXIwLCByMCwgIyhDRkdfTUFMTE9DX0xFTikKKwkvKiBtb3ZlIHBhc3QgZ2JsIGFuZCBhIGNvdXBsZSBzcG90cyBmb3IgYWJvcnQgc3RhY2sgKi8KKwlzdWIJcjAsIHIwLCAjKENGR19HQkxfREFUQV9TSVpFICsgOCkKKwkvKiBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrICovCisJc3RyCWxyLCBbcjBdCisJLyogZ2V0IHRoZSBzcHNyICovCisJbXJzCXIwLCBzcHNyCisJLyogc2F2ZSBzcHNyIGluIHBvc2l0aW9uIDEgb2Ygc2F2ZWQgc3RhY2sgKi8KKwlzdHIJbHIsIFtyMCwgIzRdCisJLyogcmVzdG9yZSByMCAqLworCWxkcglyMCwgW3IxM10KKwkvKiBwb3Agc3RhY2sgZW50cnkgKi8KKwlhZGQJcjEzLCByMTMsICM0CisJLmVuZG0KKworLyoKKyAqIGV4Y2VwdGlvbiBoYW5kbGVycworICovCisJLmFsaWduCTUKK3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCisKKwkuYWxpZ24JNQorc29mdHdhcmVfaW50ZXJydXB0OgorCWdldF9iYWRfc3RhY2tfc3dpCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fc29mdHdhcmVfaW50ZXJydXB0CisKKwkuYWxpZ24JNQorcHJlZmV0Y2hfYWJvcnQ6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3ByZWZldGNoX2Fib3J0CisKKwkuYWxpZ24JNQorZGF0YV9hYm9ydDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fZGF0YV9hYm9ydAorCisJLmFsaWduCTUKK25vdF91c2VkOgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19ub3RfdXNlZAorCisJLmFsaWduCTUKK2lycToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9faXJxCisKKwkuYWxpZ24JNQorZmlxOgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19maXEKKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kcDgzODQ4LmMgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZHA4Mzg0OC5jCmluZGV4IDJhYTllZjEuLjU5ZjAzOWIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjZlanMvZGF2aW5jaS9kcDgzODQ4LmMKKysrIGIvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2RwODM4NDguYwpAQCAtMzgsOSArMzgsOSBAQAogewogCXVfaW50MTZfdAlpZDEsIGlkMjsKIAotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgRFA4Mzg0OF9QSFlJRDFfUkVHLCAmaWQxKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1BIWUlEMV9SRUcsICZpZDEpKQogCQlyZXR1cm4oMCk7Ci0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1BIWUlEMl9SRUcsICZpZDIpKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIERQODM4NDhfUEhZSUQyX1JFRywgJmlkMikpCiAJCXJldHVybigwKTsKIAogCWlmICgoaWQxID09IERQODM4NDhfUEhZSUQxX09VSSkgJiYgKGlkMiA9PSBEUDgzODQ4X1BIWUlEMl9PVUkpKQpAQCAtNTQsMTMgKzU0LDEzIEBACiAJdV9pbnQxNl90CQl0bXA7CiAJdm9sYXRpbGUgZW1hY19yZWdzKgllbWFjID0gKGVtYWNfcmVncyAqKUVNQUNfQkFTRV9BRERSOwogCi0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1NUQVRfUkVHLCAmdG1wKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1NUQVRfUkVHLCAmdG1wKSkKIAkJcmV0dXJuKDApOwogCiAJaWYgKCEodG1wICYgRFA4Mzg0OF9MSU5LX1NUQVRVUykpCS8qIGxpbmsgdXA/ICovCiAJCXJldHVybigwKTsKIAotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgRFA4Mzg0OF9QSFlfU1RBVF9SRUcsICZ0bXApKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIERQODM4NDhfUEhZX1NUQVRfUkVHLCAmdG1wKSkKIAkJcmV0dXJuKDApOwogCiAJLyogU3BlZWQgZG9lc24ndCBtYXR0ZXIsIHRoZXJlIGlzIG5vIHNldHRpbmcgZm9yIGl0IGluIEVNQUMuLi4gKi8KQEAgLTEwMSw3ICsxMDEsNyBAQAogCX0KIAogCS8qIERpc2FibGUgUEhZIEludGVycnVwdHMgKi8KLQlkbTY0NHhfZXRoX3BoeV93cml0ZShwaHlfYWRkciwgRFA4Mzg0OF9QSFlfSU5UUl9DVFJMX1JFRywgMCk7CisJZGF2aW5jaV9ldGhfcGh5X3dyaXRlKHBoeV9hZGRyLCBEUDgzODQ4X1BIWV9JTlRSX0NUUkxfUkVHLCAwKTsKIAogCXJldHVybihyZXQpOwogfQpAQCAtMTEyLDEzICsxMTIsMTMgQEAKIAl1X2ludDE2X3QJdG1wOwogCiAKLQlpZiAoIWRtNjQ0eF9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgJnRtcCkpCisJaWYgKCFkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgRFA4Mzg0OF9DVExfUkVHLCAmdG1wKSkKIAkJcmV0dXJuKDApOwogCiAJLyogUmVzdGFydCBBdXRvX25lZ290aWF0aW9uICAqLwogCXRtcCAmPSB+RFA4Mzg0OF9BVVRPTkVHOwkvKiByZW1vdmUgYXV0b25lZ290aWF0aW9uIGVuYWJsZSAqLwogCXRtcCB8PSBEUDgzODQ4X0lTT0xBVEU7CQkvKiBFbGVjdHJpY2FsbHkgaXNvbGF0ZSBQSFkgKi8KLQlkbTY0NHhfZXRoX3BoeV93cml0ZShwaHlfYWRkciwgRFA4Mzg0OF9DVExfUkVHLCB0bXApOworCWRhdmluY2lfZXRoX3BoeV93cml0ZShwaHlfYWRkciwgRFA4Mzg0OF9DVExfUkVHLCB0bXApOwogCiAJLyogU2V0IHRoZSBBdXRvX25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKIAkgKiBNSUkgYWR2ZXJ0aXNpbmcgZm9yIE5leHQgcGFnZSwgMTAwQmFzZVR4RkQgYW5kIEhELApAQCAtMTI2LDIzICsxMjYsMjMgQEAKIAkgKi8KIAl0bXAgPSBEUDgzODQ4X05QIHwgRFA4Mzg0OF9UWF9GRFggfCBEUDgzODQ4X1RYX0hEWCB8CiAJCURQODM4NDhfMTBfRkRYIHwgRFA4Mzg0OF8xMF9IRFggfCBEUDgzODQ4X0FOX0lFRUVfODAyXzM7Ci0JZG02NDR4X2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQU5BX1JFRywgdG1wKTsKKwlkYXZpbmNpX2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQU5BX1JFRywgdG1wKTsKIAogCiAJLyogUmVhZCBDb250cm9sIFJlZ2lzdGVyICovCi0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X0NUTF9SRUcsICZ0bXApKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgJnRtcCkpCiAJCXJldHVybigwKTsKIAogCXRtcCB8PSBEUDgzODQ4X1NQRUVEX1NFTEVDVCB8IERQODM4NDhfQVVUT05FRyB8IERQODM4NDhfRFVQTEVYX01PREU7Ci0JZG02NDR4X2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgdG1wKTsKKwlkYXZpbmNpX2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgdG1wKTsKIAogCS8qIFJlc3RhcnQgQXV0b19uZWdvdGlhdGlvbiAgKi8KIAl0bXAgfD0gRFA4Mzg0OF9SRVNUQVJUX0FVVE9ORUc7Ci0JZG02NDR4X2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgdG1wKTsKKwlkYXZpbmNpX2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIERQODM4NDhfQ1RMX1JFRywgdG1wKTsKIAogCS8qY2hlY2sgQXV0b05lZ290aWF0ZSBjb21wbGV0ZSAqLwogCXVkZWxheSgxMDAwMCk7Ci0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1NUQVRfUkVHLCAmdG1wKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBEUDgzODQ4X1NUQVRfUkVHLCAmdG1wKSkKIAkJcmV0dXJuKDApOwogCiAJaWYgKCEodG1wICYgRFA4Mzg0OF9BVVRPTkVHX0NPTVApKQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2V0aGVyLmMgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZXRoZXIuYwppbmRleCA1YWUwMzViLi5mNmY4MWRmIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZXRoZXIuYworKysgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvZXRoZXIuYwpAQCAtNTAsMTIgKzUwLDEyIEBACiAjZGVmaW5lIGRlYnVnX2VtYWMoZm10LGFyZ3MuLi4pCWlmIChlbWFjX2RiZykgcHJpbnRmKGZtdCwjI2FyZ3MpCiAKIC8qIEludGVybmFsIHN0YXRpYyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgZG02NDR4X2V0aF9od19pbml0ICh2b2lkKTsKLXN0YXRpYyBpbnQgZG02NDR4X2V0aF9vcGVuICh2b2lkKTsKLXN0YXRpYyBpbnQgZG02NDR4X2V0aF9jbG9zZSAodm9pZCk7Ci1zdGF0aWMgaW50IGRtNjQ0eF9ldGhfc2VuZF9wYWNrZXQgKHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCk7Ci1zdGF0aWMgaW50IGRtNjQ0eF9ldGhfcmN2X3BhY2tldCAodm9pZCk7Ci1zdGF0aWMgdm9pZCBkbTY0NHhfZXRoX21kaW9fZW5hYmxlKHZvaWQpOworc3RhdGljIGludCBkYXZpbmNpX2V0aF9od19pbml0ICh2b2lkKTsKK3N0YXRpYyBpbnQgZGF2aW5jaV9ldGhfb3BlbiAodm9pZCk7CitzdGF0aWMgaW50IGRhdmluY2lfZXRoX2Nsb3NlICh2b2lkKTsKK3N0YXRpYyBpbnQgZGF2aW5jaV9ldGhfc2VuZF9wYWNrZXQgKHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCk7CitzdGF0aWMgaW50IGRhdmluY2lfZXRoX3Jjdl9wYWNrZXQgKHZvaWQpOworc3RhdGljIHZvaWQgZGF2aW5jaV9ldGhfbWRpb19lbmFibGUodm9pZCk7CiAKIHN0YXRpYyBpbnQgZ2VuX2luaXRfcGh5KGludCBwaHlfYWRkcik7CiBzdGF0aWMgaW50IGdlbl9pc19waHlfY29ubmVjdGVkKGludCBwaHlfYWRkcik7CkBAIC02NSw0OCArNjUsNDggQEAKIC8qIFdyYXBwZXJzIGV4cG9ydGVkIHRvIHRoZSBVLUJvb3QgcHJvcGVyICovCiBpbnQgZXRoX2h3X2luaXQodm9pZCkKIHsKLQlyZXR1cm4oZG02NDR4X2V0aF9od19pbml0KCkpOworCXJldHVybihkYXZpbmNpX2V0aF9od19pbml0KCkpOwogfQogCiBpbnQgZXRoX2luaXQoYmRfdCAqIGJkKQogewotCXJldHVybihkbTY0NHhfZXRoX29wZW4oKSk7CisJcmV0dXJuKGRhdmluY2lfZXRoX29wZW4oKSk7CiB9CiAKIHZvaWQgZXRoX2hhbHQodm9pZCkKIHsKLQlkbTY0NHhfZXRoX2Nsb3NlKCk7CisJZGF2aW5jaV9ldGhfY2xvc2UoKTsKIH0KIAogaW50IGV0aF9zZW5kKHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKIHsKLQlyZXR1cm4oZG02NDR4X2V0aF9zZW5kX3BhY2tldChwYWNrZXQsIGxlbmd0aCkpOworCXJldHVybihkYXZpbmNpX2V0aF9zZW5kX3BhY2tldChwYWNrZXQsIGxlbmd0aCkpOwogfQogCiBpbnQgZXRoX3J4KHZvaWQpCiB7Ci0JcmV0dXJuKGRtNjQ0eF9ldGhfcmN2X3BhY2tldCgpKTsKKwlyZXR1cm4oZGF2aW5jaV9ldGhfcmN2X3BhY2tldCgpKTsKIH0KIAogdm9pZCBldGhfbWRpb19lbmFibGUodm9pZCkKIHsKLQlkbTY0NHhfZXRoX21kaW9fZW5hYmxlKCk7CisJZGF2aW5jaV9ldGhfbWRpb19lbmFibGUoKTsKIH0KIC8qIEVuZCBvZiB3cmFwcGVycyAqLwogCiAKLXN0YXRpYyB1X2ludDhfdCBkbTY0NHhfZXRoX21hY19hZGRyW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKK3N0YXRpYyB1X2ludDhfdCBkYXZpbmNpX2V0aF9tYWNfYWRkcltdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbWFjX29wZW4oKSBpZiB5b3Ugd2FudCB0byBvdmVycmlkZQogICogdGhlIGRlZmF1bHQgbWFjIGFkZHJlc3MuCiAgKi8KLXZvaWQgZG02NDR4X2V0aF9zZXRfbWFjX2FkZHIoY29uc3QgdV9pbnQ4X3QgKmFkZHIpCit2b2lkIGRhdmluY2lfZXRoX3NldF9tYWNfYWRkcihjb25zdCB1X2ludDhfdCAqYWRkcikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKGRtNjQ0eF9ldGhfbWFjX2FkZHIpOyBpKyspIHsKLQkJZG02NDR4X2V0aF9tYWNfYWRkcltpXSA9IGFkZHJbaV07CisJZm9yIChpID0gMDsgaSA8IHNpemVvZiAoZGF2aW5jaV9ldGhfbWFjX2FkZHIpOyBpKyspIHsKKwkJZGF2aW5jaV9ldGhfbWFjX2FkZHJbaV0gPSBhZGRyW2ldOwogCX0KIH0KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHBoeV90CQkJCXBoeTsKIAotc3RhdGljIHZvaWQgZG02NDR4X2V0aF9tZGlvX2VuYWJsZSh2b2lkKQorc3RhdGljIHZvaWQgZGF2aW5jaV9ldGhfbWRpb19lbmFibGUodm9pZCkKIHsKIAl1X2ludDMyX3QJY2xrZGl2OwogCkBAIC0xNDksNyArMTQ5LDcgQEAKICAqIElmIG5vIGFjdGl2ZSBQSFkgKG9yIG1vcmUgdGhhbiBvbmUgUEhZKSBmb3VuZCByZXR1cm5zIDAuCiAgKiBTZXRzIGFjdGl2ZV9waHlfYWRkciB2YXJpYWJsZS4KICAqLwotc3RhdGljIGludCBkbTY0NHhfZXRoX3BoeV9kZXRlY3Qodm9pZCkKK3N0YXRpYyBpbnQgZGF2aW5jaV9ldGhfcGh5X2RldGVjdCh2b2lkKQogewogCXVfaW50MzJfdAlwaHlfYWN0X3N0YXRlOwogCWludAkJaTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCWlmICgocGh5X2FjdF9zdGF0ZSA9IGFkYXBfbWRpby0+QUxJVkUpID09IDApCiAJCXJldHVybigwKTsJCQkJLyogTm8gYWN0aXZlIFBIWXMgKi8KIAotCWRlYnVnX2VtYWMoImRtNjQ0eF9ldGhfcGh5X2RldGVjdCgpLCBBTElWRSA9IDB4JTA4eFxuIiwgcGh5X2FjdF9zdGF0ZSk7CisJZGVidWdfZW1hYygiZGF2aW5jaV9ldGhfcGh5X2RldGVjdCgpLCBBTElWRSA9IDB4JTA4eFxuIiwgcGh5X2FjdF9zdGF0ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAocGh5X2FjdF9zdGF0ZSAmICgxIDw8IGkpKSB7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCiAvKiBSZWFkIGEgUEhZIHJlZ2lzdGVyIHZpYSBNRElPIGludGVmYWNlLiBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvdGhlcndpc2UgKi8KLWludCBkbTY0NHhfZXRoX3BoeV9yZWFkKHVfaW50OF90IHBoeV9hZGRyLCB1X2ludDhfdCByZWdfbnVtLCB1X2ludDE2X3QgKmRhdGEpCitpbnQgZGF2aW5jaV9ldGhfcGh5X3JlYWQodV9pbnQ4X3QgcGh5X2FkZHIsIHVfaW50OF90IHJlZ19udW0sIHVfaW50MTZfdCAqZGF0YSkKIHsKIAlpbnQJdG1wOwogCkBAIC0yMDEsNyArMjAxLDcgQEAKIH0KIAogLyogV3JpdGUgdG8gYSBQSFkgcmVnaXN0ZXIgdmlhIE1ESU8gaW50ZWZhY2UuIEJsb2NrcyB1bnRpbCBvcGVyYXRpb24gaXMgY29tcGxldGUuICovCi1pbnQgZG02NDR4X2V0aF9waHlfd3JpdGUodV9pbnQ4X3QgcGh5X2FkZHIsIHVfaW50OF90IHJlZ19udW0sIHVfaW50MTZfdCBkYXRhKQoraW50IGRhdmluY2lfZXRoX3BoeV93cml0ZSh1X2ludDhfdCBwaHlfYWRkciwgdV9pbnQ4X3QgcmVnX251bSwgdV9pbnQxNl90IGRhdGEpCiB7CiAKIAl3aGlsZSAoYWRhcF9tZGlvLT5VU0VSQUNDRVNTMCAmIE1ESU9fVVNFUkFDQ0VTUzBfR08pIHs7fQpAQCAtMjM1LDE0ICsyMzUsMTQgQEAKIHsKIAl1X2ludDE2X3QJZHVtbXk7CiAKLQlyZXR1cm4oZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX1BIWUlEUjEsICZkdW1teSkpOworCXJldHVybihkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX1BIWUlEUjEsICZkdW1teSkpOwogfQogCiBzdGF0aWMgaW50IGdlbl9nZXRfbGlua19zcGVlZChpbnQgcGh5X2FkZHIpCiB7CiAJdV9pbnQxNl90CXRtcDsKIAotCWlmIChkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBNSUlfU1RBVFVTX1JFRywgJnRtcCkgJiYgKHRtcCAmIDB4MDQpKQorCWlmIChkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgTUlJX1NUQVRVU19SRUcsICZ0bXApICYmICh0bXAgJiAweDA0KSkKIAkJcmV0dXJuKDEpOwogCiAJcmV0dXJuKDApOwpAQCAtMjUyLDE2ICsyNTIsMTYgQEAKIHsKIAl1X2ludDE2X3QJdG1wOwogCi0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfQk1DUiwgJnRtcCkpCisJaWYgKCFkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX0JNQ1IsICZ0bXApKQogCQlyZXR1cm4oMCk7CiAKIAkvKiBSZXN0YXJ0IEF1dG9fbmVnb3RpYXRpb24gICovCiAJdG1wIHw9IFBIWV9CTUNSX0FVVE9OOwotCWRtNjQ0eF9ldGhfcGh5X3dyaXRlKHBoeV9hZGRyLCBQSFlfQk1DUiwgdG1wKTsKKwlkYXZpbmNpX2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIFBIWV9CTUNSLCB0bXApOwogCiAJLypjaGVjayBBdXRvTmVnb3RpYXRlIGNvbXBsZXRlICovCiAJdWRlbGF5ICgxMDAwMCk7Ci0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfQk1TUiwgJnRtcCkpCisJaWYgKCFkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX0JNU1IsICZ0bXApKQogCQlyZXR1cm4oMCk7CiAKIAlpZiAoISh0bXAgJiBQSFlfQk1TUl9BVVROX0NPTVApKQpAQCAtMjczLDE5ICsyNzMsMTkgQEAKIAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlJKSB8fCBkZWZpbmVkKENPTkZJR19DTURfTUlJKQotc3RhdGljIGludCBkbTY0NHhfbWlpX3BoeV9yZWFkKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0ICp2YWx1ZSkKK3N0YXRpYyBpbnQgZGF2aW5jaV9taWlfcGh5X3JlYWQoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgc2hvcnQgKnZhbHVlKQogewotCXJldHVybihkbTY0NHhfZXRoX3BoeV9yZWFkKGFkZHIsIHJlZywgdmFsdWUpID8gMCA6IDEpOworCXJldHVybihkYXZpbmNpX2V0aF9waHlfcmVhZChhZGRyLCByZWcsIHZhbHVlKSA/IDAgOiAxKTsKIH0KIAotc3RhdGljIGludCBkbTY0NHhfbWlpX3BoeV93cml0ZShjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3N0YXRpYyBpbnQgZGF2aW5jaV9taWlfcGh5X3dyaXRlKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQogewotCXJldHVybihkbTY0NHhfZXRoX3BoeV93cml0ZShhZGRyLCByZWcsIHZhbHVlKSA/IDAgOiAxKTsKKwlyZXR1cm4oZGF2aW5jaV9ldGhfcGh5X3dyaXRlKGFkZHIsIHJlZywgdmFsdWUpID8gMCA6IDEpOwogfQogCi1pbnQgZG02NDR4X2V0aF9taWlwaHlfaW5pdGlhbGl6ZShiZF90ICpiaXMpCitpbnQgZGF2aW5jaV9ldGhfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKQogewotCW1paXBoeV9yZWdpc3RlcihwaHkubmFtZSwgZG02NDR4X21paV9waHlfcmVhZCwgZG02NDR4X21paV9waHlfd3JpdGUpOworCW1paXBoeV9yZWdpc3RlcihwaHkubmFtZSwgZGF2aW5jaV9taWlfcGh5X3JlYWQsIGRhdmluY2lfbWlpX3BoeV93cml0ZSk7CiAKIAlyZXR1cm4oMSk7CiB9CkBAIC0yOTYsMTMgKzI5NiwxMyBAQAogICogRU1BQyBtb2R1bGVzIHBvd2VyIG9yIHBpbiBtdWx0aXBsZXhvcnMsIHRoYXQgaXMgZG9uZSBieSBib2FyZF9pbml0KCkKICAqIG11Y2ggZWFybGllciBpbiBib290dXAgcHJvY2Vzcy4gUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IGRtNjQ0eF9ldGhfaHdfaW5pdCh2b2lkKQorc3RhdGljIGludCBkYXZpbmNpX2V0aF9od19pbml0KHZvaWQpCiB7CiAJdV9pbnQzMl90CXBoeV9pZDsKIAl1X2ludDE2X3QJdG1wOwogCWludAkJaTsKIAotCWRtNjQ0eF9ldGhfbWRpb19lbmFibGUoKTsKKwlkYXZpbmNpX2V0aF9tZGlvX2VuYWJsZSgpOwogCiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCWlmIChhZGFwX21kaW8tPkFMSVZFKQpAQCAtMzE2LDE4ICszMTYsMTggQEAKIAl9CiAKIAkvKiBGaW5kIGlmIGEgUEhZIGlzIGNvbm5lY3RlZCBhbmQgZ2V0IGl0J3MgYWRkcmVzcyAqLwotCWlmICghZG02NDR4X2V0aF9waHlfZGV0ZWN0KCkpCisJaWYgKCFkYXZpbmNpX2V0aF9waHlfZGV0ZWN0KCkpCiAJCXJldHVybigwKTsKIAogCS8qIEdldCBQSFkgSUQgYW5kIGluaXRpYWxpemUgcGh5X29wcyBmb3IgYSBkZXRlY3RlZCBQSFkgKi8KLQlpZiAoIWRtNjQ0eF9ldGhfcGh5X3JlYWQoYWN0aXZlX3BoeV9hZGRyLCBQSFlfUEhZSURSMSwgJnRtcCkpIHsKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKGFjdGl2ZV9waHlfYWRkciwgUEhZX1BIWUlEUjEsICZ0bXApKSB7CiAJCWFjdGl2ZV9waHlfYWRkciA9IDB4ZmY7CiAJCXJldHVybigwKTsKIAl9CiAKIAlwaHlfaWQgPSAodG1wIDw8IDE2KSAmIDB4ZmZmZjAwMDA7CiAKLQlpZiAoIWRtNjQ0eF9ldGhfcGh5X3JlYWQoYWN0aXZlX3BoeV9hZGRyLCBQSFlfUEhZSURSMiwgJnRtcCkpIHsKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKGFjdGl2ZV9waHlfYWRkciwgUEhZX1BIWUlEUjIsICZ0bXApKSB7CiAJCWFjdGl2ZV9waHlfYWRkciA9IDB4ZmY7CiAJCXJldHVybigwKTsKIAl9CkBAIC0zNjQsNyArMzY0LDcgQEAKIAogCiAvKiBFdGggZGV2aWNlIG9wZW4gKi8KLXN0YXRpYyBpbnQgZG02NDR4X2V0aF9vcGVuKHZvaWQpCitzdGF0aWMgaW50IGRhdmluY2lfZXRoX29wZW4odm9pZCkKIHsKIAlkdl9yZWdfcAkJYWRkcjsKIAl1X2ludDMyX3QJCWNsa2RpdiwgY250OwpAQCAtMzg5LDI2ICszODksMjYgQEAKIAkvKiBVc2luZyBjaGFubmVsIDAgb25seSAtIG90aGVyIGNoYW5uZWxzIGFyZSBkaXNhYmxlZCAqLwogCWFkYXBfZW1hYy0+TUFDSU5ERVggPSAwOwogCWFkYXBfZW1hYy0+TUFDQUREUkhJID0KLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbM10gPDwgMjQpIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMl0gPDwgMTYpIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMV0gPDwgOCkgIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMF0pOworCQkoZGF2aW5jaV9ldGhfbWFjX2FkZHJbM10gPDwgMjQpIHwKKwkJKGRhdmluY2lfZXRoX21hY19hZGRyWzJdIDw8IDE2KSB8CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkclsxXSA8PCA4KSAgfAorCQkoZGF2aW5jaV9ldGhfbWFjX2FkZHJbMF0pOwogCWFkYXBfZW1hYy0+TUFDQUREUkxPID0KLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbNV0gPDwgOCkgfAotCQkoZG02NDR4X2V0aF9tYWNfYWRkcls0XSk7CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkcls1XSA8PCA4KSB8CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkcls0XSk7CiAKIAlhZGFwX2VtYWMtPk1BQ0hBU0gxID0gMDsKIAlhZGFwX2VtYWMtPk1BQ0hBU0gyID0gMDsKIAogCS8qIFNldCBzb3VyY2UgTUFDIGFkZHJlc3MgLSBSRVFVSVJFRCAqLwogCWFkYXBfZW1hYy0+TUFDU1JDQUREUkhJID0KLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbM10gPDwgMjQpIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMl0gPDwgMTYpIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMV0gPDwgOCkgIHwKLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbMF0pOworCQkoZGF2aW5jaV9ldGhfbWFjX2FkZHJbM10gPDwgMjQpIHwKKwkJKGRhdmluY2lfZXRoX21hY19hZGRyWzJdIDw8IDE2KSB8CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkclsxXSA8PCA4KSAgfAorCQkoZGF2aW5jaV9ldGhfbWFjX2FkZHJbMF0pOwogCWFkYXBfZW1hYy0+TUFDU1JDQUREUkxPID0KLQkJKGRtNjQ0eF9ldGhfbWFjX2FkZHJbNF0gPDwgOCkgfAotCQkoZG02NDR4X2V0aF9tYWNfYWRkcls1XSk7CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkcls0XSA8PCA4KSB8CisJCShkYXZpbmNpX2V0aF9tYWNfYWRkcls1XSk7CiAKIAkvKiBTZXQgRE1BIDggVFggLyA4IFJYIEhlYWQgcG9pbnRlcnMgdG8gMCAqLwogCWFkZHIgPSAmYWRhcF9lbWFjLT5UWDBIRFA7CkBAIC00NzMsNyArNDczLDcgQEAKIH0KIAogLyogRU1BQyBDaGFubmVsIFRlYXJkb3duICovCi1zdGF0aWMgdm9pZCBkbTY0NHhfZXRoX2NoX3RlYXJkb3duKGludCBjaCkKK3N0YXRpYyB2b2lkIGRhdmluY2lfZXRoX2NoX3RlYXJkb3duKGludCBjaCkKIHsKIAlkdl9yZWcJCWRseSA9IDB4ZmY7CiAJZHZfcmVnCQljbnQ7CkBAIC01MTYsMTIgKzUxNiwxMiBAQAogfQogCiAvKiBFdGggZGV2aWNlIGNsb3NlICovCi1zdGF0aWMgaW50IGRtNjQ0eF9ldGhfY2xvc2Uodm9pZCkKK3N0YXRpYyBpbnQgZGF2aW5jaV9ldGhfY2xvc2Uodm9pZCkKIHsKIAlkZWJ1Z19lbWFjKCIrIGVtYWNfY2xvc2VcbiIpOwogCi0JZG02NDR4X2V0aF9jaF90ZWFyZG93bihFTUFDX0NIX1RYKTsJLyogVFggQ2hhbm5lbCB0ZWFyZG93biAqLwotCWRtNjQ0eF9ldGhfY2hfdGVhcmRvd24oRU1BQ19DSF9SWCk7CS8qIFJYIENoYW5uZWwgdGVhcmRvd24gKi8KKwlkYXZpbmNpX2V0aF9jaF90ZWFyZG93bihFTUFDX0NIX1RYKTsJLyogVFggQ2hhbm5lbCB0ZWFyZG93biAqLworCWRhdmluY2lfZXRoX2NoX3RlYXJkb3duKEVNQUNfQ0hfUlgpOwkvKiBSWCBDaGFubmVsIHRlYXJkb3duICovCiAKIAkvKiBSZXNldCBFTUFDIG1vZHVsZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIGluIHdyYXBwZXIgKi8KIAlhZGFwX2VtYWMtPlNPRlRSRVNFVCA9IDE7CkBAIC01MzcsNyArNTM3LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW5nbGUgcGFja2V0IG9uIHRoZSBuZXR3b3JrIGFuZCByZXR1cm5zCiAgKiBwb3NpdGl2ZSBudW1iZXIgKG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCkgb3IgbmVnYXRpdmUgZm9yIGVycm9yCiAgKi8KLXN0YXRpYyBpbnQgZG02NDR4X2V0aF9zZW5kX3BhY2tldCAodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCBkYXZpbmNpX2V0aF9zZW5kX3BhY2tldCAodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQogewogCWludCByZXRfc3RhdHVzID0gLTE7CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogCS8qIFdhaXQgZm9yIHBhY2tldCB0byBjb21wbGV0ZSBvciBsaW5rIGRvd24gKi8KIAl3aGlsZSAoMSkgewogCQlpZiAoIXBoeS5nZXRfbGlua19zcGVlZCAoYWN0aXZlX3BoeV9hZGRyKSkgewotCQkJZG02NDR4X2V0aF9jaF90ZWFyZG93biAoRU1BQ19DSF9UWCk7CisJCQlkYXZpbmNpX2V0aF9jaF90ZWFyZG93biAoRU1BQ19DSF9UWCk7CiAJCQlyZXR1cm4gKHJldF9zdGF0dXMpOwogCQl9CiAJCWlmIChhZGFwX2VtYWMtPlRYSU5UU1RBVFJBVyAmIDB4MDEpIHsKQEAgLTU4NCw3ICs1ODQsNyBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWNlaXB0IG9mIGEgcGFja2V0IGZyb20gdGhlIG5ldHdvcmsKICAqLwotc3RhdGljIGludCBkbTY0NHhfZXRoX3Jjdl9wYWNrZXQgKHZvaWQpCitzdGF0aWMgaW50IGRhdmluY2lfZXRoX3Jjdl9wYWNrZXQgKHZvaWQpCiB7CiAJdm9sYXRpbGUgZW1hY19kZXNjICpyeF9jdXJyX2Rlc2M7CiAJdm9sYXRpbGUgZW1hY19kZXNjICpjdXJyX2Rlc2M7CmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvbHh0OTcyLmMgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvbHh0OTcyLmMKaW5kZXggODEzMGI0OC4uY2UzZTQxYyAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2x4dDk3Mi5jCisrKyBiL2NwdS9hcm05MjZlanMvZGF2aW5jaS9seHQ5NzIuYwpAQCAtMzksOSArMzksOSBAQAogewogCXVfaW50MTZfdCBpZDEsIGlkMjsKIAotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX1BIWUlEUjEsICZpZDEpKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIFBIWV9QSFlJRFIxLCAmaWQxKSkKIAkJcmV0dXJuKDApOwotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX1BIWUlEUjIsICZpZDIpKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIFBIWV9QSFlJRFIyLCAmaWQyKSkKIAkJcmV0dXJuKDApOwogCiAJaWYgKChpZDEgPT0gKDB4MDAxMykpICYmICgoaWQyICAmIDB4ZmZmMCkgPT0gMHg3OGUwKSkKQEAgLTU1LDIwICs1NSwyMCBAQAogCXVfaW50MTZfdCBzdGF0MSwgdG1wOwogCXZvbGF0aWxlIGVtYWNfcmVncyAqZW1hYyA9IChlbWFjX3JlZ3MgKilFTUFDX0JBU0VfQUREUjsKIAotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX0xYVDk3MV9TVEFUMiwgJnN0YXQxKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfTFhUOTcxX1NUQVQyLCAmc3RhdDEpKQogCQlyZXR1cm4oMCk7CiAKIAlpZiAoIShzdGF0MSAmIFBIWV9MWFQ5NzFfU1RBVDJfTElOSykpCS8qIGxpbmsgdXA/ICovCiAJCXJldHVybigwKTsKIAotCWlmICghZG02NDR4X2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX0xYVDk3MV9ESUdfQ0ZHLCAmdG1wKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfTFhUOTcxX0RJR19DRkcsICZ0bXApKQogCQlyZXR1cm4oMCk7CiAKIAl0bXAgfD0gUEhZX0xYVDk3MV9ESUdfQ0ZHX01JSV9EUklWRTsKIAotCWRtNjQ0eF9ldGhfcGh5X3dyaXRlKHBoeV9hZGRyLCBQSFlfTFhUOTcxX0RJR19DRkcsIHRtcCk7CisJZGF2aW5jaV9ldGhfcGh5X3dyaXRlKHBoeV9hZGRyLCBQSFlfTFhUOTcxX0RJR19DRkcsIHRtcCk7CiAJLyogUmVhZCBiYWNrICovCi0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfTFhUOTcxX0RJR19DRkcsICZ0bXApKQorCWlmICghZGF2aW5jaV9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIFBIWV9MWFQ5NzFfRElHX0NGRywgJnRtcCkpCiAJCXJldHVybigwKTsKIAogCS8qIFNwZWVkIGRvZXNuJ3QgbWF0dGVyLCB0aGVyZSBpcyBubyBzZXR0aW5nIGZvciBpdCBpbiBFTUFDLi4uICovCkBAIC05NSw3ICs5NSw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBQSFkgSW50ZXJydXB0cyAqLwotCWRtNjQ0eF9ldGhfcGh5X3dyaXRlKHBoeV9hZGRyLCBQSFlfTFhUOTcxX0lOVF9FTkFCTEUsIDApOworCWRhdmluY2lfZXRoX3BoeV93cml0ZShwaHlfYWRkciwgUEhZX0xYVDk3MV9JTlRfRU5BQkxFLCAwKTsKIAogCXJldHVybihyZXQpOwogfQpAQCAtMTA1LDE2ICsxMDUsMTYgQEAKIHsKIAl1X2ludDE2X3QgdG1wOwogCi0JaWYgKCFkbTY0NHhfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfQk1DUiwgJnRtcCkpCisJaWYgKCFkYXZpbmNpX2V0aF9waHlfcmVhZChwaHlfYWRkciwgUEhZX0JNQ1IsICZ0bXApKQogCQlyZXR1cm4oMCk7CiAKIAkvKiBSZXN0YXJ0IEF1dG9fbmVnb3RpYXRpb24gICovCiAJdG1wIHw9IFBIWV9CTUNSX1JTVF9ORUc7Ci0JZG02NDR4X2V0aF9waHlfd3JpdGUocGh5X2FkZHIsIFBIWV9CTUNSLCB0bXApOworCWRhdmluY2lfZXRoX3BoeV93cml0ZShwaHlfYWRkciwgUEhZX0JNQ1IsIHRtcCk7CiAKIAkvKmNoZWNrIEF1dG9OZWdvdGlhdGUgY29tcGxldGUgKi8KIAl1ZGVsYXkgKDEwMDAwKTsKLQlpZiAoIWRtNjQ0eF9ldGhfcGh5X3JlYWQocGh5X2FkZHIsIFBIWV9CTVNSLCAmdG1wKSkKKwlpZiAoIWRhdmluY2lfZXRoX3BoeV9yZWFkKHBoeV9hZGRyLCBQSFlfQk1TUiwgJnRtcCkpCiAJCXJldHVybigwKTsKIAogCWlmICghKHRtcCAmIFBIWV9CTVNSX0FVVE5fQ09NUCkpCmRpZmYgLS1naXQgYS9jcHUvbWNmNTIyN3gvc3BlZWQuYyBiL2NwdS9tY2Y1MjI3eC9zcGVlZC5jCmluZGV4IDc4Yzk0NmYuLjBiYWY5YmMgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MjI3eC9zcGVlZC5jCisrKyBiL2NwdS9tY2Y1MjI3eC9zcGVlZC5jCkBAIC0xMTYsNSArMTE2LDkgQEAKIAkJZ2QtPmJ1c19jbGsgPSBnZC0+ZmxiX2NsazsKIAl9CiAKKyNpZmRlZiBDT05GSUdfRlNMX0kyQworCWdkLT5pMmMxX2NsayA9IGdkLT5idXNfY2xrOworI2VuZGlmCisKIAlyZXR1cm4gKDApOwogfQpkaWZmIC0tZ2l0IGEvY3B1L21jZjUyM3gvY3B1X2luaXQuYyBiL2NwdS9tY2Y1MjN4L2NwdV9pbml0LmMKaW5kZXggNTVjOWNkMy4uOGFiNWI4ZSAxMDA2NDQKLS0tIGEvY3B1L21jZjUyM3gvY3B1X2luaXQuYworKysgYi9jcHUvbWNmNTIzeC9jcHVfaW5pdC5jCkBAIC0xMTAsOCArMTEwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZTTF9JMkMKLQlncGlvLT5wYXJfZmVjaTJjICY9IH4oR1BJT19QQVJfRkVDSTJDX1NDTF9NQVNLIHwgR1BJT19QQVJfRkVDSTJDX1NEQV9NQVNLKTsKLQlncGlvLT5wYXJfZmVjaTJjIHw9IChHUElPX1BBUl9GRUNJMkNfU0NMX0kyQ1NDTCB8IEdQSU9fUEFSX0ZFQ0kyQ19TREFfSTJDU0RBKTsKKwlDRkdfSTJDX1BJTk1VWF9SRUcgJj0gQ0ZHX0kyQ19QSU5NVVhfQ0xSOworCUNGR19JMkNfUElOTVVYX1JFRyB8PSBDRkdfSTJDX1BJTk1VWF9TRVQ7CiAjZW5kaWYKIAogCWljYWNoZV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1MjN4L3NwZWVkLmMgYi9jcHUvbWNmNTIzeC9zcGVlZC5jCmluZGV4IDI0N2QzMTguLjFiZGEyZDQgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MjN4L3NwZWVkLmMKKysrIGIvY3B1L21jZjUyM3gvc3BlZWQuYwpAQCAtNDUsNSArNDUsOSBAQAogCWdkLT5idXNfY2xrID0gQ0ZHX0NMSzsKIAlnZC0+Y3B1X2NsayA9IChnZC0+YnVzX2NsayAqIDIpOwogCisjaWZkZWYgQ09ORklHX0ZTTF9JMkMKKwlnZC0+aTJjMV9jbGsgPSBnZC0+YnVzX2NsazsKKyNlbmRpZgorCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2NwdS9tY2Y1MngyL2NwdV9pbml0LmMgYi9jcHUvbWNmNTJ4Mi9jcHVfaW5pdC5jCmluZGV4IDNjYWNiNTUuLjY4YWVmZTkgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MngyL2NwdV9pbml0LmMKKysrIGIvY3B1L21jZjUyeDIvY3B1X2luaXQuYwpAQCAtODAsNiArODAsMTUgQEAKIAltYmFyX3dyaXRlU2hvcnQoTUNGU0lNX0NTQ1IwLCBDRkdfQ1NDUjApOwogCW1iYXJfd3JpdGVMb25nKE1DRlNJTV9DU01SMCwgQ0ZHX0NTTVIwKTsKIAorI2lmZGVmIENPTkZJR19GU0xfSTJDCisJQ0ZHX0kyQ19QSU5NVVhfUkVHID0gQ0ZHX0kyQ19QSU5NVVhfUkVHICYgQ0ZHX0kyQ19QSU5NVVhfQ0xSOworCUNGR19JMkNfUElOTVVYX1JFRyB8PSBDRkdfSTJDX1BJTk1VWF9TRVQ7CisjaWZkZWYgQ0ZHX0kyQzJfT0ZGU0VUCisJQ0ZHX0kyQzJfUElOTVVYX1JFRyAmPSBDRkdfSTJDMl9QSU5NVVhfQ0xSOworCUNGR19JMkMyX1BJTk1VWF9SRUcgfD0gQ0ZHX0kyQzJfUElOTVVYX1NFVDsKKyNlbmRpZgorI2VuZGlmCisKIAkvKiBlbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgbm93ICovCiAJaWNhY2hlX2VuYWJsZSgpOwogfQpAQCAtMzIyLDcgKzMzMSw4IEBACiAjZW5kaWYJCQkJLyogI2lmbmRlZiBDT05GSUdfTU9OSVRPUl9JU19JTl9SQU0gKi8KIAogI2lmZGVmIENPTkZJR19GU0xfSTJDCi0JZ3Bpb19yZWctPnBhcl9mZWNpMmMgPSAweDAwMEY7CisJQ0ZHX0kyQ19QSU5NVVhfUkVHICY9IENGR19JMkNfUElOTVVYX0NMUjsKKwlDRkdfSTJDX1BJTk1VWF9SRUcgfD0gQ0ZHX0kyQ19QSU5NVVhfU0VUOwogI2VuZGlmCiAKIAkvKiBlbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgbm93ICovCmRpZmYgLS1naXQgYS9jcHUvbWNmNTJ4Mi9zcGVlZC5jIGIvY3B1L21jZjUyeDIvc3BlZWQuYwppbmRleCBmNmVkZDViLi40Y2I4ZjkzIDEwMDY0NAotLS0gYS9jcHUvbWNmNTJ4Mi9zcGVlZC5jCisrKyBiL2NwdS9tY2Y1MngyL3NwZWVkLmMKQEAgLTgyLDUgKzgyLDEzIEBACiAjZWxzZQogCWdkLT5idXNfY2xrID0gZ2QtPmNwdV9jbGs7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19GU0xfSTJDCisJZ2QtPmkyYzFfY2xrID0gZ2QtPmJ1c19jbGs7CisjaWZkZWYgQ0ZHX0kyQzJfT0ZGU0VUCisJZ2QtPmkyYzJfY2xrID0gZ2QtPmJ1c19jbGs7CisjZW5kaWYKKyNlbmRpZgorCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2NwdS9tY2Y1MzJ4L3NwZWVkLmMgYi9jcHUvbWNmNTMyeC9zcGVlZC5jCmluZGV4IDAwMWI5ZjQuLmExMWU0MjUgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MzJ4L3NwZWVkLmMKKysrIGIvY3B1L21jZjUzMngvc3BlZWQuYwpAQCAtMjEyLDUgKzIxMiwxMCBAQAogewogCWdkLT5idXNfY2xrID0gY2xvY2tfcGxsKENGR19DTEsgLyAxMDAwLCAwKSAqIDEwMDA7CiAJZ2QtPmNwdV9jbGsgPSAoZ2QtPmJ1c19jbGsgKiAzKTsKKworI2lmZGVmIENPTkZJR19GU0xfSTJDCisJZ2QtPmkyYzFfY2xrID0gZ2QtPmJ1c19jbGs7CisjZW5kaWYKKwogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ0NXgvc3BlZWQuYyBiL2NwdS9tY2Y1NDQ1eC9zcGVlZC5jCmluZGV4IGY2NzdmM2MuLjY3MTFhMWQgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1NDQ1eC9zcGVlZC5jCisrKyBiL2NwdS9tY2Y1NDQ1eC9zcGVlZC5jCkBAIC0yMDksNSArMjA5LDkgQEAKICNlbmRpZgogCX0KIAorI2lmZGVmIENPTkZJR19GU0xfSTJDCisJZ2QtPmkyYzFfY2xrID0gZ2QtPmJ1c19jbGs7CisjZW5kaWYKKwogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9jcHUvbWNmNTQ3eF84eC9zcGVlZC5jIGIvY3B1L21jZjU0N3hfOHgvc3BlZWQuYwppbmRleCAzODllN2M5Li4yOGZlNjU3IDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ3eF84eC9zcGVlZC5jCisrKyBiL2NwdS9tY2Y1NDd4Xzh4L3NwZWVkLmMKQEAgLTM5LDUgKzM5LDEwIEBACiAKIAlnZC0+YnVzX2NsayA9IENGR19DTEs7CiAJZ2QtPmNwdV9jbGsgPSAoZ2QtPmJ1c19jbGsgKiAyKTsKKworI2lmZGVmIENPTkZJR19GU0xfSTJDCisJZ2QtPmkyYzFfY2xrID0gZ2QtPmJ1c19jbGs7CisjZW5kaWYKKwogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9jcHUvbXBjNTEyeC9NYWtlZmlsZSBiL2NwdS9tcGM1MTJ4L01ha2VmaWxlCmluZGV4IDhiYThhZTguLmU4ZjEwNjAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1MTJ4L01ha2VmaWxlCisrKyBiL2NwdS9tcGM1MTJ4L01ha2VmaWxlCkBAIC0yNSw3ICsyNSw3IEBACiBMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLUNPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIGZlYy5vIGkyYy5vIGlvcGluLm8KK0NPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIGkyYy5vIGlvcGluLm8KIAogU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9NYWtlZmlsZSBiL2NwdS9tcGM1eHh4L01ha2VmaWxlCmluZGV4IDMxMmIwYmYuLjA2ZmRiY2YgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L01ha2VmaWxlCisrKyBiL2NwdS9tcGM1eHh4L01ha2VmaWxlCkBAIC0yNyw3ICsyNyw3IEBACiAKIFNUQVJUCT0gc3RhcnQubwogU09CSlMJPSBpby5vIGZpcm13YXJlX3NjX3Rhc2tfYmVzdGNvbW0uaW1wbC5vIGZpcm13YXJlX3NjX3Rhc2suaW1wbC5vCi1DT0JKUwk9IGkyYy5vIHRyYXBzLm8gY3B1Lm8gY3B1X2luaXQubyBmZWMubyBpZGUubyBpbnRlcnJ1cHRzLm8gXAorQ09CSlMJPSBpMmMubyB0cmFwcy5vIGNwdS5vIGNwdV9pbml0Lm8gaWRlLm8gaW50ZXJydXB0cy5vIFwKIAkgIGxvYWR0YXNrLm8gcGNpX21wYzUyMDAubyBzZXJpYWwubyBzcGVlZC5vIHVzYl9vaGNpLm8gdXNiLm8KIAogU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYyBiL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKaW5kZXggMDAxZjJjMS4uMTUyNTBkNCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYworKysgYi9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jCkBAIC0xMTgsNiArMTE4LDcgQEAKIAogI2RlZmluZSBPRFNfRlVMTAkweDAwMDAwMDAwCiAjZGVmaW5lIE9EU19SRURVQ0VECTB4MDAwMDAwMDIKKyNkZWZpbmUgT0NEX0NBTElCX0RFRgkweDAwMDAwMzgwCiAKIC8qIGRlZmluZXMgZm9yIE9EVCAoT24gRGllIFRlcm1pbmF0aW9uKSBvZiB0aGUgNDQwU1AoZSkgRERSMiBjb250cm9sbGVyICovCiAjZGVmaW5lIE9EVF9FQjBSCSgweDgwMDAwMDAwID4+IDgpCkBAIC01NzAsMTUgKzU3MSwyNCBAQAogCW10c2RyYW0oU0RSQU1fTUNPUFQyLAogCQkodmFsICYgfihTRFJBTV9NQ09QVDJfU1JFTl9NQVNLIHwgU0RSQU1fTUNPUFQyX0RDRU5fTUFTSyB8CiAJCQkgU0RSQU1fTUNPUFQyX0lQVFJfTUFTSyB8IFNEUkFNX01DT1BUMl9JU0lFX01BU0spKSB8Ci0JCShTRFJBTV9NQ09QVDJfRENFTl9FTkFCTEUgfCBTRFJBTV9NQ09QVDJfSVBUUl9FWEVDVVRFKSk7CisJCQkgU0RSQU1fTUNPUFQyX0lQVFJfRVhFQ1VURSk7CiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIFdhaXQgZm9yIFNEUkFNX0NGRzBfRENfRU4gdG8gY29tcGxldGUuCisJICogV2FpdCBmb3IgSVBUUl9FWEVDVVRFIGluaXQgc2VxdWVuY2UgdG8gY29tcGxldGUuCiAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJZG8gewogCQltZnNkcmFtKFNEUkFNX01DU1RBVCwgdmFsKTsKIAl9IHdoaWxlICgodmFsICYgU0RSQU1fTUNTVEFUX01JQ19NQVNLKSA9PSBTRFJBTV9NQ1NUQVRfTUlDX05PVENPTVApOwogCisJLyogZW5hYmxlIHRoZSBjb250cm9sbGVyIG9ubHkgYWZ0ZXIgaW5pdCBzZXF1ZW5jZSBjb21wbGV0ZXMgKi8KKwltZnNkcmFtKFNEUkFNX01DT1BUMiwgdmFsKTsKKwltdHNkcmFtKFNEUkFNX01DT1BUMiwgKHZhbCB8IFNEUkFNX01DT1BUMl9EQ0VOX0VOQUJMRSkpOworCisJLyogTWFrZSBzdXJlIGRlbGF5LWxpbmUgY2FsaWJyYXRpb24gaXMgZG9uZSBiZWZvcmUgcHJvY2VlZGluZyAqLworCWRvIHsKKwkJbWZzZHJhbShTRFJBTV9ETENSLCB2YWwpOworCX0gd2hpbGUgKCEodmFsICYgU0RSQU1fRExDUl9ETENTX0NPTVBMRVRFKSk7CisKIAkvKiBnZXQgaW5zdGFsbGVkIG1lbW9yeSBzaXplICovCiAJZHJhbV9zaXplID0gc2RyYW1fbWVtc2l6ZSgpOwogCkBAIC0xMzQzLDIyICsxMzUzLDUwIEBACiAJCWVtciA9IENNRF9FTVIgfCBTRUxFQ1RfRU1SIHwgb2R0IHwgb2RzOwogCQllbXIyID0gQ01EX0VNUiB8IFNFTEVDVF9FTVIyOwogCQllbXIzID0gQ01EX0VNUiB8IFNFTEVDVF9FTVIzOwotCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIwLCAgMHhCNTAwMDAwMCB8IENNRF9OT1ApOwkJLyogTk9QICovCisJCS8qIE5PUCAtIFdhaXQgMTA2IE1lbUNsayBjeWNsZXMgKi8KKwkJbXRzZHJhbShTRFJBTV9JTklUUExSMCwgU0RSQU1fSU5JVFBMUl9FTkFCTEUgfCBDTURfTk9QIHwKKwkJCQkJU0RSQU1fSU5JVFBMUl9JTVdUX0VOQ09ERSgxMDYpKTsKIAkJdWRlbGF5KDEwMDApOwotCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIxLCAgMHg4MjAwMDQwMCB8IENNRF9QUkVDSEFSR0UpOwkvKiBwcmVjaGFyZ2UgOCBERFIgY2xvY2sgY3ljbGUgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSMiwgIDB4ODA4MDAwMDAgfCBlbXIyKTsJCS8qIEVNUjIgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSMywgIDB4ODA4MDAwMDAgfCBlbXIzKTsJCS8qIEVNUjMgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSNCwgIDB4ODA4MDAwMDAgfCBlbXIpOwkJLyogRU1SIERMTCBFTkFCTEUgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSNSwgIDB4ODA4MDAwMDAgfCBtciB8IERMTF9SRVNFVCk7CS8qIE1SIHcvIERMTCByZXNldCAqLworCQkvKiBwcmVjaGFyZ2UgNCBNZW1DbGsgY3ljbGVzICovCisJCW10c2RyYW0oU0RSQU1fSU5JVFBMUjEsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgQ01EX1BSRUNIQVJHRSB8CisJCQkJCVNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoNCkpOworCQkvKiBFTVIyIC0gV2FpdCB0TVJEICgyIE1lbUNsayBjeWNsZXMpICovCisJCW10c2RyYW0oU0RSQU1fSU5JVFBMUjIsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgZW1yMiB8CisJCQkJCVNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMikpOworCQkvKiBFTVIzIC0gV2FpdCB0TVJEICgyIE1lbUNsayBjeWNsZXMpICovCisJCW10c2RyYW0oU0RSQU1fSU5JVFBMUjMsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgZW1yMyB8CisJCQkJCVNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMikpOworCQkvKiBFTVIgRExMIEVOQUJMRSAtIFdhaXQgdE1SRCAoMiBNZW1DbGsgY3ljbGVzKSAqLworCQltdHNkcmFtKFNEUkFNX0lOSVRQTFI0LCBTRFJBTV9JTklUUExSX0VOQUJMRSB8IGVtciB8CisJCQkJCVNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMikpOworCQkvKiBNUiB3LyBETEwgcmVzZXQgLSAyMDAgY3ljbGUgd2FpdCBmb3IgRExMIHJlc2V0ICovCisJCW10c2RyYW0oU0RSQU1fSU5JVFBMUjUsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgbXIgfCBETExfUkVTRVQgfAorCQkJCQlTRFJBTV9JTklUUExSX0lNV1RfRU5DT0RFKDIwMCkpOwogCQl1ZGVsYXkoMTAwMCk7Ci0JCW10c2RyYW0oU0RSQU1fSU5JVFBMUjYsICAweDgyMDAwNDAwIHwgQ01EX1BSRUNIQVJHRSk7CS8qIHByZWNoYXJnZSA4IEREUiBjbG9jayBjeWNsZSAqLwotCQltdHNkcmFtKFNEUkFNX0lOSVRQTFI3LCAgMHg4YTAwMDAwMCB8IENNRF9SRUZSRVNIKTsJLyogUmVmcmVzaCAgNTAgRERSIGNsb2NrIGN5Y2xlICovCi0JCW10c2RyYW0oU0RSQU1fSU5JVFBMUjgsICAweDhhMDAwMDAwIHwgQ01EX1JFRlJFU0gpOwkvKiBSZWZyZXNoICA1MCBERFIgY2xvY2sgY3ljbGUgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSOSwgIDB4OGEwMDAwMDAgfCBDTURfUkVGUkVTSCk7CS8qIFJlZnJlc2ggIDUwIEREUiBjbG9jayBjeWNsZSAqLwotCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIxMCwgMHg4YTAwMDAwMCB8IENNRF9SRUZSRVNIKTsJLyogUmVmcmVzaCAgNTAgRERSIGNsb2NrIGN5Y2xlICovCi0JCW10c2RyYW0oU0RSQU1fSU5JVFBMUjExLCAweDgwMDAwMDAwIHwgbXIpOwkJLyogTVIgdy9vIERMTCByZXNldCAqLwotCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIxMiwgMHg4MDgwMDM4MCB8IGVtcik7CQkvKiBFTVIgT0NEIERlZmF1bHQgKi8KLQkJbXRzZHJhbShTRFJBTV9JTklUUExSMTMsIDB4ODA4MDAwMDAgfCBlbXIpOwkJLyogRU1SIE9DRCBFeGl0ICovCisJCS8qIHByZWNoYXJnZSA0IE1lbUNsayBjeWNsZXMgKi8KKwkJbXRzZHJhbShTRFJBTV9JTklUUExSNiwgU0RSQU1fSU5JVFBMUl9FTkFCTEUgfCBDTURfUFJFQ0hBUkdFIHwKKwkJCQkJU0RSQU1fSU5JVFBMUl9JTVdUX0VOQ09ERSg0KSk7CisJCS8qIFJlZnJlc2ggMjUgTWVtQ2xrIGN5Y2xlcyAqLworCQltdHNkcmFtKFNEUkFNX0lOSVRQTFI3LCBTRFJBTV9JTklUUExSX0VOQUJMRSB8IENNRF9SRUZSRVNIIHwKKwkJCQkJU0RSQU1fSU5JVFBMUl9JTVdUX0VOQ09ERSgyNSkpOworCQkvKiBSZWZyZXNoIDI1IE1lbUNsayBjeWNsZXMgKi8KKwkJbXRzZHJhbShTRFJBTV9JTklUUExSOCwgU0RSQU1fSU5JVFBMUl9FTkFCTEUgfCBDTURfUkVGUkVTSCB8CisJCQkJCVNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMjUpKTsKKwkJLyogUmVmcmVzaCAyNSBNZW1DbGsgY3ljbGVzICovCisJCW10c2RyYW0oU0RSQU1fSU5JVFBMUjksIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgQ01EX1JFRlJFU0ggfAorCQkJCQlTRFJBTV9JTklUUExSX0lNV1RfRU5DT0RFKDI1KSk7CisJCS8qIFJlZnJlc2ggMjUgTWVtQ2xrIGN5Y2xlcyAqLworCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIxMCwgU0RSQU1fSU5JVFBMUl9FTkFCTEUgfCBDTURfUkVGUkVTSCB8CisJCQkJCSBTRFJBTV9JTklUUExSX0lNV1RfRU5DT0RFKDI1KSk7CisJCS8qIE1SIHcvbyBETEwgcmVzZXQgLSBXYWl0IHRNUkQgKDIgTWVtQ2xrIGN5Y2xlcykgKi8KKwkJbXRzZHJhbShTRFJBTV9JTklUUExSMTEsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgbXIgfAorCQkJCQkgU0RSQU1fSU5JVFBMUl9JTVdUX0VOQ09ERSgyKSk7CisJCS8qIEVNUiBPQ0QgRGVmYXVsdCAtIFdhaXQgdE1SRCAoMiBNZW1DbGsgY3ljbGVzKSAqLworCQltdHNkcmFtKFNEUkFNX0lOSVRQTFIxMiwgU0RSQU1fSU5JVFBMUl9FTkFCTEUgfCBPQ0RfQ0FMSUJfREVGIHwKKwkJCQkJIFNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMikgfCBlbXIpOworCQkvKiBFTVIgT0NEIEV4aXQgKi8KKwkJbXRzZHJhbShTRFJBTV9JTklUUExSMTMsIFNEUkFNX0lOSVRQTFJfRU5BQkxFIHwgZW1yIHwKKwkJCQkJIFNEUkFNX0lOSVRQTFJfSU1XVF9FTkNPREUoMikpOwogCX0gZWxzZSB7CiAJCXByaW50ZigiRVJST1I6IHVjb2RlIGVycm9yIGFzIHVua25vd24gRERSIHR5cGUgaW4gcHJvZ3JhbV9pbml0cGxyIik7CiAJCXNwZF9kZHJfaW5pdF9oYW5nICgpOwpAQCAtMjQ2NiwxMiArMjUwNCwxMyBAQAogCSAqIFByb2dyYW0gUkZEQyByZWdpc3RlcgogCSAqIFNldCBGZWVkYmFjayBGcmFjdGlvbmFsIE92ZXJzYW1wbGUKIAkgKiBBdXRvLWRldGVjdCByZWFkIHNhbXBsZSBjeWNsZSBlbmFibGUKKwkgKiBTZXQgUkZPUyB0byAxLzQgb2YgbWVtY2xrIGN5Y2xlICgweDNmKQogCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCW1mc2RyYW0oU0RSQU1fUkZEQywgdmFsKTsKIAltdHNkcmFtKFNEUkFNX1JGREMsCiAJCSh2YWwgJiB+KFNEUkFNX1JGRENfQVJTRV9NQVNLIHwgU0RSQU1fUkZEQ19SRk9TX01BU0sgfAogCQkJIFNEUkFNX1JGRENfUkZGRF9NQVNLKSkKLQkJfCAoU0RSQU1fUkZEQ19BUlNFX0VOQUJMRSB8IFNEUkFNX1JGRENfUkZPU19FTkNPREUoMCkgfAorCQl8IChTRFJBTV9SRkRDX0FSU0VfRU5BQkxFIHwgU0RSQU1fUkZEQ19SRk9TX0VOQ09ERSgweDNmKSB8CiAJCSAgIFNEUkFNX1JGRENfUkZGRF9FTkNPREUoMCkpKTsKIAogCURRU19jYWxpYnJhdGlvbl9wcm9jZXNzKCk7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L25kZmMuYyBiL2NwdS9wcGM0eHgvbmRmYy5jCmluZGV4IDcyYWNmZDAuLjdkOTZlNzkgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvbmRmYy5jCisrKyBiL2NwdS9wcGM0eHgvbmRmYy5jCkBAIC0xNDksNiArMTQ5LDEwIEBACiB9CiAjZW5kaWYgLyogI2lmbmRlZiBDT05GSUdfTkFORF9TUEwgKi8KIAorI2lmbmRlZiBDRkdfTkFORF9CQ1IKKyNkZWZpbmUgQ0ZHX05BTkRfQkNSIDB4ODAwMDIyMjIKKyNlbmRpZgorCiB2b2lkIGJvYXJkX25hbmRfc2VsZWN0X2RldmljZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgY2hpcCkKIHsKIAkvKgpAQCAtMTYxLDcgKzE2NSwxNCBAQAogCS8qIFNldCBOYW5kRmxhc2ggQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAJLyogMSBjb2wgeCAyIHJvd3MgKi8KIAlvdXRfYmUzMigodTMyICopKGJhc2UgKyBOREZDX0NDUiksIDB4MDAwMDAwMDAgfCAoY3MgPDwgMjQpKTsKLQlvdXRfYmUzMigodTMyICopKGJhc2UgKyBOREZDX0JDRkcwICsgKGNzIDw8IDIpKSwgMHg4MDAwMjIyMik7CisJb3V0X2JlMzIoKHUzMiAqKShiYXNlICsgTkRGQ19CQ0ZHMCArIChjcyA8PCAyKSksIENGR19OQU5EX0JDUik7Cit9CisKK3N0YXRpYyB2b2lkIG5kZmNfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCS8qCisJICogTm90aGluZyB0byBkbyBoZXJlIQorCSAqLwogfQogCiBpbnQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCkBAIC0xOTIsNiArMjAzLDcgQEAKIAluYW5kLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOwogCW5hbmQtPmVjYy5zaXplID0gMjU2OwogCW5hbmQtPmVjYy5ieXRlcyA9IDM7CisJbmFuZC0+c2VsZWN0X2NoaXAgPSBuZGZjX3NlbGVjdF9jaGlwOwogCiAjaWZuZGVmIENPTkZJR19OQU5EX1NQTAogCW5hbmQtPndyaXRlX2J1ZiAgPSBuZGZjX3dyaXRlX2J1ZjsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvdWljLmMgYi9jcHUvcHBjNHh4L3VpYy5jCmluZGV4IDc5NDRjNmMuLmE5NWQxY2IgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvdWljLmMKKysrIGIvY3B1L3BwYzR4eC91aWMuYwpAQCAtMTI5LDExICsxMjksMTEgQEAKIAkJdWljX2ludGVycnVwdChVSUMzX0RDUl9CQVNFLCA5Nik7CiAjZW5kaWYKIAorCW10ZGNyKHVpYzBzciwgKHVpY19tc3IgJiBVSUNCMF9BTEwpKTsKKwogCWlmICh1aWNfbXNyICYgfihVSUNCMF9BTEwpKQogCQl1aWNfaW50ZXJydXB0KFVJQzBfRENSX0JBU0UsIDApOwogCi0JbXRkY3IodWljMHNyLCB1aWNfbXNyKTsKLQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUgYi9jcHUvc2gyL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggNjklCmNvcHkgZnJvbSBib2FyZC9kYXZpbmNpL2R2LWV2bS9NYWtlZmlsZQpjb3B5IHRvIGNwdS9zaDIvTWFrZWZpbGUKaW5kZXggNTc5ZWZlMi4uNTBmNjcyMCAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2aW5jaS9kdi1ldm0vTWFrZWZpbGUKKysrIGIvY3B1L3NoMi9NYWtlZmlsZQpAQCAtMSw4ICsxLDkgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LDIwMDggTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KQEAgLTI1LDI2ICsyNiwyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAotQ09CSlMJOj0gZHZfYm9hcmQubwotU09CSlMJOj0gYm9hcmRfaW5pdC5vCitTVEFSVAk9IHN0YXJ0Lm8KK09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gd2F0Y2hkb2cubyB0aW1lLm8gIyBjYWNoZS5vCiAKLVNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQotU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQotCi1jbGVhbjoKLQlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCi0KLWRpc3RjbGVhbjoJY2xlYW4KLQlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUaGlzIGlzIGZvciAkKG9iaikuZGVwZW5kIHRhcmdldAorCisuZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CiBpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAogc2luY2x1ZGUgJChvYmopLmRlcGVuZApkaWZmIC0tZ2l0IGEvY3B1L3NoMi9jYWNoZS5jIGIvY3B1L3NoMi9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzQ3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvc2gyL2NhY2hlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTm9ib2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyoKKyAqIEp1bXAgdG8gUDIgYXJlYS4KKyAqIFdoZW4gaGFuZGxpbmcgVExCIG9yIGNhY2hlcywgd2UgbmVlZCB0byBkbyBpdCBmcm9tIFAyIGFyZWEuCisgKi8KKyNkZWZpbmUganVtcF90b19QMigpCQkJXAorZG8gewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKKwkJIm1vdi5sICAxZiwgJTBcblx0IglcCisJCSJvciAgICAgJTEsICUwXG5cdCIJXAorCQkiam1wICAgIEAlMFxuXHQiCVwKKwkJIiBub3Bcblx0IgkJXAorCQkiLmJhbGlnbiA0XG4iCQlcCisJCSIxOiAgICAgLmxvbmcgMmZcbiIJXAorCQkiMjoiCQkJXAorCQk6ICI9JnIiIChfX2R1bW15KQlcCisJCTogInIiICgweDIwMDAwMDAwKSk7CVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBCYWNrIHRvIFAxIGFyZWEuCisgKi8KKyNkZWZpbmUgYmFja190b19QMSgpCQkJXAorZG8gewkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKKwkJIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiCVwKKwkJIm1vdi5sICAxZiwgJTBcblx0IglcCisJCSJqbXAgICAgQCUwXG5cdCIJXAorCQkiIG5vcFxuXHQiCQlcCisJCSIuYmFsaWduIDRcbiIJCVwKKwkJIjE6ICAgICAubG9uZyAyZlxuIglcCisJCSIyOiIJCQlcCisJCTogIj0mciIgKF9fZHVtbXkpKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDQUNIRV9WQUxJRAkxCisjZGVmaW5lIENBQ0hFX1VQREFURUQJMgorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfd2JhY2tfYWxsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhLCBpLCBqOworCisJanVtcF90b19QMigpOworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9PQ19OVU1fRU5UUklFUzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBDQUNIRV9PQ19OVU1fV0FZUzsgaisrKSB7CisJCQlhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWQorCQkJCXwgKGogPDwgQ0FDSEVfT0NfV0FZX1NISUZUKQorCQkJCXwgKGkgPDwgQ0FDSEVfT0NfRU5UUllfU0hJRlQpOworCQkJZGF0YSA9IGlubChhZGRyKTsKKwkJCWlmIChkYXRhICYgQ0FDSEVfVVBEQVRFRCkgeworCQkJCWRhdGEgJj0gfkNBQ0hFX1VQREFURUQ7CisJCQkJb3V0bChkYXRhLCBhZGRyKTsKKwkJCX0KKwkJfQorCX0KKwliYWNrX3RvX1AxKCk7Cit9CisKKworI2RlZmluZSBDQUNIRV9FTkFCTEUJMAorI2RlZmluZSBDQUNIRV9ESVNBQkxFCTEKKworaW50IGNhY2hlX2NvbnRyb2wodW5zaWduZWQgaW50IGNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNjcjsKKworCWp1bXBfdG9fUDIoKTsKKwljY3IgPSBpbmwoQ0NSKTsKKworCWlmIChjY3IgJiBDQ1JfQ0FDSEVfRU5BQkxFKQorCQljYWNoZV93YmFja19hbGwoKTsKKworCWlmIChjbWQgPT0gQ0FDSEVfRElTQUJMRSkKKwkJb3V0bChDQ1JfQ0FDSEVfU1RPUCwgQ0NSKTsKKwllbHNlCisJCW91dGwoQ0NSX0NBQ0hFX0lOSVQsIENDUik7CisJYmFja190b19QMSgpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jcHUvc2gyL2NvbmZpZy5tayBiL2NwdS9zaDIvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDVhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvc2gyL2NvbmZpZy5tawpAQCAtMCwwICsxLDI2IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNy0yMDA4CisjIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tM2UgLW1iCitQTEFURk9STV9SRUxGTEFHUyArPSAtZmZpeGVkLXIxMworUExBVEZPUk1fTERGTEFHUyArPSAtRUIKZGlmZiAtLWdpdCBhL2NwdS9zaDIvY3B1LmMgYi9jcHUvc2gyL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2IwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvc2gyL2NwdS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBTVEJDUjQgICAgICAweEZGRkUwNDBDCisjZGVmaW5lIGNtdF9jbG9ja19lbmFibGUoKSBkbyB7XAorCQl3cml0ZWIocmVhZGIoU1RCQ1I0KSAmIH4weDA0LCBTVEJDUjQpO1wKKwl9IHdoaWxlICgwKQorI2RlZmluZSBzY2lmMF9lbmFibGUoKSBkbyB7XAorCQl3cml0ZWIocmVhZGIoU1RCQ1I0KSAmIH4weDgwLCBTVEJDUjQpO1wKKwl9IHdoaWxlICgwKQorCitpbnQgY2hlY2tjcHUodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TSDJBKQorCXB1dHMoIkNQVTogU0gyQVxuIik7CisjZWxzZQorCXB1dHMoIkNQVTogU0gyXG4iKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitpbnQgY3B1X2luaXQodm9pZCkKK3sKKwkvKiBTQ0lGIGVuYWJsZSAqLworCXNjaWYwX2VuYWJsZSgpOworCS8qIENNVCBjbG9jayBlbmFibGUgKi8KKwljbXRfY2xvY2tfZW5hYmxlKCkgOworCXJldHVybiAwOworfQorCitpbnQgY2xlYW51cF9iZWZvcmVfbGludXgodm9pZCkKK3sKKwlkaXNhYmxlX2ludGVycnVwdHMoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX3Jlc2V0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWRpc2FibGVfaW50ZXJydXB0cygpOworCXJlc2V0X2NwdSgwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmbHVzaF9jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKworfQorCit2b2lkIGljYWNoZV9lbmFibGUodm9pZCkKK3sKK30KKwordm9pZCBpY2FjaGVfZGlzYWJsZSh2b2lkKQoreworfQorCitpbnQgaWNhY2hlX3N0YXR1cyh2b2lkKQoreworCXJldHVybiAwOworfQorCit2b2lkIGRjYWNoZV9lbmFibGUodm9pZCkKK3sKK30KKwordm9pZCBkY2FjaGVfZGlzYWJsZSh2b2lkKQoreworfQorCitpbnQgZGNhY2hlX3N0YXR1cyh2b2lkKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmFwL21lbXNldHVwLlMgYi9jcHUvc2gyL2ludGVycnVwdHMuYwpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBib2FyZC9pbnRlZ3JhdG9yYXAvbWVtc2V0dXAuUwpyZW5hbWUgdG8gY3B1L3NoMi9pbnRlcnJ1cHRzLmMKaW5kZXggZGE0M2NiNi4uZmU2ZmYzYSAxMDA2NDQKLS0tIGEvYm9hcmQvaW50ZWdyYXRvcmFwL21lbXNldHVwLlMKKysrIGIvY3B1L3NoMi9pbnRlcnJ1cHRzLmMKQEAgLTEsNSArMSw2IEBACiAvKgotICogTWVtb3J5IHNldHVwIGZvciBpbnRlZ3JhdG9yQVAKKyAqIENvcHlyaWdodCAyMDA3LDIwMDggTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0xOSwxMSArMjAsMjAgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCi0vKgotICoJTWVtb3J5IHNldHVwCi0gKiAgICAgIC0gdGhlIHJlc2V0IGRlZmF1bHRzIGFyZSBhc3N1bWVkIHN1ZmZpY2llbnQKLSAqLwogCi0uZ2xvYmwgbWVtc2V0dXAKLW1lbXNldHVwOgotCW1vdglwYyxscgorI2luY2x1ZGUgPGNvbW1vbi5oPgorCitpbnQgaW50ZXJydXB0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBlbmFibGVfaW50ZXJydXB0cyh2b2lkKQoreworCit9CisKK2ludCBkaXNhYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NwdS9zaDIvc3RhcnQuUyBiL2NwdS9zaDIvc3RhcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZhNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L3NoMi9zdGFydC5TCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworCS50ZXh0CisJLmFsaWduCTIKKworCS5nbG9iYWwJX3N0YXJ0Citfc3RhcnQ6CisJLmxvbmcgMHgwMDAwMDAxMAkvKiBQcG93ZXIgT04gcmVzZXQgUEMqLworCS5sb25nIDB4MDAwMDAwMDAKKwkubG9uZyAweDAwMDAwMDEwCS8qIE1hbnVhbCByZXNldCBQQyAqLworCS5sb25nIDB4MDAwMDAwMDAKK19pbml0OgorCW1vdi5sCS5fbG93bGV2ZWxfaW5pdCwgcjAKKzEwMDoJYnNyZglyMAorCW5vcAorCWJzcgkxZgorCW5vcAorMToJc3RzCXByLCByNQorCW1vdi5sCS5fcmVsb2NfZHN0LCByNAorCWFkZAkjKF9zdGFydC0xYiksIHI1CisJbW92LmwJLl9yZWxvY19kc3RfZW5kLCByNgorCisyOgltb3YubAlAcjUrLCByMQorCW1vdi5sCXIxLCBAcjQKKwlhZGQJIzQsIHI0CisJY21wL2hzCXI2LCByNAorCWJmCTJiCisKKwltb3YubAkuX2Jzc19zdGFydCwgcjQKKwltb3YubAkuX2Jzc19lbmQsIHI1CisJbW92CSMwLCByMQorCiszOgltb3YubAlyMSwgQHI0CQkJLyogYnNzIGNsZWFyICovCisJYWRkCSM0LCByNAorCWNtcC9ocwlyNSwgcjQKKwliZgkzYgorCisJbW92LmwJLl9nZF9pbml0LCByMTMJCS8qIGdsb2JhbCBkYXRhICovCisJbW92LmwJLl9zdGFja19pbml0LCByMTUJLyogc3RhY2sgKi8KKworCW1vdi5sCS5fc2hfZ2VuZXJpY19pbml0LCByMAorCWpzcglAcjAKKwlub3AKKworbG9vcDoKKwlicmEJbG9vcAorCisJLmFsaWduCTIKKworLl9sb3dsZXZlbF9pbml0OgkubG9uZwkobG93bGV2ZWxfaW5pdCAtICgxMDBiICsgNCkpCisuX3JlbG9jX2RzdDoJCS5sb25nCXJlbG9jX2RzdAorLl9yZWxvY19kc3RfZW5kOgkubG9uZwlyZWxvY19kc3RfZW5kCisuX2Jzc19zdGFydDoJCS5sb25nCWJzc19zdGFydAorLl9ic3NfZW5kOgkJLmxvbmcJYnNzX2VuZAorLl9nZF9pbml0OgkJLmxvbmcJKF9zdGFydCAtIENGR19HQkxfREFUQV9TSVpFKQorLl9zdGFja19pbml0OgkubG9uZwkoX3N0YXJ0IC0gQ0ZHX0dCTF9EQVRBX1NJWkUgLSBDRkdfTUFMTE9DX0xFTiAtIDE2KQorLl9zaF9nZW5lcmljX2luaXQ6CS5sb25nCXNoX2dlbmVyaWNfaW5pdApkaWZmIC0tZ2l0IGEvY3B1L3NoMi90aW1lLmMgYi9jcHUvc2gyL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmViMGNiCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L3NoMi90aW1lLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBOb2JvYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIENNVF9DTUNTUl9JTklUICAweDAwMDEJLyogUENMSy8zMiAqLworI2RlZmluZSBDTVRfQ01DU1JfQ0FMSUIgMHgwMDAwCisjZGVmaW5lIENNVF9NQVhfQ09VTlRFUiAoMHhGRkZGRkZGRikKKyNkZWZpbmUgQ01UX1RJTUVSX1JFU0VUICgweEZGRkYpCisKK3N0YXRpYyB2dV9sb25nIGNtdDBfdGltZXI7CisKK3N0YXRpYyB2b2lkIGNtdF90aW1lcl9zdGFydCh1bnNpZ25lZCBpbnQgdGltZXIpCit7CisJd3JpdGV3KHJlYWR3KENNU1RSKSB8IDB4MDEsIENNU1RSKTsKK30KKworc3RhdGljIHZvaWQgY210X3RpbWVyX3N0b3AodW5zaWduZWQgaW50IHRpbWVyKQoreworCXdyaXRldyhyZWFkdyhDTVNUUikgJiB+MHgwMSwgQ01TVFIpOworfQorCitpbnQgdGltZXJfaW5pdCh2b2lkKQoreworCWNtdDBfdGltZXIgPSAwOworCS8qIERpdmlkZSBjbG9jayBieSAzMiAqLworCXJlYWR3KENNQ1NSXzApOworCXdyaXRldyhDTVRfQ01DU1JfSU5JVCwgQ01DU1JfMCk7CisKKwkvKiBVc2VyIERldmljZSAwIG9ubHkgKi8KKwljbXRfdGltZXJfc3RvcCgwKTsKKwlzZXRfdGltZXIoQ01UX1RJTUVSX1JFU0VUKTsKKwljbXRfdGltZXJfc3RhcnQoMCk7CisKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQoreworCXJldHVybiBjbXQwX3RpbWVyOworfQorCitzdGF0aWMgdnVfbG9uZyBjbWNudDsKK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCXVsb25nIGRhdGEgPSByZWFkdyhDTUNOVF8wKTsKKworCWlmIChkYXRhID49IGNtY250KQorCQljbWNudCA9IGRhdGEgLSBjbWNudDsKKwllbHNlCisJCWNtY250ID0gKENNVF9USU1FUl9SRVNFVCAtIGNtY250KSArIGRhdGE7CisKKwlpZiAoKGNtdDBfdGltZXIgKyBjbWNudCkgPiBDTVRfTUFYX0NPVU5URVIpCisJCWNtdDBfdGltZXIgPSAoKGNtdDBfdGltZXIgKyBjbWNudCkgLSBDTVRfTUFYX0NPVU5URVIpOworCWVsc2UKKwkJY210MF90aW1lciArPSBjbWNudDsKKworCWNtY250ID0gZGF0YTsKKwlyZXR1cm4gY210MF90aW1lciAtIGJhc2U7Cit9CisKK3ZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCit7CisJd3JpdGV3KCh1MTYpIHQsIENNQ09SXzApOworfQorCit2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCit7CisJY210X3RpbWVyX3N0b3AoMCk7CisJc2V0X3RpbWVyKENNVF9USU1FUl9SRVNFVCk7CisJY210MF90aW1lciA9IDA7CisJY210X3RpbWVyX3N0YXJ0KDApOworfQorCit2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJd2hpbGUgKGdldF90aW1lcigodWxvbmcpIHN0YXJ0KSA8ICh1c2VjICogKENGR19IWiAvIDEwMDAwMDApKSkKKwkJY29udGludWU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrKHZvaWQpCit7CisJcmV0dXJuIENGR19IWjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JhcC9tZW1zZXR1cC5TIGIvY3B1L3NoMi93YXRjaGRvZy5jCnNpbWlsYXJpdHkgaW5kZXggNzIlCmNvcHkgZnJvbSBib2FyZC9pbnRlZ3JhdG9yYXAvbWVtc2V0dXAuUwpjb3B5IHRvIGNwdS9zaDIvd2F0Y2hkb2cuYwppbmRleCBkYTQzY2I2Li5kZTAyNTRiIDEwMDY0NAotLS0gYS9ib2FyZC9pbnRlZ3JhdG9yYXAvbWVtc2V0dXAuUworKysgYi9jcHUvc2gyL3dhdGNoZG9nLmMKQEAgLTEsOCArMSw2IEBACiAvKgotICogTWVtb3J5IHNldHVwIGZvciBpbnRlZ3JhdG9yQVAKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3Uubm9idWhvcm9AcmVuZXNhcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTksMTEgKzE3LDE3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwotLyoKLSAqCU1lbW9yeSBzZXR1cAotICogICAgICAtIHRoZSByZXNldCBkZWZhdWx0cyBhcmUgYXNzdW1lZCBzdWZmaWNpZW50Ci0gKi8KIAotLmdsb2JsIG1lbXNldHVwCi1tZW1zZXR1cDoKLQltb3YJcGMsbHIKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK2ludCB3YXRjaGRvZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVzZXRfY3B1KHVuc2lnbmVkIGxvbmcgaWdub3JlZCkKK3sKKwl3aGlsZSAoMSkKKwkJOworfQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5zaDc3ODVsY3IgYi9kb2MvUkVBRE1FLnNoNzc4NWxjcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5zaDc3ODVsY3IKQEAgLTAsMCArMSw4MyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVuZXNhcyBUZWNobm9sb2d5IFIwUDc3ODVMQzAwMTFSTCBib2FyZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGJvYXJkIHNwZWNpZmljYXRpb246Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBSMFA3Nzg1TEMwMDExUkwoYm9hcmQgY29uZmlnIG5hbWU6c2g3Nzg1bGNyKSBoYXMgdGhlIGZvbGxvd2luZyBkZXZpY2U6CisKKyAtIFNINzc4NSAoU0gtNEEpCisgLSBERFIyLVNEUkFNIDUxMk1CCisgLSBOT1IgRmxhc2ggNjRNQgorIC0gMkQgR3JhcGhpYyBjb250cm9sbGVyCisgLSBTQVRBIGNvbnRyb2xsZXIKKyAtIEV0aGVybmV0IGNvbnRyb2xsZXIKKyAtIFVTQiBob3N0L3BlcmlwaGVyYWwgY29udHJvbGxlcgorIC0gU0QgY29udHJvbGxlcgorIC0gSTJDIGNvbnRyb2xsZXIKKyAtIFJUQworCitUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLiBJdCBjYW4gYmUgY2hhbmdlZCB3aXRoIERJUCBzd2l0Y2goUzItNSkuCisKKyBwaHlzIGFkZHJlc3MJCQl8IFMyLTUgPSBPRkYJfCBTMi01ID0gT04KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKyAweDAwMDAwMDAwIC0gMHgwM2ZmZmZmZihDUzApCXwgTk9SIEZsYXNoCXwgTk9SIEZsYXNoCisgMHgwNDAwMDAwMCAtIDB4MDVmZmZmZmYoQ1MxKQl8IFBMRAkJfCBQTEQKKyAweDA2MDAwMDAwIC0gMHgwN2ZmZmZmZihDUzEpCXwgcmVzZXJ2ZWQJfCBJMkMKKyAweDA4MDAwMDAwIC0gMHgwYmZmZmZmZihDUzIpCXwgVVNCCQl8IEREUiBTRFJBTQorIDB4MGMwMDAwMDAgLSAweDBmZmZmZmZmKENTMykJfCBTRAkJfCBERFIgU0RSQU0KKyAweDEwMDAwMDAwIC0gMHgxM2ZmZmZmZihDUzQpCXwgU00xMDcJCXwgU00xMDcKKyAweDE0MDAwMDAwIC0gMHgxN2ZmZmZmZihDUzUpCXwgSTJDCQl8IFVTQgorIDB4MTgwMDAwMDAgLSAweDFiZmZmZmZmKENTNikJfCByZXNlcnZlZAl8IFNECisgMHg0MDAwMDAwMCAtIDB4NWZmZmZmZmYJfCBERFIgU0RSQU0JfCAoY2Fubm90IHVzZSkKKworCitUaGlzIGJvYXJkIHNwZWNpZmljIGNvbW1hbmQ6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgYm9hcmQgaGFzIHRoZSBmb2xsb3dpbmcgaXRzIHNwZWNpZmljIGNvbW1hbmQ6CisKKyAtIGh3dGVzdAorIC0gcHJpbnRtYWMKKyAtIHNldG1hYworCisKKzEuIGh3dGVzdAorCitUaGlzIGlzIHNlbGYtY2hlY2sgY29tbWFuZC4gVGhpcyBjb21tYW5kIGhhcyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAtIGFsbAkJOiB0ZXN0IGFsbCBoYXJkd2FyZQorIC0gcGxkCQk6IG91dHB1dCBQTEQgdmVyc2lvbgorIC0gbGVkCQk6IHR1cm4gb24gTEVEcworIC0gZGlwc3cJOiB0ZXN0IERJUCBzd2l0Y2gKKyAtIHNtMTA3CTogb3V0cHV0IFNNMTA3IHZlcnNpb24KKyAtIG5ldAkJOiBjaGVjayBSVEw4MTEwIElECisgLSBzYXRhCQk6IGNoZWNrIFNpSTM1MTIgSUQKKyAtIG5ldAkJOiBvdXRwdXQgUENJIHNsb3QgZGV2aWNlIElECisKK2kuZSkKKz0+IGh3dGVzdCBsZWQKK3R1cm4gb24gTEVEcyAzLCA1LCA3LCA5Cit0dXJuIG9uIExFRHMgNCwgNiwgOCwgMTAKKworPT4gaHd0ZXN0IG5ldAorRXRoZXJuZXQgT0sKKworCisyLiBwcmludG1hYworCitUaGlzIGNvbW1hbmQgb3V0cHV0cyBNQUMgYWRkcmVzcyBvZiB0aGlzIGJvYXJkLgorCitpLmUpCis9PiBwcmludG1hYworTUFDID0gMDA6MDA6ODc6Kio6Kio6KioKKworCiszLiBzZXRtYWMKKworVGhpcyBjb21tYW5kIHdyaXRlcyBNQUMgYWRkcmVzcyBvZiB0aGlzIGJvYXJkLgorCitpLmUpCis9PiBzZXRtYWMgMDA6MDA6ODc6Kio6Kio6KioKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvZnNsX2kyYy5jIGIvZHJpdmVycy9pMmMvZnNsX2kyYy5jCmluZGV4IGI3YjNhNzViLi4yNjQ1NTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9mc2xfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvZnNsX2kyYy5jCkBAIC03NiwxMiArNzYsMjAgQEAKICAqIEZvciB0aGlzIHRhYmxlLCB0aGUgdmFsdWVzIGFyZSBiYXNlZCBvbiBhIHZhbHVlIG9mIDEgZm9yIHRoZSBERlNSCiAgKiByZWdpc3Rlci4gIFNlZSB0aGUgYXBwbGljYXRpb24gbm90ZSBBTjI5MTkgIkRldGVybWluaW5nIHRoZSBJMkMgRnJlcXVlbmN5CiAgKiBEaXZpZGVyIFJhdGlvIGZvciBTQ0wiCisgKgorICogQ29sZEZpcmUgSTJDIGZyZXF1ZW5jeSBkaXZpZGVycyBmb3IgRkRSIHZhbHVlcyBhcmUgZGlmZmVyZW50IGZyb20KKyAqIFBvd2VyUEMuIFRoZSBwcm90b2NvbCB0byB1c2UgdGhlIEkyQyBtb2R1bGUgaXMgc3RpbGwgdGhlIHNhbWUuCisgKiBBIGRpZmZlcmVudCB0YWJsZSBpcyBkZWZpbmVkIGFuZCBhcmUgYmFzZWQgb24gTUNGNXh4eCB1c2VyIG1hbnVhbC4KKyAqCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXVuc2lnbmVkIHNob3J0IGRpdmlkZXI7CisjaWZkZWYgX19QUENfXwogCXU4IGRmc3I7CisjZW5kaWYKIAl1OCBmZHI7CiB9IGZzbF9pMmNfc3BlZWRfbWFwW10gPSB7CisjaWZkZWYgX19QUENfXwogCXsxNjAsIDEsIDMyfSwgezE5MiwgMSwgMzN9LCB7MjI0LCAxLCAzNH0sIHsyNTYsIDEsIDM1fSwKIAl7Mjg4LCAxLCAwfSwgezMyMCwgMSwgMX0sIHszNTIsIDYsIDF9LCB7Mzg0LCAxLCAyfSwgezQxNiwgNiwgMn0sCiAJezQ0OCwgMSwgMzh9LCB7NDgwLCAxLCAzfSwgezUxMiwgMSwgMzl9LCB7NTQ0LCAxMSwgM30sIHs1NzYsIDEsIDR9LApAQCAtOTgsNiArMTA2LDI1IEBACiAJezIwNDgwLCAxLCAyNX0sIHsyNDU3NiwgMSwgMjZ9LCB7Mjg2NzIsIDEsIDYyfSwgezMwNzIwLCAxLCAyN30sCiAJezMyNzY4LCAxLCA2M30sIHszNjg2NCwgMSwgMjh9LCB7NDA5NjAsIDEsIDI5fSwgezQ5MTUyLCAxLCAzMH0sCiAJezYxNDQwLCAxLCAzMX0sIHstMSwgMSwgMzF9CisjZWxpZiBkZWZpbmVkKF9fTTY4S19fKQorCXsyMCwgMzJ9LCB7MjIsIDMzfSwgezI0LCAzNH0sIHsyNiwgMzV9LAorCXsyOCwgMH0sIHsyOCwgMzZ9LCB7MzAsIDF9LCB7MzIsIDM3fSwKKwl7MzQsIDJ9LCB7MzYsIDM4fSwgezQwLCAzfSwgezQwLCAzOX0sCisJezQ0LCA0fSwgezQ4LCA1fSwgezQ4LCA0MH0sIHs1NiwgNn0sCisJezU2LCA0MX0sIHs2NCwgNDJ9LCB7NjgsIDd9LCB7NzIsIDQzfSwKKwl7ODAsIDh9LCB7ODAsIDQ0fSwgezg4LCA5fSwgezk2LCA0MX0sCisJezEwNCwgMTB9LCB7MTEyLCA0Mn0sIHsxMjgsIDExfSwgezEyOCwgNDN9LAorCXsxNDQsIDEyfSwgezE2MCwgMTN9LCB7MTYwLCA0OH0sIHsxOTIsIDE0fSwKKwl7MTkyLCA0OX0sIHsyMjQsIDUwfSwgezI0MCwgMTV9LCB7MjU2LCA1MX0sCisJezI4OCwgMTZ9LCB7MzIwLCAxN30sIHszMjAsIDUyfSwgezM4NCwgMTh9LAorCXszODQsIDUzfSwgezQ0OCwgNTR9LCB7NDgwLCAxOX0sIHs1MTIsIDU1fSwKKwl7NTc2LCAyMH0sIHs2NDAsIDIxfSwgezY0MCwgNTZ9LCB7NzY4LCAyMn0sCisJezc2OCwgNTd9LCB7OTYwLCAyM30sIHs4OTYsIDU4fSwgezEwMjQsIDU5fSwKKwl7MTE1MiwgMjR9LCB7MTI4MCwgMjV9LCB7MTI4MCwgNjB9LCB7MTUzNiwgMjZ9LAorCXsxNTM2LCA2MX0sIHsxNzkyLCA2Mn0sIHsxOTIwLCAyN30sIHsyMDQ4LCA2M30sCisJezIzMDQsIDI4fSwgezI1NjAsIDI5fSwgezMwNzIsIDMwfSwgezM4NDAsIDMxfSwKKwl7LTEsIDMxfQorI2VuZGlmCiB9OwogCiAvKioKQEAgLTEyNiwxMiArMTUzLDE3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2xfaTJjX3NwZWVkX21hcCk7IGkrKykKIAkJaWYgKGZzbF9pMmNfc3BlZWRfbWFwW2ldLmRpdmlkZXIgPj0gZGl2aWRlcikgewotCQkJdTggZmRyLCBkZnNyOworCQkJdTggZmRyOworI2lmZGVmIF9fUFBDX18KKwkJCXU4IGRmc3I7CiAJCQlkZnNyID0gZnNsX2kyY19zcGVlZF9tYXBbaV0uZGZzcjsKKyNlbmRpZgogCQkJZmRyID0gZnNsX2kyY19zcGVlZF9tYXBbaV0uZmRyOwogCQkJc3BlZWQgPSBpMmNfY2xrIC8gZnNsX2kyY19zcGVlZF9tYXBbaV0uZGl2aWRlcjsKIAkJCXdyaXRlYihmZHIsICZkZXYtPmZkcik7CQkvKiBzZXQgYnVzIHNwZWVkICovCisjaWZkZWYgX19QUENfXwogCQkJd3JpdGViKGRmc3IsICZkZXYtPmRmc3JyKTsJLyogc2V0IGRlZmF1bHQgZmlsdGVyICovCisjZW5kaWYKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCmluZGV4IDE5MjMzMTAuLmIwYWJlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQpAQCAtMzcsNiArMzcsNyBAQAogCiBDT0JKUy0kKENPTkZJR19OQU5EX0ZTTF9FTEJDKSArPSBmc2xfZWxiY19uYW5kLm8KIENPQkpTLSQoQ09ORklHX05BTkRfRlNMX1VQTSkgKz0gZnNsX3VwbS5vCitDT0JKUy0kKENPTkZJR19OQU5EX1MzQzY0WFgpICs9IHMzYzY0eHgubwogZW5kaWYKIAogQ09CSlMJOj0gJChDT0JKUy15KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2M2NHh4LmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzY0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTlmZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zM2M2NHh4LmMKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZworICoKKyAqIEltcGxlbWVudGF0aW9uIGZvciBVLUJvb3QgMS4xLjYgYnkgU2Ftc3VuZworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2luY2x1ZGUgPG5hbmQuaD4KKyNpbmNsdWRlIDxzM2M2NDAwLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2RlZmluZSBNQVhfQ0hJUFMJMgorc3RhdGljIGludCBuYW5kX2NzW01BWF9DSElQU10gPSB7MCwgMX07CisKKyNpZmRlZiBDT05GSUdfTkFORF9TUEwKKyNkZWZpbmUgcHJpbnRmKGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyogTmFuZCBmbGFzaCBkZWZpbml0aW9uIHZhbHVlcyBieSBqc2dvb2QgKi8KKyNpZmRlZiBTM0NfTkFORF9ERUJVRworLyoKKyAqIEZ1bmN0aW9uIHRvIHByaW50IG91dCBvb2IgYnVmZmVyIGZvciBkZWJ1Z2dpbmcKKyAqIFdyaXR0ZW4gYnkganNnb29kCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X29vYihjb25zdCBjaGFyICpoZWFkZXIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCWludCBpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlwcmludGYoIiVzOlx0IiwgaGVhZGVyKTsKKworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlwcmludGYoIiUwMnggIiwgY2hpcC0+b29iX3BvaVtpXSk7CisKKwlwcmludGYoIlxuIik7Cit9CisjZW5kaWYgLyogUzNDX05BTkRfREVCVUcgKi8KKworI2lmZGVmIENPTkZJR19OQU5EX1NQTAorc3RhdGljIHVfY2hhciBuYW5kX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXJldHVybiByZWFkYih0aGlzLT5JT19BRERSX1IpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXdyaXRlYihidWZbaV0sIHRoaXMtPklPX0FERFJfVyk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgczNjX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCWludCBjdHJsID0gcmVhZGwoTkZDT05UKTsKKworCXN3aXRjaCAoY2hpcCkgeworCWNhc2UgLTE6CisJCWN0cmwgfD0gNjsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQljdHJsICY9IH4yOworCQlicmVhazsKKwljYXNlIDE6CisJCWN0cmwgJj0gfjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwl3cml0ZWwoY3RybCwgTkZDT05UKTsKK30KKworLyoKKyAqIEhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzIGZ1bmN0aW9uCisgKiBXcml0dGVuIGJ5IGpzZ29vZAorICovCitzdGF0aWMgdm9pZCBzM2NfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKilORkNNTUQ7CisJCWVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKilORkFERFI7CisJCWVsc2UKKwkJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKilORkRBVEE7CisJCWlmIChjdHJsICYgTkFORF9OQ0UpCisJCQlzM2NfbmFuZF9zZWxlY3RfY2hpcChtdGQsICooaW50ICopdGhpcy0+cHJpdik7CisJCWVsc2UKKwkJCXMzY19uYW5kX3NlbGVjdF9jaGlwKG10ZCwgLTEpOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgdGhpcy0+SU9fQUREUl9XKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIGZvciBjaGVja2luZyBkZXZpY2UgcmVhZHkgcGluCisgKiBXcml0dGVuIGJ5IGpzZ29vZAorICovCitzdGF0aWMgaW50IHMzY19uYW5kX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8pCit7CisJcmV0dXJuICEhKHJlYWRsKE5GU1RBVCkgJiBORlNUQVRfUm5CKTsKK30KKworI2lmZGVmIENGR19TM0NfTkFORF9IV0VDQworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBlbmNvZGluZyBlY2MgY29kZXMgdG8gcmVhZHkgZWNjIGVuZ2luZS4KKyAqIFdyaXR0ZW4gYnkganNnb29kCisgKi8KK3N0YXRpYyB2b2lkIHMzY19uYW5kX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJdV9sb25nIG5mY29udCwgbmZjb25mOworCisJLyoKKwkgKiBUaGUgb3JpZ2luYWwgZHJpdmVyIHVzZWQgNC1iaXQgRUNDIGZvciAibmV3IiBNTEMgY2hpcHMsIGkuZS4sIGZvcgorCSAqIHRob3NlIHdpdGggbm9uLXplcm8gSURbM11bMzoyXSwgd2hpY2ggYW55d2F5IG9ubHkgaG9sZHMgZm9yIFNUCisJICogKE51bW9ueXgpIGNoaXBzCisJICovCisJbmZjb25mID0gcmVhZGwoTkZDT05GKSAmIH5ORkNPTkZfRUNDXzRCSVQ7CisKKwl3cml0ZWwobmZjb25mLCBORkNPTkYpOworCisJLyogSW5pdGlhbGl6ZSAmIHVubG9jayAqLworCW5mY29udCA9IHJlYWRsKE5GQ09OVCk7CisJbmZjb250IHw9IE5GQ09OVF9JTklURUNDOworCW5mY29udCAmPSB+TkZDT05UX01FQ0NMT0NLOworCisJaWYgKG1vZGUgPT0gTkFORF9FQ0NfV1JJVEUpCisJCW5mY29udCB8PSBORkNPTlRfRUNDX0VOQzsKKwllbHNlIGlmIChtb2RlID09IE5BTkRfRUNDX1JFQUQpCisJCW5mY29udCAmPSB+TkZDT05UX0VDQ19FTkM7CisKKwl3cml0ZWwobmZjb250LCBORkNPTlQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZW5jb2RpbmcgZWNjIGNvZGVzLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGVuY29kZWQgZWNjIGNvZGVzLgorICogV3JpdHRlbiBieSBqc2dvb2QKKyAqLworc3RhdGljIGludCBzM2NfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJCQkgIHVfY2hhciAqZWNjX2NvZGUpCit7CisJdV9sb25nIG5mY29udCwgbmZtZWNjMDsKKworCS8qIExvY2sgKi8KKwluZmNvbnQgPSByZWFkbChORkNPTlQpOworCW5mY29udCB8PSBORkNPTlRfTUVDQ0xPQ0s7CisJd3JpdGVsKG5mY29udCwgTkZDT05UKTsKKworCW5mbWVjYzAgPSByZWFkbChORk1FQ0MwKTsKKworCWVjY19jb2RlWzBdID0gbmZtZWNjMCAmIDB4ZmY7CisJZWNjX2NvZGVbMV0gPSAobmZtZWNjMCA+PiA4KSAmIDB4ZmY7CisJZWNjX2NvZGVbMl0gPSAobmZtZWNjMCA+PiAxNikgJiAweGZmOworCWVjY19jb2RlWzNdID0gKG5mbWVjYzAgPj4gMjQpICYgMHhmZjsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgcmVhZCBkYXRhIGlzIGdvb2Qgb3Igbm90LgorICogSWYgU0xDLCBtdXN0IHdyaXRlIGVjYyBjb2RlcyB0byBjb250cm9sbGVyIGJlZm9yZSByZWFkaW5nIHN0YXR1cyBiaXQuCisgKiBJZiBNTEMsIHN0YXR1cyBiaXQgaXMgYWxyZWFkeSBzZXQsIHNvIG9ubHkgcmVhZGluZyBpcyBuZWVkZWQuCisgKiBJZiBzdGF0dXMgYml0IGlzIGdvb2QsIHJldHVybiAwLgorICogSWYgY29ycmVjdGFibGUgZXJyb3JzIG9jY3VyZWQsIGRvIHRoYXQuCisgKiBJZiB1bmNvcnJlY3RhYmxlIGVycm9ycyBvY2N1cmVkLCByZXR1cm4gLTEuCisgKiBXcml0dGVuIGJ5IGpzZ29vZAorICovCitzdGF0aWMgaW50IHMzY19uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCisJCQkJIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCit7CisJaW50IHJldCA9IC0xOworCXVfbG9uZyBuZmVzdGF0MCwgbmZtZWNjZGF0YTAsIG5mbWVjY2RhdGExLCBlcnJfYnl0ZV9hZGRyOworCXVfY2hhciBlcnJfdHlwZSwgcmVwYWlyZWQ7CisKKwkvKiBTTEM6IFdyaXRlIGVjYyB0byBjb21wYXJlICovCisJbmZtZWNjZGF0YTAgPSAoY2FsY19lY2NbMV0gPDwgMTYpIHwgY2FsY19lY2NbMF07CisJbmZtZWNjZGF0YTEgPSAoY2FsY19lY2NbM10gPDwgMTYpIHwgY2FsY19lY2NbMl07CisJd3JpdGVsKG5mbWVjY2RhdGEwLCBORk1FQ0NEQVRBMCk7CisJd3JpdGVsKG5mbWVjY2RhdGExLCBORk1FQ0NEQVRBMSk7CisKKwkvKiBSZWFkIGVjYyBzdGF0dXMgKi8KKwluZmVzdGF0MCA9IHJlYWRsKE5GRVNUQVQwKTsKKwllcnJfdHlwZSA9IG5mZXN0YXQwICYgMHgzOworCisJc3dpdGNoIChlcnJfdHlwZSkgeworCWNhc2UgMDogLyogTm8gZXJyb3IgKi8KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCS8qCisJCSAqIDEgYml0IGVycm9yIChDb3JyZWN0YWJsZSkKKwkJICogKG5mZXN0YXQwID4+IDcpICYgMHg3ZmYJOmVycm9yIGJ5dGUgbnVtYmVyCisJCSAqIChuZmVzdGF0MCA+PiA0KSAmIDB4Nwk6ZXJyb3IgYml0IG51bWJlcgorCQkgKi8KKwkJZXJyX2J5dGVfYWRkciA9IChuZmVzdGF0MCA+PiA3KSAmIDB4N2ZmOworCQlyZXBhaXJlZCA9IGRhdFtlcnJfYnl0ZV9hZGRyXSBeICgxIDw8ICgobmZlc3RhdDAgPj4gNCkgJiAweDcpKTsKKworCQlwcmludGYoIlMzQyBOQU5EOiAxIGJpdCBlcnJvciBkZXRlY3RlZCBhdCBieXRlICVsZC4gIgorCQkgICAgICAgIkNvcnJlY3RpbmcgZnJvbSAweCUwMnggdG8gMHglMDJ4Li4uT0tcbiIsCisJCSAgICAgICBlcnJfYnl0ZV9hZGRyLCBkYXRbZXJyX2J5dGVfYWRkcl0sIHJlcGFpcmVkKTsKKworCQlkYXRbZXJyX2J5dGVfYWRkcl0gPSByZXBhaXJlZDsKKworCQlyZXQgPSAxOworCQlicmVhazsKKworCWNhc2UgMjogLyogTXVsdGlwbGUgZXJyb3IgKi8KKwljYXNlIDM6IC8qIEVDQyBhcmVhIGVycm9yICovCisJCXByaW50ZigiUzNDIE5BTkQ6IEVDQyB1bmNvcnJlY3RhYmxlIGVycm9yIGRldGVjdGVkLiAiCisJCSAgICAgICAiTm90IGNvcnJlY3RhYmxlLlxuIik7CisJCXJldCA9IC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENGR19TM0NfTkFORF9IV0VDQyAqLworCisvKgorICogQm9hcmQtc3BlY2lmaWMgTkFORCBpbml0aWFsaXphdGlvbi4gVGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIHRoZQorICogYXJndW1lbnQgYXJlIGJvYXJkLXNwZWNpZmljIChwZXIgaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oKToKKyAqIC0gSU9fQUREUl9SPzogYWRkcmVzcyB0byByZWFkIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCisgKiAtIElPX0FERFJfVz86IGFkZHJlc3MgdG8gd3JpdGUgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UKKyAqIC0gaHdjb250cm9sOiBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBjb250cm9sLWxpbmVzCisgKiAtIGRldl9yZWFkeTogaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgIGFjY2VzaW5nIGRldmljZSByZWFkeS9idXN5IGxpbmUKKyAqIC0gZW5hYmxlX2h3ZWNjPzogZnVuY3Rpb24gdG8gZW5hYmxlIChyZXNldCkgIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3QKKyAqICAgb25seSBiZSBwcm92aWRlZCBpZiBhIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKKyAqIC0gZWNjbW9kZTogbW9kZSBvZiBlY2MsIHNlZSBkZWZpbmVzCisgKiAtIGNoaXBfZGVsYXk6IGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYXJyYXkgdG8KKyAqICAgcmVhZCByZWdzICh0UikKKyAqIC0gb3B0aW9uczogdmFyaW91cyBjaGlwIG9wdGlvbnMuIFRoZXkgY2FuIHBhcnRseSBiZSBzZXQgdG8gaW5mb3JtCisgKiAgIG5hbmRfc2NhbiBhYm91dCBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkuIFNlZSB0aGUgZGVmaW5lcyBmb3IgZnVydGhlcgorICogICBleHBsYW5hdGlvbgorICogTWVtYmVycyB3aXRoIGEgIj8iIHdlcmUgbm90IHNldCBpbiB0aGUgbWVyZ2VkIHRlc3RpbmctTkFORCBicmFuY2gsCisgKiBzbyB0aGV5IGFyZSBub3Qgc2V0IGhlcmUgZWl0aGVyLgorICovCitpbnQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCit7CisJc3RhdGljIGludCBjaGlwX247CisKKwlpZiAoY2hpcF9uID49IE1BWF9DSElQUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlORkNPTlRfUkVHID0gKE5GQ09OVF9SRUcgJiB+TkZDT05UX1dQKSB8IE5GQ09OVF9FTkFCTEUgfCAweDY7CisKKwluYW5kLT5JT19BRERSX1IJCT0gKHZvaWQgX19pb21lbSAqKU5GREFUQTsKKwluYW5kLT5JT19BRERSX1cJCT0gKHZvaWQgX19pb21lbSAqKU5GREFUQTsKKwluYW5kLT5jbWRfY3RybAkJPSBzM2NfbmFuZF9od2NvbnRyb2w7CisJbmFuZC0+ZGV2X3JlYWR5CQk9IHMzY19uYW5kX2RldmljZV9yZWFkeTsKKwluYW5kLT5zZWxlY3RfY2hpcAk9IHMzY19uYW5kX3NlbGVjdF9jaGlwOworCW5hbmQtPm9wdGlvbnMJCT0gMDsKKyNpZmRlZiBDT05GSUdfTkFORF9TUEwKKwluYW5kLT5yZWFkX2J5dGUJCT0gbmFuZF9yZWFkX2J5dGU7CisJbmFuZC0+d3JpdGVfYnVmCQk9IG5hbmRfd3JpdGVfYnVmOworCW5hbmQtPnJlYWRfYnVmCQk9IG5hbmRfcmVhZF9idWY7CisjZW5kaWYKKworI2lmZGVmIENGR19TM0NfTkFORF9IV0VDQworCW5hbmQtPmVjYy5od2N0bAkJPSBzM2NfbmFuZF9lbmFibGVfaHdlY2M7CisJbmFuZC0+ZWNjLmNhbGN1bGF0ZQk9IHMzY19uYW5kX2NhbGN1bGF0ZV9lY2M7CisJbmFuZC0+ZWNjLmNvcnJlY3QJPSBzM2NfbmFuZF9jb3JyZWN0X2RhdGE7CisKKwkvKgorCSAqIElmIHlvdSBnZXQgbW9yZSB0aGFuIDEgTkFORC1jaGlwIHdpdGggZGlmZmVyZW50IHBhZ2Utc2l6ZXMgb24gdGhlCisJICogYm9hcmQgb25lIGRheSwgaXQgd2lsbCBnZXQgbW9yZSBjb21wbGljYXRlZC4uLgorCSAqLworCW5hbmQtPmVjYy5tb2RlCQk9IE5BTkRfRUNDX0hXOworCW5hbmQtPmVjYy5zaXplCQk9IENGR19OQU5EX0VDQ1NJWkU7CisJbmFuZC0+ZWNjLmJ5dGVzCQk9IENGR19OQU5EX0VDQ0JZVEVTOworI2Vsc2UKKwluYW5kLT5lY2MubW9kZQkJPSBOQU5EX0VDQ19TT0ZUOworI2VuZGlmIC8qICEgQ0ZHX1MzQ19OQU5EX0hXRUNDICovCisKKwluYW5kLT5wcml2CQk9IG5hbmRfY3MgKyBjaGlwX24rKzsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCBiY2YzMWNiLi5hMDg0MDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtNDEsNiArNDEsOCBAQAogQ09CSlMtJChDT05GSUdfRFJJVkVSX0xBTjkxQzk2KSArPSBsYW45MWM5Ni5vCiBDT0JKUy0kKENPTkZJR19NQUNCKSArPSBtYWNiLm8KIENPQkpTLSQoQ09ORklHX01DRkZFQykgKz0gbWNmZmVjLm8KK0NPQkpTLSQoQ09ORklHX01QQzV4eHhfRkVDKSArPSBtcGM1eHh4X2ZlYy5vCitDT0JKUy0kKENPTkZJR19NUEM1MTJ4X0ZFQykgKz0gbXBjNTEyeF9mZWMubwogQ09CSlMtJChDT05GSUdfTkFUU0VNSSkgKz0gbmF0c2VtaS5vCiBpZmVxICgkKENPTkZJR19EUklWRVJfTkUyMDAwKSx5KQogQ09CSlMteSArPSBuZTIwMDAubwpkaWZmIC0tZ2l0IGEvY3B1L21wYzUxMngvZmVjLmMgYi9kcml2ZXJzL25ldC9tcGM1MTJ4X2ZlYy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGNwdS9tcGM1MTJ4L2ZlYy5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC9tcGM1MTJ4X2ZlYy5jCmluZGV4IGU5ZGY3ZGUuLjdjYWVlZGEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1MTJ4L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L21wYzUxMnhfZmVjLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlIDxtaWlwaHkuaD4KLSNpbmNsdWRlICJmZWMuaCIKKyNpbmNsdWRlICJtcGM1MTJ4X2ZlYy5oIgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzUxMngvZmVjLmggYi9kcml2ZXJzL25ldC9tcGM1MTJ4X2ZlYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjcHUvbXBjNTEyeC9mZWMuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvbXBjNTEyeF9mZWMuaApkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eHgvZmVjLmMgYi9kcml2ZXJzL25ldC9tcGM1eHh4X2ZlYy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGNwdS9tcGM1eHh4L2ZlYy5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC9tcGM1eHh4X2ZlYy5jCmluZGV4IGJmODA0ZWUuLjNkM2ViOGIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L21wYzV4eHhfZmVjLmMKQEAgLTgsMTEgKzgsMTEgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPG1wYzV4eHguaD4KKyNpbmNsdWRlIDxtcGM1eHh4X3NkbWEuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlIDxtaWlwaHkuaD4KLSNpbmNsdWRlICJzZG1hLmgiCi0jaW5jbHVkZSAiZmVjLmgiCisjaW5jbHVkZSAibXBjNXh4eF9mZWMuaCIKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHh4L2ZlYy5oIGIvZHJpdmVycy9uZXQvbXBjNXh4eF9mZWMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBjcHUvbXBjNXh4eC9mZWMuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvbXBjNXh4eF9mZWMuaAppbmRleCA4MTc1NmE1Li4xNmMzZThlIDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4eC9mZWMuaAorKysgYi9kcml2ZXJzL25ldC9tcGM1eHh4X2ZlYy5oCkBAIC0xMSwxMCArMTEsNiBAQAogI2lmbmRlZiBfX01QQzVYWFhfRkVDX0gKICNkZWZpbmUgX19NUEM1WFhYX0ZFQ19ICiAKLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxtcGM1eHh4Lmg+Ci0jaW5jbHVkZSAic2RtYS5oIgotCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyOwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTY7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDIzODQ3MzUuLmYzMDAxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC0zMCw2ICszMCw3IEBACiBDT0JKUy0kKENPTkZJR19OUzk3NTBfVUFSVCkgKz0gbnM5NzUwX3NlcmlhbC5vCiBDT0JKUy15ICs9IG5zMTY1NTAubwogQ09CSlMtJChDT05GSUdfRFJJVkVSX1MzQzQ1MTBfVUFSVCkgKz0gczNjNDUxMGJfdWFydC5vCitDT0JKUy0kKENPTkZJR19TM0M2NFhYKSArPSBzM2M2NHh4Lm8KIENPQkpTLXkgKz0gc2VyaWFsLm8KIENPQkpTLSQoQ09ORklHX01BWDMxMDBfU0VSSUFMKSArPSBzZXJpYWxfbWF4MzEwMC5vCiBDT0JKUy15ICs9IHNlcmlhbF9wbDAxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2M2NHh4LmMgYi9kcml2ZXJzL3NlcmlhbC9zM2M2NHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4ZmNiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzY0eHguYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaW5jbHVkZSA8czNjNjQwMC5oPgorCisjaWZkZWYgQ09ORklHX1NFUklBTDEKKyNkZWZpbmUgVUFSVF9OUglTM0M2NFhYX1VBUlQwCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NFUklBTDIpCisjZGVmaW5lIFVBUlRfTlIJUzNDNjRYWF9VQVJUMQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19TRVJJQUwzKQorI2RlZmluZSBVQVJUX05SCVMzQzY0WFhfVUFSVDIKKworI2Vsc2UKKyNlcnJvciAiQmFkOiB5b3UgZGlkbid0IGNvbmZpZ3VyZSBzZXJpYWwgLi4uIgorI2VuZGlmCisKKyNkZWZpbmUgYmFycmllcigpIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisKKy8qCisgKiBUaGUgY29lZmZpY2llbnQsIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBiYXVkcmF0ZSBvbiBTM0M2NDAwIFVBUlRzIGlzCisgKiBjYWxjdWxhdGVkIGFzCisgKiBDID0gVUJSRElWICogMTYgKyBudW1iZXJfb2Zfc2V0X2JpdHNfaW5fVURJVlNMT1QKKyAqIGhvd2V2ZXIsIHNlY3Rpb24gMzEuNi4xMSBvZiB0aGUgZGF0YXNoZWV0IGRvZXNuJ3QgcmVjb21tZW50IHVzaW5nIDEgZm9yIDEsCisgKiAzIGZvciAyLCAuLi4gKDJebiAtIDEpIGZvciBuLCBpbnN0ZWFkLCB0aGV5IHN1Z2dlc3QgdXNpbmcgdGhlc2UgY29uc3RhbnRzOgorICovCitzdGF0aWMgY29uc3QgaW50IHVkaXZzbG90W10gPSB7CisJMCwKKwkweDAwODAsCisJMHgwODA4LAorCTB4MDg4OCwKKwkweDIyMjIsCisJMHg0OTI0LAorCTB4NGE1MiwKKwkweDU0YWEsCisJMHg1NTU1LAorCTB4ZDU1NSwKKwkweGQ1ZDUsCisJMHhkZGQ1LAorCTB4ZGRkZCwKKwkweGRmZGQsCisJMHhkZmRmLAorCTB4ZmZkZiwKK307CisKK3ZvaWQgc2VyaWFsX3NldGJyZyh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCXMzYzY0eHhfdWFydCAqY29uc3QgdWFydCA9IHMzYzY0eHhfZ2V0X2Jhc2VfdWFydChVQVJUX05SKTsKKwl1MzIgcGNsayA9IGdldF9QQ0xLKCk7CisJdTMyIGJhdWRyYXRlID0gZ2QtPmJhdWRyYXRlOworCWludCBpOworCisJaSA9IChwY2xrIC8gYmF1ZHJhdGUpICUgMTY7CisKKwl1YXJ0LT5VQlJESVYgPSBwY2xrIC8gYmF1ZHJhdGUgLyAxNiAtIDE7CisJdWFydC0+VURJVlNMT1QgPSB1ZGl2c2xvdFtpXTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykKKwkJYmFycmllcigpOworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgc2VyaWFsIHBvcnQgd2l0aCB0aGUgZ2l2ZW4gYmF1ZHJhdGUuIFRoZSBzZXR0aW5ncworICogYXJlIGFsd2F5cyA4IGRhdGEgYml0cywgbm8gcGFyaXR5LCAxIHN0b3AgYml0LCBubyBzdGFydCBiaXRzLgorICovCitpbnQgc2VyaWFsX2luaXQodm9pZCkKK3sKKwlzM2M2NHh4X3VhcnQgKmNvbnN0IHVhcnQgPSBzM2M2NHh4X2dldF9iYXNlX3VhcnQoVUFSVF9OUik7CisKKwkvKiByZXNldCBhbmQgZW5hYmxlIEZJRk9zLCBzZXQgdHJpZ2dlcnMgdG8gdGhlIG1heGltdW0gKi8KKwl1YXJ0LT5VRkNPTiA9IDB4ZmY7CisJdWFydC0+VU1DT04gPSAwOworCS8qIDhOMSAqLworCXVhcnQtPlVMQ09OID0gMzsKKwkvKiBObyBpbnRlcnJ1cHRzLCBubyBETUEsIHB1cmUgcG9sbGluZyAqLworCXVhcnQtPlVDT04gPSA1OworCisJc2VyaWFsX3NldGJyZygpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSB0aGUgc2VyaWFsIHBvcnQuIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwCisgKiBvdGhlcndpc2UuIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIHN1Y2Nlc2Z1bGwsIHRoZSBjaGFyYWN0ZXIgcmVhZCBpcworICogd3JpdHRlbiBpbnRvIGl0cyBhcmd1bWVudCBjLgorICovCitpbnQgc2VyaWFsX2dldGModm9pZCkKK3sKKwlzM2M2NHh4X3VhcnQgKmNvbnN0IHVhcnQgPSBzM2M2NHh4X2dldF9iYXNlX3VhcnQoVUFSVF9OUik7CisKKwkvKiB3YWl0IGZvciBjaGFyYWN0ZXIgdG8gYXJyaXZlICovCisJd2hpbGUgKCEodWFydC0+VVRSU1RBVCAmIDB4MSkpOworCisJcmV0dXJuIHVhcnQtPlVSWEggJiAweGZmOworfQorCisjaWZkZWYgQ09ORklHX01PREVNX1NVUFBPUlQKK3N0YXRpYyBpbnQgYmVfcXVpZXQ7Cit2b2lkIGRpc2FibGVfcHV0Yyh2b2lkKQoreworCWJlX3F1aWV0ID0gMTsKK30KKwordm9pZCBlbmFibGVfcHV0Yyh2b2lkKQoreworCWJlX3F1aWV0ID0gMDsKK30KKyNlbmRpZgorCisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgYnl0ZSB0byB0aGUgc2VyaWFsIHBvcnQuCisgKi8KK3ZvaWQgc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKQoreworCXMzYzY0eHhfdWFydCAqY29uc3QgdWFydCA9IHMzYzY0eHhfZ2V0X2Jhc2VfdWFydChVQVJUX05SKTsKKworI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCisJaWYgKGJlX3F1aWV0KQorCQlyZXR1cm47CisjZW5kaWYKKworCS8qIHdhaXQgZm9yIHJvb20gaW4gdGhlIHR4IEZJRk8gKi8KKwl3aGlsZSAoISh1YXJ0LT5VVFJTVEFUICYgMHgyKSk7CisKKwl1YXJ0LT5VVFhIID0gYzsKKworCS8qIElmIFxuLCBhbHNvIGRvIFxyICovCisJaWYgKGMgPT0gJ1xuJykKKwkJc2VyaWFsX3B1dGMoJ1xyJyk7Cit9CisKKy8qCisgKiBUZXN0IHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgaW4gdGhlIFJYIGJ1ZmZlcgorICovCitpbnQgc2VyaWFsX3RzdGModm9pZCkKK3sKKwlzM2M2NHh4X3VhcnQgKmNvbnN0IHVhcnQgPSBzM2M2NHh4X2dldF9iYXNlX3VhcnQoVUFSVF9OUik7CisKKwlyZXR1cm4gdWFydC0+VVRSU1RBVCAmIDB4MTsKK30KKwordm9pZCBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykKKwkJc2VyaWFsX3B1dGMoKnMrKyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfc2guYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zaC5jCmluZGV4IDJiOWVlZWQuLjYxYzJiODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zaC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zaC5jCkBAIC0yMCwxNCArMjAsMjAgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLSNpZiBkZWZpbmVkIChDT05GSUdfQ09OU19TQ0lGMCkKLSNkZWZpbmUgU0NJRl9CQVNFCVNDSUYwX0JBU0UKLSNlbGlmIGRlZmluZWQgKENPTkZJR19DT05TX1NDSUYxKQotI2RlZmluZSBTQ0lGX0JBU0UJU0NJRjFfQkFTRQotI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NPTlNfU0NJRjIpCi0jZGVmaW5lIFNDSUZfQkFTRQlTQ0lGMl9CQVNFCisjaWYgZGVmaW5lZChDT05GSUdfQ09OU19TQ0lGMCkKKyMgZGVmaW5lIFNDSUZfQkFTRQlTQ0lGMF9CQVNFCisjZWxpZiBkZWZpbmVkKENPTkZJR19DT05TX1NDSUYxKQorIyBkZWZpbmUgU0NJRl9CQVNFCVNDSUYxX0JBU0UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTlNfU0NJRjIpCisjIGRlZmluZSBTQ0lGX0JBU0UJU0NJRjJfQkFTRQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ09OU19TQ0lGMykKKyMgZGVmaW5lIFNDSUZfQkFTRQlTQ0lGM19CQVNFCisjZWxpZiBkZWZpbmVkKENPTkZJR19DT05TX1NDSUY0KQorIyBkZWZpbmUgU0NJRl9CQVNFCVNDSUY0X0JBU0UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTlNfU0NJRjUpCisjIGRlZmluZSBTQ0lGX0JBU0UJU0NJRjVfQkFTRQogI2Vsc2UKLSNlcnJvciAiRGVmYXVsdCBTQ0lGIGRvZXNuJ3Qgc2V0Li4uLi4iCisjIGVycm9yICJEZWZhdWx0IFNDSUYgZG9lc24ndCBzZXQuLi4uLiIKICNlbmRpZgogCiAvKiBCYXNlIHJlZ2lzdGVyICovCkBAIC0zNiw3ICs0Miw4IEBACiAjZGVmaW5lIFNDU0NSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDgpCiAjZGVmaW5lIFNDRkNSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDE4KQogI2RlZmluZSBTQ0ZEUgkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgxQykKLSNpZmRlZiBDT05GSUdfQ1BVX1NINzcyMAkvKiBTSDc3MjAgc3BlY2lmaWMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g3NzIwKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0NQVV9TSDc3MjMpICYmIGRlZmluZWQoQ09ORklHX1NDSUZfQSkpCiAjIGRlZmluZSBTQ0ZTUgkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgxNCkJLyogU0NTU1IgKi8KICMgZGVmaW5lIFNDRlREUgkodnVfY2hhciAgKikoU0NJRl9CQVNFICsgMHgyMCkKICMgZGVmaW5lIFNDRlJEUgkodnVfY2hhciAgKikoU0NJRl9CQVNFICsgMHgyNCkKQEAgLTU1LDcgKzYyLDcgQEAKICMgZGVmaW5lIExTUl9PUkVSCTEKICMgZGVmaW5lIEZJRk9MRVZFTF9NQVNLCTB4RkYKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDc3NjMpCi0jIGlmIGRlZmluZWQgKENPTkZJR19DT05TX1NDSUYyKQorIyBpZiBkZWZpbmVkKENPTkZJR19DT05TX1NDSUYyKQogIyBkZWZpbmUgU0NTUFRSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDIwKQogIyBkZWZpbmUgU0NMU1IgCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDI0KQogIyBkZWZpbmUgTFNSX09SRVIJMQpAQCAtNjgsOSArNzUsMjAgQEAKICMgZGVmaW5lIExTUl9PUkVSCTEKICMgZGVmaW5lIEZJRk9MRVZFTF9NQVNLCTB4RkYKICMgZW5kaWYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDc3MjMpCisjIGlmIGRlZmluZWQoQ09OSUZHX1NDSUZfQSkKKyMgZGVmaW5lIFNDTFNSCVNDRlNSCisjIGRlZmluZSBMU1JfT1JFUgkweDAyMDAKKyMgZGVmaW5lIEZJRk9MRVZFTF9NQVNLCTB4M0YKKyNlbHNlCisjIGRlZmluZSBTQ0xTUgkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgyNCkKKyMgZGVmaW5lIExTUl9PUkVSCTEKKyMgZGVmaW5lIEZJRk9MRVZFTF9NQVNLCTB4MUYKKyNlbmRpZgogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINzc1MCkgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TSDc3NTEpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19DUFVfU0g3NzIyKQorCWRlZmluZWQoQ09ORklHX0NQVV9TSDc3MjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU0g3MjAzKQogIyBkZWZpbmUgU0NTUFRSCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDIwKQogIyBkZWZpbmUgU0NMU1IgCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDI0KQogIyBkZWZpbmUgTFNSX09SRVIJMQpAQCAtODksNiArMTA3LDkgQEAKIC8qIFNDQlJSIHJlZ2lzdGVyIHZhbHVlIHNldHRpbmcgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g3NzIwKQogIyBkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygzMipicHMpLTEpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g3NzIzKSAmJiBkZWZpbmVkKENPTkZJR19TQ0lGX0EpCisvKiBTSDc3MjMgU0NJRkEgdXNlIGJ1cyBjbG9jay4gU28gY2xvY2sgKjIgKi8KKyMgZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMioyKSsxNipicHMpLygzMipicHMpLTEpCiAjZWxzZSAvKiBHZW5lcmljIFN1cGVySCAqLwogIyBkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDMyKmJwcyktMSkKICNlbmRpZgpAQCAtMTY3LDcgKzE4OCw3IEBACiAKIGludCBzZXJpYWxfdHN0Yyh2b2lkKQogewotCXJldHVybiBzZXJpYWxfcnhfZmlmb19sZXZlbCgpPyAxIDogMDsKKwlyZXR1cm4gc2VyaWFsX3J4X2ZpZm9fbGV2ZWwoKSA/IDEgOiAwOwogfQogCiAjZGVmaW5lIEZTUl9FUlJfQ0xFQVIgICAweDAwNjMKQEAgLTE5MSwxNCArMjEyLDE2IEBACiAJCWhhbmRsZV9lcnJvcigpOwogCWlmICgqU0NMU1IgJiBMU1JfT1JFUikKIAkJaGFuZGxlX2Vycm9yKCk7Ci0JcmV0dXJuIChzdGF0dXMgJiAoRlNSX0RSIHwgRlNSX1JERikpOworCXJldHVybiBzdGF0dXMgJiAoRlNSX0RSIHwgRlNSX1JERik7CiB9CiAKIGludCBzZXJpYWxfZ2V0Yyh2b2lkKQogewogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAljaGFyIGNoOwotCXdoaWxlICghc2VyaWFsX2dldGNfY2hlY2soKSkgOworCisJd2hpbGUgKCFzZXJpYWxfZ2V0Y19jaGVjaygpKQorCQk7CiAKIAljaCA9ICpTQ0ZSRFI7CiAJc3RhdHVzID0gKlNDRlNSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiX29oY2kuYyBiL2RyaXZlcnMvdXNiL3VzYl9vaGNpLmMKaW5kZXggZmQ2MGVkYi4uMGJmYTRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiX29oY2kuYworKysgYi9kcml2ZXJzL3VzYi91c2Jfb2hjaS5jCkBAIC02OSw2ICs2OSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJNOTIwVCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TM0MyNDEwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUzNDNjQwMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfUENJX09IQ0kpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19NUEM1MjAwKSB8fCBcCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZSBiL2V4YW1wbGVzL01ha2VmaWxlCmluZGV4IDY2YjM1NGQuLmIwYTg4NTMgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL01ha2VmaWxlCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw5IEBACiAKIGlmZXEgKCQoQVJDSCksc2gpCiBMT0FEX0FERFIgPSAweDhDMDAwMDAwCitpZmVxICgkKENQVSksc2gyKQorQklHX0VORElBTj15CitlbmRpZgogZW5kaWYKIAogaWZlcSAoJChBUkNIKSxzcGFyYykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZW1hY19kZWZzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2VtYWNfZGVmcy5oCmluZGV4IDBlMTAxMTYuLmMxMTE2MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvZW1hY19kZWZzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9lbWFjX2RlZnMuaApAQCAtMjg0LDggKzI4NCw4IEBACiAJZHZfcmVnCQlVU0VSUEhZU0VMMTsKIH0gbWRpb19yZWdzOwogCi1pbnQgZG02NDR4X2V0aF9waHlfcmVhZCh1X2ludDhfdCBwaHlfYWRkciwgdV9pbnQ4X3QgcmVnX251bSwgdV9pbnQxNl90ICpkYXRhKTsKLWludCBkbTY0NHhfZXRoX3BoeV93cml0ZSh1X2ludDhfdCBwaHlfYWRkciwgdV9pbnQ4X3QgcmVnX251bSwgdV9pbnQxNl90IGRhdGEpOworaW50IGRhdmluY2lfZXRoX3BoeV9yZWFkKHVfaW50OF90IHBoeV9hZGRyLCB1X2ludDhfdCByZWdfbnVtLCB1X2ludDE2X3QgKmRhdGEpOworaW50IGRhdmluY2lfZXRoX3BoeV93cml0ZSh1X2ludDhfdCBwaHlfYWRkciwgdV9pbnQ4X3QgcmVnX251bSwgdV9pbnQxNl90IGRhdGEpOwogCiB0eXBlZGVmIHN0cnVjdAogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjNjR4eC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjNjR4eC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDI0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2M2NHh4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIE9yaWdpbmF0ZXMgZnJvbSBTYW1zdW5nJ3MgdS1ib290IDEuMS42IHBvcnQgdG8gUzNDNjQwMCAvIFNNREs2NDAwCisgKgorICogKEMpIENvcHlyaWdodCAyMDA4CisgKiBHdWVubmFkaSBMaWFraG92ZXRraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVJDSF9IQVJEV0FSRV9IXworI2RlZmluZSBfQVJDSF9IQVJEV0FSRV9IXworCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIFVEYXRhKERhdGEpCSgodW5zaWduZWQgbG9uZykgKERhdGEpKQorCisjZGVmaW5lIF9fUkVHKHgpCSgqKHZ1X2xvbmcgKikoeCkpCisjZGVmaW5lIF9fUkVHbCh4KQkoKih2dV9sb25nICopKHgpKQorI2RlZmluZSBfX1JFR3coeCkJKCoodnVfc2hvcnQgKikoeCkpCisjZGVmaW5lIF9fUkVHYih4KQkoKih2dV9jaGFyICopKHgpKQorI2RlZmluZSBfX1JFRzIoeCwgeSkJKCoodnVfbG9uZyAqKSgoeCkgKyAoeSkpKQorI2Vsc2UKKyNkZWZpbmUgVURhdGEoRGF0YSkJKERhdGEpCisKKyNkZWZpbmUgX19SRUcoeCkJKHgpCisjZGVmaW5lIF9fUkVHbCh4KQkoeCkKKyNkZWZpbmUgX19SRUd3KHgpCSh4KQorI2RlZmluZSBfX1JFR2IoeCkJKHgpCisjZGVmaW5lIF9fUkVHMih4LCB5KQkoKHgpICsgKHkpKQorI2VuZGlmCisKKyNkZWZpbmUgRmxkKFNpemUsIFNoZnQpCSgoKFNpemUpIDw8IDE2KSArIChTaGZ0KSkKKworI2RlZmluZSBGU2l6ZShGaWVsZCkJKChGaWVsZCkgPj4gMTYpCisjZGVmaW5lIEZTaGZ0KEZpZWxkKQkoKEZpZWxkKSAmIDB4MDAwMEZGRkYpCisjZGVmaW5lIEZNc2soRmllbGQpCSgoKFVEYXRhICgxKSA8PCBGU2l6ZSAoRmllbGQpKSAtIDEpIDw8IEZTaGZ0IChGaWVsZCkpCisjZGVmaW5lIEZBbG5Nc2soRmllbGQpCSgoVURhdGEgKDEpIDw8IEZTaXplIChGaWVsZCkpIC0gMSkKKyNkZWZpbmUgRjFzdEJpdChGaWVsZCkJKFVEYXRhICgxKSA8PCBGU2hmdCAoRmllbGQpKQorCisjZGVmaW5lIEZDbHJCaXQoRGF0YSwgQml0KQkoRGF0YSA9IChEYXRhICYgfihCaXQpKSkKKyNkZWZpbmUgRkNsckZsZChEYXRhLCBGaWVsZCkJKERhdGEgPSAoRGF0YSAmIH5GTXNrKEZpZWxkKSkpCisKKyNkZWZpbmUgRkluc3J0KFZhbHVlLCBGaWVsZCkgXAorCQkJKFVEYXRhIChWYWx1ZSkgPDwgRlNoZnQgKEZpZWxkKSkKKworI2RlZmluZSBGRXh0cihEYXRhLCBGaWVsZCkgXAorCQkJKChVRGF0YSAoRGF0YSkgPj4gRlNoZnQgKEZpZWxkKSkgJiBGQWxuTXNrIChGaWVsZCkpCisKKyNlbmRpZiAvKiBfQVJDSF9IQVJEV0FSRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9mc2xfaTJjLmggYi9pbmNsdWRlL2FzbS1tNjhrL2ZzbF9pMmMuaAppbmRleCA0ZjcxMzQxLi4yYmM5YmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2ZzbF9pMmMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2ZzbF9pMmMuaApAQCAtNzIsMTUgKzcyLDYgQEAKICNkZWZpbmUgSTJDX0RSCQkweEZGCiAjZGVmaW5lIEkyQ19EUl9TSElGVAkwCiAjZGVmaW5lIEkyQ19EUl9SRVMJfihJMkNfRFIpCi0KLQl1OCBkZnNycjsJLyogSTJDIGRpZ2l0YWwgZmlsdGVyIHNhbXBsaW5nIHJhdGUgcmVnaXN0ZXIgKi8KLQl1OCByZXM1WzNdOwotI2RlZmluZSBJMkNfREZTUlIJMHgzRgotI2RlZmluZSBJMkNfREZTUlJfU0hJRlQJMAotI2RlZmluZSBJMkNfREZTUlJfUkVTCX4oSTJDX0RSKQotCi0JLyogRmlsbCBvdXQgdGhlIHJlc2VydmVkIGJsb2NrICovCi0JdTggcmVzNlsweEU4XTsKIH0gZnNsX2kyY190OwogCiAjZW5kaWYJLyogX0FTTV9JMkNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDIuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmM5YmM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoMi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9DUFVfU0gyX0hfCisjZGVmaW5lIF9BU01fQ1BVX1NIMl9IXworCisvKiBjYWNoZSBjb250cm9sICovCisjZGVmaW5lIENDUl9DQUNIRV9TVE9QCQkweDAwMDAwMDA4CisjZGVmaW5lIENDUl9DQUNIRV9FTkFCTEUJMHgwMDAwMDAwNQorI2RlZmluZSBDQ1JfQ0FDSEVfSUNJCQkweDAwMDAwMDA4CisKKyNkZWZpbmUgQ0FDSEVfT0NfQUREUkVTU19BUlJBWQkweGYwMDAwMDAwCisjZGVmaW5lIENBQ0hFX09DX1dBWV9TSElGVAkxMworI2RlZmluZSBDQUNIRV9PQ19OVU1fRU5UUklFUwkyNTYKKyNkZWZpbmUgQ0FDSEVfT0NfRU5UUllfU0hJRlQJNAorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINzIwMykKKyMgaW5jbHVkZSA8YXNtL2NwdV9zaDcyMDMuaD4KKyNlbHNlCisjIGVycm9yICJVbmtub3duIFNIMiB2YXJpYW50IgorI2VuZGlmCisKKyNlbmRpZgkvKiBfQVNNX0NQVV9TSDJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDQuaAppbmRleCA1YThhNWExLi5iNmNjNmNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHVfc2g0LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNC5oCkBAIC0zNSwxMCArMzUsMTQgQEAKICMgaW5jbHVkZSA8YXNtL2NwdV9zaDc3NTAuaD4KICNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfU0g3NzIyKQogIyBpbmNsdWRlIDxhc20vY3B1X3NoNzcyMi5oPgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9TSDc3MjMpCisjIGluY2x1ZGUgPGFzbS9jcHVfc2g3NzIzLmg+CiAjZWxpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1NINzc2MykKICMgaW5jbHVkZSA8YXNtL2NwdV9zaDc3NjMuaD4KICNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfU0g3NzgwKQogIyBpbmNsdWRlIDxhc20vY3B1X3NoNzc4MC5oPgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9TSDc3ODUpCisjIGluY2x1ZGUgPGFzbS9jcHVfc2g3Nzg1Lmg+CiAjZWxzZQogIyBlcnJvciAiVW5rbm93biBTSDQgdmFyaWFudCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzIwMy5oIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzIwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZGNhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHVfc2g3MjAzLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBfQVNNX0NQVV9TSDcyMDNfSF8KKyNkZWZpbmUgX0FTTV9DUFVfU0g3MjAzX0hfCisKKy8qIENhY2hlICovCisjZGVmaW5lIENDUjEJCTB4RkZGQzEwMDAKKyNkZWZpbmUgQ0NSCQkJQ0NSMQorCisvKiBQRkMgKi8KKyNkZWZpbmUgUEFDUgkJMHhBNDA1MDEwMAorI2RlZmluZSBQQkNSCQkweEE0MDUwMTAyCisjZGVmaW5lIFBDQ1IJCTB4QTQwNTAxMDQKKyNkZWZpbmUgUEVUQ1IJCTB4QTQwNTAxMDYKKworLyogUG9ydCBEYXRhIFJlZ2lzdGVycyAqLworI2RlZmluZSBQQURSCQkweEE0MDUwMTIwCisjZGVmaW5lIFBCRFIJCTB4QTQwNTAxMjIKKyNkZWZpbmUgUENEUgkJMHhBNDA1MDEyNAorCisvKiBCU0MgKi8KKworLyogU0RSQU0gY29udHJvbGxlciAqLworCisvKiBTQ0lGICovCisjZGVmaW5lIFNDU01SXzAJCTB4RkZGRTgwMDAKKyNkZWZpbmUgU0NJRjBfQkFTRQlTQ1NNUl8wCisKKy8qIFRpbWVyKENNVCkgKi8KKyNkZWZpbmUgQ01TVFIgCTB4RkZGRUMwMDAKKyNkZWZpbmUgQ01DU1JfMCAweEZGRkVDMDAyCisjZGVmaW5lIENNQ05UXzAgMHhGRkZFQzAwNAorI2RlZmluZSBDTUNPUl8wIDB4RkZGRUMwMDYKKyNkZWZpbmUgQ01DU1JfMSAweEZGRkVDMDA4CisjZGVmaW5lIENNQ05UXzEgMHhGRkZFQzAwQQorI2RlZmluZSBDTUNPUl8xCTB4RkZGRUMwMEMKKworLyogT24gY2hpcCBvc2NpbGxhdG9yIGNpcmN1aXRzICovCisjZGVmaW5lIEZSUUNSCQkweEE0MTVGRjgwCisjZGVmaW5lIFdUQ05UCQkweEE0MTVGRjg0CisjZGVmaW5lIFdUQ1NSCQkweEE0MTVGRjg2CisKKyNlbmRpZgkvKiBfQVNNX0NQVV9TSDcyMDNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDc3MjMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDc3MjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFjNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzcyMy5oCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogU0g3NzIzIEludGVybmFsIEkvTyByZWdpc3RlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX0NQVV9TSDc3MjNfSF8KKyNkZWZpbmUgX0FTTV9DUFVfU0g3NzIzX0hfCisKKyNkZWZpbmUgQ0FDSEVfT0NfTlVNX1dBWVMJNAorI2RlZmluZSBDQ1JfQ0FDSEVfSU5JVAkweDAwMDAwOTBkCisKKy8qIEVYUCAqLworI2RlZmluZSBUUkEJCTB4RkYwMDAwMjAKKyNkZWZpbmUgRVhQRVZUCTB4RkYwMDAwMjQKKyNkZWZpbmUgSU5URVZUCTB4RkYwMDAwMjgKKworLyogTU1VICovCisjZGVmaW5lIFBURUgJMHhGRjAwMDAwMAorI2RlZmluZSBQVEVMCTB4RkYwMDAwMDQKKyNkZWZpbmUgVFRCCQkweEZGMDAwMDA4CisjZGVmaW5lIFRFQQkJMHhGRjAwMDAwQworI2RlZmluZSBNTVVDUgkweEZGMDAwMDEwCisjZGVmaW5lIFBBU0NSCTB4RkYwMDAwNzAKKyNkZWZpbmUgSVJNQ1IJMHhGRjAwMDA3OAorCisvKiBDQUNIRSAqLworI2RlZmluZSBDQ1IJCTB4RkYwMDAwMUMKKyNkZWZpbmUgUkFNQ1IJMHhGRjAwMDA3NAorCisvKiBJTlRDICovCisKKy8qIEJTQyAqLworI2RlZmluZSBDTU5DUgkJMHhGRUMxMDAwMAorI2RlZmluZQlDUzBCQ1IJCTB4RkVDMTAwMDQKKyNkZWZpbmUgQ1MyQkNSCQkweEZFQzEwMDA4CisjZGVmaW5lIENTNEJDUgkJMHhGRUMxMDAxMAorI2RlZmluZSBDUzVBQkNSCQkweEZFQzEwMDE0CisjZGVmaW5lIENTNUJCQ1IJCTB4RkVDMTAwMTgKKyNkZWZpbmUgQ1M2QUJDUgkJMHhGRUMxMDAxQworI2RlZmluZSBDUzZCQkNSCQkweEZFQzEwMDIwCisjZGVmaW5lIENTMFdDUgkJMHhGRUMxMDAyNAorI2RlZmluZSBDUzJXQ1IJCTB4RkVDMTAwMjgKKyNkZWZpbmUgQ1M0V0NSCQkweEZFQzEwMDMwCisjZGVmaW5lIENTNUFXQ1IJCTB4RkVDMTAwMzQKKyNkZWZpbmUgQ1M1QldDUgkJMHhGRUMxMDAzOAorI2RlZmluZSBDUzZBV0NSCQkweEZFQzEwMDNDCisjZGVmaW5lIENTNkJXQ1IJCTB4RkVDMTAwNDAKKyNkZWZpbmUgUkJXVENOVAkJMHhGRUMxMDA1NAorCisvKiBTQlNDICovCisjZGVmaW5lIFNCU0NfU0RDUgkweEZFNDAwMDA4CisjZGVmaW5lIFNCU0NfU0RXQ1IJMHhGRTQwMDAwQworI2RlZmluZSBTQlNDX1NEUENSCTB4RkU0MDAwMTAKKyNkZWZpbmUgU0JTQ19SVENTUgkweEZFNDAwMDE0CisjZGVmaW5lIFNCU0NfUlRDTlQJMHhGRTQwMDAxOAorI2RlZmluZSBTQlNDX1JUQ09SCTB4RkU0MDAwMUMKKyNkZWZpbmUgU0JTQ19SRkNSCTB4RkU0MDAwMjAKKworLyogRE1BQyAqLworCisvKiBDUEcgKi8KKyNkZWZpbmUgRlJRQ1IgICAgICAgMHhBNDE1MDAwMAorI2RlZmluZSBWQ0xLQ1IgICAgICAweEE0MTUwMDA0CisjZGVmaW5lIFNDTEtBQ1IgICAgIDB4QTQxNTAwMDgKKyNkZWZpbmUgU0NMS0JDUiAgICAgMHhBNDE1MDAwQworI2RlZmluZSBJUkRBQ0xLQ1IgICAweEE0MTUwMDE4CisjZGVmaW5lIFBMTENSICAgICAgIDB4QTQxNTAwMjQKKyNkZWZpbmUgRExMRlJRICAgICAgMHhBNDE1MDA1MAorCisvKiBMT1cgUE9XRVIgTU9ERSAqLworI2RlZmluZSBTVEJDUiAgICAgICAweEE0MTUwMDIwCisjZGVmaW5lIE1TVFBDUjAgICAgIDB4QTQxNTAwMzAKKyNkZWZpbmUgTVNUUENSMSAgICAgMHhBNDE1MDAzNAorI2RlZmluZSBNU1RQQ1IyICAgICAweEE0MTUwMDM4CisKKy8qIFJXRFQgKi8KKyNkZWZpbmUgUldUQ05UICAgICAgMHhBNDUyMDAwMAorI2RlZmluZSBSV1RDU1IgICAgICAweEE0NTIwMDA0CisjZGVmaW5lIFdUQ05UCQlSV1RDTlQKKworLyogVE1VICovCisjZGVmaW5lIFRTVFIgICAgICAgIDB4RkZEODAwMDQKKyNkZWZpbmUgVENPUjAgICAgICAgMHhGRkQ4MDAwOAorI2RlZmluZSBUQ05UMCAgICAgICAweEZGRDgwMDBDCisjZGVmaW5lIFRDUjAgICAgICAgIDB4RkZEODAwMTAKKyNkZWZpbmUgVENPUjEgICAgICAgMHhGRkQ4MDAxNAorI2RlZmluZSBUQ05UMSAgICAgICAweEZGRDgwMDE4CisjZGVmaW5lIFRDUjEgICAgICAgIDB4RkZEODAwMUMKKyNkZWZpbmUgVENPUjIgICAgICAgMHhGRkQ4MDAyMAorI2RlZmluZSBUQ05UMiAgICAgICAweEZGRDgwMDI0CisjZGVmaW5lIFRDUjIgICAgICAgIDB4RkZEODAwMjgKKworLyogVFBVICovCisKKy8qIENNVCAqLworI2RlZmluZSBDTVNUUiAgICAgICAweEE0NEEwMDAwCisjZGVmaW5lIENNQ1NSICAgICAgIDB4QTQ0QTAwNjAKKyNkZWZpbmUgQ01DTlQgICAgICAgMHhBNDRBMDA2NAorI2RlZmluZSBDTUNPUiAgICAgICAweEE0NEEwMDY4CisKKy8qIE1TSU9GICovCisKKy8qIFNDSUYgKi8KKyNkZWZpbmUgU0NJRjBfQkFTRSAgMHhGRkUwMDAwMAorI2RlZmluZSBTQ0lGMV9CQVNFICAweEZGRTEwMDAwCisjZGVmaW5lIFNDSUYyX0JBU0UgIDB4RkZFMjAwMDAKKyNkZWZpbmUgU0NJRjNfQkFTRSAgMHhhNGUzMDAwMAorI2RlZmluZSBTQ0lGNF9CQVNFICAweGE0ZTQwMDAwCisjZGVmaW5lIFNDSUY1X0JBU0UgIDB4YTRlNTAwMDAKKworLyogUlRDICovCisvKiBJckRBICovCisvKiBLRVlTQyAqLworLyogVVNCICovCisvKiBJSUMgKi8KKy8qIEZMQ1RMICovCisvKiBWUFUgKi8KKy8qIFZJTyhDRVUpICovCisvKiBWSU8oVkVVKSAqLworLyogVklPKEJFVSkgKi8KKy8qIDJERyAqLworLyogTENEQyAqLworLyogVk9VICovCisvKiBUU0lGICovCisvKiBTSVUgKi8KKy8qIEFUQVBJICovCisKKy8qIFBGQyAqLworI2RlZmluZSBQQUNSICAgICAgICAweEE0MDUwMTAwCisjZGVmaW5lIFBCQ1IgICAgICAgIDB4QTQwNTAxMDIKKyNkZWZpbmUgUENDUiAgICAgICAgMHhBNDA1MDEwNAorI2RlZmluZSBQRENSICAgICAgICAweEE0MDUwMTA2CisjZGVmaW5lIFBFQ1IgICAgICAgIDB4QTQwNTAxMDgKKyNkZWZpbmUgUEZDUiAgICAgICAgMHhBNDA1MDEwQQorI2RlZmluZSBQR0NSICAgICAgICAweEE0MDUwMTBDCisjZGVmaW5lIFBIQ1IgICAgICAgIDB4QTQwNTAxMEUKKyNkZWZpbmUgUEpDUiAgICAgICAgMHhBNDA1MDExMAorI2RlZmluZSBQS0NSICAgICAgICAweEE0MDUwMTEyCisjZGVmaW5lIFBMQ1IgICAgICAgIDB4QTQwNTAxMTQKKyNkZWZpbmUgUE1DUiAgICAgICAgMHhBNDA1MDExNgorI2RlZmluZSBQTkNSICAgICAgICAweEE0MDUwMTE4CisjZGVmaW5lIFBRQ1IgICAgICAgIDB4QTQwNTAxMUEKKyNkZWZpbmUgUFJDUiAgICAgICAgMHhBNDA1MDExQworI2RlZmluZSBQU0NSICAgICAgICAweEE0MDUwMTFFCisjZGVmaW5lIFBUQ1IgICAgICAgIDB4QTQwNTAxNDAKKyNkZWZpbmUgUFVDUiAgICAgICAgMHhBNDA1MDE0MgorI2RlZmluZSBQVkNSICAgICAgICAweEE0MDUwMTQ0CisjZGVmaW5lIFBXQ1IgICAgICAgIDB4QTQwNTAxNDYKKyNkZWZpbmUgUFhDUiAgICAgICAgMHhBNDA1MDE0OAorI2RlZmluZSBQWUNSICAgICAgICAweEE0MDUwMTRBCisjZGVmaW5lIFBaQ1IgICAgICAgIDB4QTQwNTAxNEMKKyNkZWZpbmUgUFNFTEEgICAgICAgMHhBNDA1MDE0RQorI2RlZmluZSBQU0VMQiAgICAgICAweEE0MDUwMTUwCisjZGVmaW5lIFBTRUxDICAgICAgIDB4QTQwNTAxNTIKKyNkZWZpbmUgUFNFTEQgICAgICAgMHhBNDA1MDE1NAorI2RlZmluZSBISVpDUkEgICAgICAweEE0MDUwMTU4CisjZGVmaW5lIEhJWkNSQiAgICAgIDB4QTQwNTAxNUEKKyNkZWZpbmUgSElaQ1JDICAgICAgMHhBNDA1MDE1QworI2RlZmluZSBISVpDUkQgICAgICAweEE0MDUwMTVFCisjZGVmaW5lIE1TRUxDUkEgICAgIDB4QTQwNTAxODAKKyNkZWZpbmUgTVNFTENSQiAgICAgMHhBNDA1MDE4MgorI2RlZmluZSBQVUxDUiAgICAgICAweEE0MDUwMTg0CisjZGVmaW5lIERSVkNSQSAgICAgIDB4QTQwNTAxOEEKKyNkZWZpbmUgRFJWQ1JCICAgICAgMHhBNDA1MDE4QworCisvKiBJL08gUG9ydCAqLworI2RlZmluZSBQQURSICAgICAgICAweEE0MDUwMTIwCisjZGVmaW5lIFBCRFIgICAgICAgIDB4QTQwNTAxMjIKKyNkZWZpbmUgUENEUiAgICAgICAgMHhBNDA1MDEyNAorI2RlZmluZSBQRERSICAgICAgICAweEE0MDUwMTI2CisjZGVmaW5lIFBFRFIgICAgICAgIDB4QTQwNTAxMjgKKyNkZWZpbmUgUEZEUiAgICAgICAgMHhBNDA1MDEyQQorI2RlZmluZSBQR0RSICAgICAgICAweEE0MDUwMTJDCisjZGVmaW5lIFBIRFIgICAgICAgIDB4QTQwNTAxMkUKKyNkZWZpbmUgUEpEUiAgICAgICAgMHhBNDA1MDEzMAorI2RlZmluZSBQS0RSICAgICAgICAweEE0MDUwMTMyCisjZGVmaW5lIFBMRFIgICAgICAgIDB4QTQwNTAxMzQKKyNkZWZpbmUgUE1EUiAgICAgICAgMHhBNDA1MDEzNgorI2RlZmluZSBQTkRSICAgICAgICAweEE0MDUwMTM4CisjZGVmaW5lIFBRRFIgICAgICAgIDB4QTQwNTAxM0EKKyNkZWZpbmUgUFJEUiAgICAgICAgMHhBNDA1MDEzQworI2RlZmluZSBQU0RSICAgICAgICAweEE0MDUwMTNFCisjZGVmaW5lIFBURFIgICAgICAgIDB4QTQwNTAxNjAKKyNkZWZpbmUgUFVEUiAgICAgICAgMHhBNDA1MDE2MgorI2RlZmluZSBQVkRSICAgICAgICAweEE0MDUwMTY0CisjZGVmaW5lIFBXRFIgICAgICAgIDB4QTQwNTAxNjYKKyNkZWZpbmUgUFlEUiAgICAgICAgMHhBNDA1MDE2OAorI2RlZmluZSBQWkRSICAgICAgICAweEE0MDUwMTZBCisKKy8qIFVCQyAqLworLyogSC1VREkgKi8KKworI2VuZGlmIC8qIF9BU01fQ1BVX1NINzcyM19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzc4NS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzc4NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNGRmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHVfc2g3Nzg1LmgKQEAgLTAsMCArMSwxNTYgQEAKKyNpZm5kZWYJX0FTTV9DUFVfU0g3Nzg1X0hfCisjZGVmaW5lCV9BU01fQ1BVX1NINzc4NV9IXworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA4IFl1c3VrZSBHb2RhIDxnb2RhLnl1c3VrZUByZW5lc2FzLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBZb3NoaWhpcm8gU2hpbW9kYSA8c2hpbW9kYS55b3NoaWhpcm9AcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNkZWZpbmUJQ0FDSEVfT0NfTlVNX1dBWVMJMQorI2RlZmluZQlDQ1JfQ0FDSEVfSU5JVAkJMHgwMDAwMDkwYgorCisvKglFeGNlcHRpb25zCSovCisjZGVmaW5lCVRSQQkJMHhGRjAwMDAyMAorI2RlZmluZQlFWFBFVlQJMHhGRjAwMDAyNAorI2RlZmluZQlJTlRFVlQJMHhGRjAwMDAyOAorCisvKiBDYWNoZSBDb250cm9sbGVyICovCisjZGVmaW5lCUNDUgkweEZGMDAwMDFDCisjZGVmaW5lCVFBQ1IwCTB4RkYwMDAwMzgKKyNkZWZpbmUJUUFDUjEJMHhGRjAwMDAzQworI2RlZmluZQlSQU1DUgkweEZGMDAwMDc0CisKKy8qIFdhdGNoZG9nIFRpbWVyIGFuZCBSZXNldCAqLworI2RlZmluZQlXVENOVAlXRFRDTlQKKyNkZWZpbmUJV0RUU1QJMHhGRkNDMDAwMAorI2RlZmluZQlXRFRDU1IJMHhGRkNDMDAwNAorI2RlZmluZQlXRFRCU1QJMHhGRkNDMDAwOAorI2RlZmluZQlXRFRDTlQJMHhGRkNDMDAxMAorI2RlZmluZQlXRFRCQ05UCTB4RkZDQzAwMTgKKworLyogVGltZXIgVW5pdCAqLworI2RlZmluZQlUU1RSCVRTVFIwCisjZGVmaW5lCVRPQ1IJMHhGRkQ4MDAwMAorI2RlZmluZQlUU1RSMAkweEZGRDgwMDA0CisjZGVmaW5lCVRDT1IwCTB4RkZEODAwMDgKKyNkZWZpbmUJVENOVDAJMHhGRkQ4MDAwQworI2RlZmluZQlUQ1IwCTB4RkZEODAwMTAKKyNkZWZpbmUJVENPUjEJMHhGRkQ4MDAxNAorI2RlZmluZQlUQ05UMQkweEZGRDgwMDE4CisjZGVmaW5lCVRDUjEJMHhGRkQ4MDAxQworI2RlZmluZQlUQ09SMgkweEZGRDgwMDIwCisjZGVmaW5lCVRDTlQyCTB4RkZEODAwMjQKKyNkZWZpbmUJVENSMgkweEZGRDgwMDI4CisjZGVmaW5lCVRDUFIyCTB4RkZEODAwMkMKKyNkZWZpbmUJVFNUUjEJMHhGRkRDMDAwNAorI2RlZmluZQlUQ09SMwkweEZGREMwMDA4CisjZGVmaW5lCVRDTlQzCTB4RkZEQzAwMEMKKyNkZWZpbmUJVENSMwkweEZGREMwMDEwCisjZGVmaW5lCVRDT1I0CTB4RkZEQzAwMTQKKyNkZWZpbmUJVENOVDQJMHhGRkRDMDAxOAorI2RlZmluZQlUQ1I0CTB4RkZEQzAwMUMKKyNkZWZpbmUJVENPUjUJMHhGRkRDMDAyMAorI2RlZmluZQlUQ05UNQkweEZGREMwMDI0CisjZGVmaW5lCVRDUjUJMHhGRkRDMDAyOAorCisvKiBTZXJpYWwgQ29tbXVuaWNhdGlvbglJbnRlcmZhY2Ugd2l0aCBGSUZPICovCisjZGVmaW5lCVNDSUYxX0JBU0UJMHhmZmViMDAwMAorCisvKiBMQlNDICovCisjZGVmaW5lIE1NU0VMUgkJMHhmYzQwMDAyMAorI2RlZmluZSBMQlNDX0JBU0UJMHhmZjgwMDAwMAorI2RlZmluZSBCQ1IJCShMQlNDX0JBU0UgKyAweDEwMDApCisjZGVmaW5lIENTMEJDUgkJKExCU0NfQkFTRSArIDB4MjAwMCkKKyNkZWZpbmUgQ1MxQkNSCQkoTEJTQ19CQVNFICsgMHgyMDEwKQorI2RlZmluZSBDUzJCQ1IJCShMQlNDX0JBU0UgKyAweDIwMjApCisjZGVmaW5lIENTM0JDUgkJKExCU0NfQkFTRSArIDB4MjAzMCkKKyNkZWZpbmUgQ1M0QkNSCQkoTEJTQ19CQVNFICsgMHgyMDQwKQorI2RlZmluZSBDUzVCQ1IJCShMQlNDX0JBU0UgKyAweDIwNTApCisjZGVmaW5lIENTNkJDUgkJKExCU0NfQkFTRSArIDB4MjA2MCkKKyNkZWZpbmUgQ1MwV0NSCQkoTEJTQ19CQVNFICsgMHgyMDA4KQorI2RlZmluZSBDUzFXQ1IJCShMQlNDX0JBU0UgKyAweDIwMTgpCisjZGVmaW5lIENTMldDUgkJKExCU0NfQkFTRSArIDB4MjAyOCkKKyNkZWZpbmUgQ1MzV0NSCQkoTEJTQ19CQVNFICsgMHgyMDM4KQorI2RlZmluZSBDUzRXQ1IJCShMQlNDX0JBU0UgKyAweDIwNDgpCisjZGVmaW5lIENTNVdDUgkJKExCU0NfQkFTRSArIDB4MjA1OCkKKyNkZWZpbmUgQ1M2V0NSCQkoTEJTQ19CQVNFICsgMHgyMDY4KQorI2RlZmluZSBDUzVQQ1IJCShMQlNDX0JBU0UgKyAweDIwNzApCisjZGVmaW5lIENTNlBDUgkJKExCU0NfQkFTRSArIDB4MjA4MCkKKworLyogUENJCUNvbnRyb2xsZXIgKi8KKyNkZWZpbmUJU0g3NzgwX1BDSUVDUgkJMHhGRTAwMDAwOAorI2RlZmluZQlTSDc3ODBfUENJVklECQkweEZFMDQwMDAwCisjZGVmaW5lCVNINzc4MF9QQ0lESUQJCTB4RkUwNDAwMDIKKyNkZWZpbmUJU0g3NzgwX1BDSUNNRAkJMHhGRTA0MDAwNAorI2RlZmluZQlTSDc3ODBfUENJU1RBVFVTCTB4RkUwNDAwMDYKKyNkZWZpbmUJU0g3NzgwX1BDSVJJRAkJMHhGRTA0MDAwOAorI2RlZmluZQlTSDc3ODBfUENJUElGCQkweEZFMDQwMDA5CisjZGVmaW5lCVNINzc4MF9QQ0lTVUIJCTB4RkUwNDAwMEEKKyNkZWZpbmUJU0g3NzgwX1BDSUJDQwkJMHhGRTA0MDAwQgorI2RlZmluZQlTSDc3ODBfUENJQ0xTCQkweEZFMDQwMDBDCisjZGVmaW5lCVNINzc4MF9QQ0lMVE0JCTB4RkUwNDAwMEQKKyNkZWZpbmUJU0g3NzgwX1BDSUhEUgkJMHhGRTA0MDAwRQorI2RlZmluZQlTSDc3ODBfUENJQklTVAkJMHhGRTA0MDAwRgorI2RlZmluZQlTSDc3ODBfUENJSUJBUgkJMHhGRTA0MDAxMAorI2RlZmluZQlTSDc3ODBfUENJTUJBUjAJCTB4RkUwNDAwMTQKKyNkZWZpbmUJU0g3NzgwX1BDSU1CQVIxCQkweEZFMDQwMDE4CisjZGVmaW5lCVNINzc4MF9QQ0lTVklECQkweEZFMDQwMDJDCisjZGVmaW5lCVNINzc4MF9QQ0lTSUQJCTB4RkUwNDAwMkUKKyNkZWZpbmUJU0g3NzgwX1BDSUNQCQkweEZFMDQwMDM0CisjZGVmaW5lCVNINzc4MF9QQ0lJTlRMSU5FCTB4RkUwNDAwM0MKKyNkZWZpbmUJU0g3NzgwX1BDSUlOVFBJTgkweEZFMDQwMDNECisjZGVmaW5lCVNINzc4MF9QQ0lNSU5HTlQJMHhGRTA0MDAzRQorI2RlZmluZQlTSDc3ODBfUENJTUFYTEFUCTB4RkUwNDAwM0YKKyNkZWZpbmUJU0g3NzgwX1BDSUNJRAkJMHhGRTA0MDA0MAorI2RlZmluZQlTSDc3ODBfUENJTklQCQkweEZFMDQwMDQxCisjZGVmaW5lCVNINzc4MF9QQ0lQTUMJCTB4RkUwNDAwNDIKKyNkZWZpbmUJU0g3NzgwX1BDSVBNQ1NSCQkweEZFMDQwMDQ0CisjZGVmaW5lCVNINzc4MF9QQ0lQTUNTUkJTRQkweEZFMDQwMDQ2CisjZGVmaW5lCVNINzc4MF9QQ0lfQ0RECQkweEZFMDQwMDQ3CisjZGVmaW5lCVNINzc4MF9QQ0lDUgkJMHhGRTA0MDEwMAorI2RlZmluZQlTSDc3ODBfUENJTFNSMAkJMHhGRTA0MDEwNAorI2RlZmluZQlTSDc3ODBfUENJTFNSMQkJMHhGRTA0MDEwOAorI2RlZmluZQlTSDc3ODBfUENJTEFSMAkJMHhGRTA0MDEwQworI2RlZmluZQlTSDc3ODBfUENJTEFSMQkJMHhGRTA0MDExMAorI2RlZmluZQlTSDc3ODBfUENJSVIJCTB4RkUwNDAxMTQKKyNkZWZpbmUJU0g3NzgwX1BDSUlNUgkJMHhGRTA0MDExOAorI2RlZmluZQlTSDc3ODBfUENJQUlSCQkweEZFMDQwMTFDCisjZGVmaW5lCVNINzc4MF9QQ0lDSVIJCTB4RkUwNDAxMjAKKyNkZWZpbmUJU0g3NzgwX1BDSUFJTlQJCTB4RkUwNDAxMzAKKyNkZWZpbmUJU0g3NzgwX1BDSUFJTlRNCQkweEZFMDQwMTM0CisjZGVmaW5lCVNINzc4MF9QQ0lCTUlSCQkweEZFMDQwMTM4CisjZGVmaW5lCVNINzc4MF9QQ0lQQVIJCTB4RkUwNDAxQzAKKyNkZWZpbmUJU0g3NzgwX1BDSVBJTlQJCTB4RkUwNDAxQ0MKKyNkZWZpbmUJU0g3NzgwX1BDSVBJTlRNCQkweEZFMDQwMUQwCisjZGVmaW5lCVNINzc4MF9QQ0lNQlIwCQkweEZFMDQwMUUwCisjZGVmaW5lCVNINzc4MF9QQ0lNQk1SMAkJMHhGRTA0MDFFNAorI2RlZmluZQlTSDc3ODBfUENJTUJSMQkJMHhGRTA0MDFFOAorI2RlZmluZQlTSDc3ODBfUENJTUJNUjEJCTB4RkUwNDAxRUMKKyNkZWZpbmUJU0g3NzgwX1BDSU1CUjIJCTB4RkUwNDAxRjAKKyNkZWZpbmUJU0g3NzgwX1BDSU1CTVIyCQkweEZFMDQwMUY0CisjZGVmaW5lCVNINzc4MF9QQ0lJT0JSCQkweEZFMDQwMUY4CisjZGVmaW5lCVNINzc4MF9QQ0lJT0JNUgkJMHhGRTA0MDFGQworI2RlZmluZQlTSDc3ODBfUENJQ1NDUjAJCTB4RkUwNDAyMTAKKyNkZWZpbmUJU0g3NzgwX1BDSUNTQ1IxCQkweEZFMDQwMjE0CisjZGVmaW5lCVNINzc4MF9QQ0lDU0FSMAkJMHhGRTA0MDIxOAorI2RlZmluZQlTSDc3ODBfUENJQ1NBUjEJCTB4RkUwNDAyMUMKKyNkZWZpbmUJU0g3NzgwX1BDSVBEUgkJMHhGRTA0MDIyMAorCisjZW5kaWYJLyogX0FTTV9DUFVfU0g3NzgwX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCmluZGV4IDM4OGFhNjkuLjkzOGE4OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCkBAIC0xLDYgKzEsOSBAQAogI2lmbmRlZiBfQVNNX1NIX1BST0NFU1NPUl9IXwogI2RlZmluZSBfQVNNX1NIX1BST0NFU1NPUl9IXwotI2lmIGRlZmluZWQgQ09ORklHX1NIMworI2lmIGRlZmluZWQoQ09ORklHX1NIMikgfHwgXAorCWRlZmluZWQgKENPTkZJR19TSDJBKQorIyBpbmNsdWRlIDxhc20vY3B1X3NoMi5oPgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX1NIMykKICMgaW5jbHVkZSA8YXNtL2NwdV9zaDMuaD4KICNlbGlmIGRlZmluZWQgKENPTkZJR19TSDQpIHx8IFwKIAlkZWZpbmVkIChDT05GSUdfU0g0QSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IGRlM2Q1OTUuLmEzOTQ5ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtNDkwLDcgKzQ5MCw4IEBACiB1bG9uZwlnZXRfT1BCX2ZyZXEgKHZvaWQpOwogdWxvbmcJZ2V0X1BDSV9mcmVxICh2b2lkKTsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1MzQzI0MTApIHx8IGRlZmluZWQoQ09ORklHX0xIN0E0MFgpCisjaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX0xIN0E0MFgpIHx8IGRlZmluZWQoQ09ORklHX1MzQzY0MDApCiB2b2lkCXMzYzI0MTBfaXJxKHZvaWQpOwogI2RlZmluZSBBUk05MjBfSVJRX0NBTExCQUNLIHMzYzI0MTBfaXJxCiB1bG9uZwlnZXRfRkNMSyAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTTUyMzVFVkIuaCBiL2luY2x1ZGUvY29uZmlncy9NNTIzNUVWQi5oCmluZGV4IGU4MzYxMzIuLmIzMmVhYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NNTIzNUVWQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NNTIzNUVWQi5oCkBAIC0xMDIsMTIgKzEwMiwxNSBAQAogCiAvKiBJMkMgKi8KICNkZWZpbmUgQ09ORklHX0ZTTF9JMkMKLSNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCQkJLyogSTJDIHdpdGggaHcgc3VwcG9ydCAqLwotI3VuZGVmIENPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkICovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJLyogSTJDIHdpdGggaHcgc3VwcG9ydCAqLworI3VuZGVmIENPTkZJR19TT0ZUX0kyQwkJLyogSTJDIGJpdC1iYW5nZWQgKi8KICNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJODAwMDAKICNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgogI2RlZmluZSBDRkdfSTJDX09GRlNFVAkJMHgwMDAwMDMwMAogI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX01CQVIKKyNkZWZpbmUgQ0ZHX0kyQ19QSU5NVVhfUkVHCShncGlvLT5wYXJfcXNwaSkKKyNkZWZpbmUgQ0ZHX0kyQ19QSU5NVVhfQ0xSCX4oR1BJT19QQVJfRkVDSTJDX1NDTF9NQVNLIHwgR1BJT19QQVJfRkVDSTJDX1NEQV9NQVNLKQorI2RlZmluZSBDRkdfSTJDX1BJTk1VWF9TRVQJKEdQSU9fUEFSX0ZFQ0kyQ19TQ0xfSTJDU0NMIHwgR1BJT19QQVJfRkVDSTJDX1NEQV9JMkNTREEpCiAKIC8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkxCS8qIGF1dG9ib290IGFmdGVyIDUgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001MjQ5RVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNDlFVkIuaAppbmRleCBjMmY1ZGQ5Li42YmYyZDk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTUyNDlFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNDlFVkIuaApAQCAtNDEsOCArNDEsOCBAQAogCiAjZGVmaW5lIENPTkZJR19NQ0ZVQVJUCiAjZGVmaW5lIENGR19VQVJUX1BPUlQJCSgwKQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTE5MjAwCi0jZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSB7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CiAKICN1bmRlZiAgQ09ORklHX1dBVENIRE9HCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTI1M0RFTU8uaCBiL2luY2x1ZGUvY29uZmlncy9NNTI1M0RFTU8uaAppbmRleCBmMmMyMzE3Li45Zjc4ZjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTUyNTNERU1PLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001MjUzREVNTy5oCkBAIC0xMTgsNiArMTE4LDE3IEBACiAKICNkZWZpbmUgQ09ORklHX0hPU1ROQU1FCQlNNTI1M0RFTU8KIAorLyogSTJDICovCisjZGVmaW5lIENPTkZJR19GU0xfSTJDCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJLyogSTJDIHdpdGggaHcgc3VwcG9ydCAqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk4MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCisjZGVmaW5lIENGR19JMkNfT0ZGU0VUCQkweDAwMDAwMjgwCisjZGVmaW5lIENGR19JTU1SCQlDRkdfTUJBUgorI2RlZmluZSBDRkdfSTJDX1BJTk1VWF9SRUcJKCoodTMyICopIChDRkdfTUJBUisweDE5QykpCisjZGVmaW5lIENGR19JMkNfUElOTVVYX0NMUgkoMHhGRkZGRTdGRikKKyNkZWZpbmUgQ0ZHX0kyQ19QSU5NVVhfU0VUCSgwKQorCiAjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCiAjZGVmaW5lIENGR19MT05HSEVMUAkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001MjcxRVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNzFFVkIuaAppbmRleCAxMmY5NzgzLi43OGExYjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTUyNzFFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNzFFVkIuaApAQCAtNDIsNyArNDIsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NQ0ZVQVJUCiAjZGVmaW5lIENGR19VQVJUX1BPUlQJCSgwKQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTE5MjAwCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CiAKICN1bmRlZiBDT05GSUdfV0FUQ0hET0cJCS8qIGRpc2FibGUgd2F0Y2hkb2cgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTI3MkMzLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNzJDMy5oCmluZGV4IDdlZGQzMjIuLmZjNDU3ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NNTI3MkMzLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001MjcyQzMuaApAQCAtNDAsOCArNDAsOCBAQAogCiAjZGVmaW5lIENPTkZJR19NQ0ZVQVJUCiAjZGVmaW5lIENGR19VQVJUX1BPUlQJCSgwKQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTE5MjAwCi0jZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSB7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CiAKICN1bmRlZiBDT05GSUdfV0FUQ0hET0cKICNkZWZpbmUgQ09ORklHX1dBVENIRE9HX1RJTUVPVVQgMTAwMDAJLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KQEAgLTkxLDYgKzkxLDcgQEAKICNpZmRlZiBDT05GSUdfTUNGRkVDCiAjCWRlZmluZSBDT05GSUdfTkVUX01VTFRJCQkxCiAjCWRlZmluZSBDT05GSUdfTUlJCQkxCisjCWRlZmluZSBDT05GSUdfTUlJX0lOSVQJCTEKICMJZGVmaW5lIENGR19ESVNDT1ZFUl9QSFkKICMJZGVmaW5lIENGR19SWF9FVEhfQlVGRkVSCTgKICMJZGVmaW5lIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001Mjc1RVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNzVFVkIuaAppbmRleCAzMGM3MGU1Li40MzBhZjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTTUyNzVFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTUyNzVFVkIuaApAQCAtNDUsNyArNDUsNyBAQAogCiAjZGVmaW5lIENPTkZJR19NQ0ZVQVJUCiAjZGVmaW5lIENGR19VQVJUX1BPUlQJCSgwKQotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTE5MjAwCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CiAKIC8qIENvbmZpZ3VyYXRpb24gZm9yIGVudmlyb25tZW50CkBAIC0xMTgsNiArMTE4LDkgQEAKICNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgogI2RlZmluZSBDRkdfSTJDX09GRlNFVAkJMHgwMDAwMDMwMAogI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX01CQVIKKyNkZWZpbmUgQ0ZHX0kyQ19QSU5NVVhfUkVHCShncGlvX3JlZy0+cGFyX2ZlY2kyYykKKyNkZWZpbmUgQ0ZHX0kyQ19QSU5NVVhfQ0xSCSgweEZGRjApCisjZGVmaW5lIENGR19JMkNfUElOTVVYX1NFVAkoMHgwMDBGKQogCiAjaWZkZWYgQ09ORklHX01DRkZFQwogI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6MDY6M2I6MDE6NDE6NTUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTI4MkVWQi5oIGIvaW5jbHVkZS9jb25maWdzL001MjgyRVZCLmgKaW5kZXggMjc5YTEyYi4uZWI1OWMyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL001MjgyRVZCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001MjgyRVZCLmgKQEAgLTQwLDggKzQwLDggQEAKIAogI2RlZmluZSBDT05GSUdfTUNGVUFSVAogI2RlZmluZSBDRkdfVUFSVF9QT1JUCQkoMCkKLSNkZWZpbmUgQ09ORklHX0JBVURSQVRFIDE5MjAwCi0jZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSB7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAgLCAxOTIwMCAsIDM4NDAwICwgNTc2MDAsIDExNTIwMCB9CiAKICN1bmRlZglDT05GSUdfTU9OSVRPUl9JU19JTl9SQU0JLyogZGVmaW5lIGlmIG1vbml0b3IgaXMgc3RhcnRlZCBmcm9tIGEgcHJlLWxvYWRlciAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTTU0NDUxRVZCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NDUxRVZCLmgKaW5kZXggNTg4YzAwYy4uY2Y1ODIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL001NDQ1MUVWQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NNTQ0NTFFVkIuaApAQCAtMTQwLDkgKzE0MCw4IEBACiAJInUtYm9vdD11LWJvb3QuYmluXDAiCQkJXAogCSJsb2FkPXRmdHAgJHtsb2FkYWRkcikgJHt1LWJvb3R9XDAiCVwKIAkidXBkPXJ1biBsb2FkOyBydW4gcHJvZ1wwIgkJXAotCSJwcm9nPXByb3Qgb2ZmIDAgIiBNS19TVFIoQ0ZHX1VCT09UX0VORClcCi0JIjsgZXJhIDAgIiBNS19TVFIoQ0ZHX1VCT09UX0VORCkJXAotCSIyZmZmZjsiCQkJCVwKKwkicHJvZz1wcm90IG9mZiAwICIgTUtfU1RSKENGR19VQk9PVF9FTkQpCVwKKwkiOyBlcmEgMCAiIE1LX1NUUihDRkdfVUJPT1RfRU5EKSAiIDsiCVwKIAkiY3AuYiAke2xvYWRhZGRyfSAwICR7ZmlsZXNpemV9OyIJXAogCSJzYXZlXDAiCQkJCVwKIAkiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL001NDQ1NUVWQi5oIGIvaW5jbHVkZS9jb25maWdzL001NDQ1NUVWQi5oCmluZGV4IDQ3NmFiYTMuLmFkOWMxNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NNTQ0NTVFVkIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTTU0NDU1RVZCLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSIgIiBNS19TVFIoQ0ZHX1VCT09UX0VORCkgIjsiCQlcCiAJImVyYSAiIE1LX1NUUihDRkdfRkxBU0hfQkFTRSkgIiAiCVwKIAlNS19TVFIoQ0ZHX1VCT09UX0VORCkgIjsiCQlcCi0JImNwLmIgJHtsb2FkYWRkcn0gIiBNS19TVFIoQ0ZHX0ZMQVNIX0JBU0UpXAorCSJjcC5iICR7bG9hZGFkZHJ9ICIgTUtfU1RSKENGR19GTEFTSF9CQVNFKQlcCiAJIiAke2ZpbGVzaXplfTsgc2F2ZVwwIgkJCVwKIAkiIgogI2VuZGlmCkBAIC0zODgsOSArMzg4LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04JCS8qICJSZWFsIiAoaGFyZHdhcmUpIHNlY3RvcnMgcHJvdGVjdGlvbiAqLwotI2RlZmluZSBDRkdfRkxBU0hfQ0hFQ0tTVU0KLQogLyoKICAqIFRoaXMgaXMgc2V0dGluZyBmb3IgSkZGUzIgc3VwcG9ydCBpbiB1LWJvb3QuCiAgKiBOT1RFOiBFbmFibGUgQ09ORklHX0NNRF9KRkZTMiBmb3IgSkZGUzIgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NNTQ3NUVWQi5oIGIvaW5jbHVkZS9jb25maWdzL001NDc1RVZCLmgKaW5kZXggNDAzN2VmYi4uYWY2NzIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL001NDc1RVZCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL001NDc1RVZCLmgKQEAgLTIyNiw3ICsyMjYsNyBAQAogICovCiAjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCiAjZGVmaW5lIENGR19TRFJBTV9DRkcxCQkweDczNzExNjMwCi0jZGVmaW5lIENGR19TRFJBTV9DRkcyCQkweDQ2MzcwMDAwCisjZGVmaW5lIENGR19TRFJBTV9DRkcyCQkweDQ2NzcwMDAwCiAjZGVmaW5lIENGR19TRFJBTV9DVFJMCQkweEUxMEIwMDAwCiAjZGVmaW5lIENGR19TRFJBTV9FTU9ECQkweDQwMDEwMDAwCiAjZGVmaW5lIENGR19TRFJBTV9NT0RFCQkweDAxOEQwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTTU0ODVFVkIuaCBiL2luY2x1ZGUvY29uZmlncy9NNTQ4NUVWQi5oCmluZGV4IGExNGM1NWIuLjI0OGRiNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NNTQ4NUVWQi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NNTQ4NUVWQi5oCkBAIC0yMTIsNyArMjEyLDcgQEAKICAqLwogI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAogI2RlZmluZSBDRkdfU0RSQU1fQ0ZHMQkJMHg3MzcxMTYzMAotI2RlZmluZSBDRkdfU0RSQU1fQ0ZHMgkJMHg0NjM3MDAwMAorI2RlZmluZSBDRkdfU0RSQU1fQ0ZHMgkJMHg0Njc3MDAwMAogI2RlZmluZSBDRkdfU0RSQU1fQ1RSTAkJMHhFMTBCMDAwMAogI2RlZmluZSBDRkdfU0RSQU1fRU1PRAkJMHg0MDAxMDAwMAogI2RlZmluZSBDRkdfU0RSQU1fTU9ERQkJMHgwMThEMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2FkczUxMjEuaCBiL2luY2x1ZGUvY29uZmlncy9hZHM1MTIxLmgKaW5kZXggNWY3NGFmYi4uZjUxNmM0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2FkczUxMjEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYWRzNTEyMS5oCkBAIC0yMTAsNiArMjEwLDcgQEAKIAogI2RlZmluZSBDRkdfQ1MwX0NGRwkJMHgwNTA1OTMxMAkvKiBBTEUgYWN0aXZlIGxvdywgZGF0YSBzaXplIDRieXRlcyAqLwogI2RlZmluZSBDRkdfQ1MyX0NGRwkJMHgwNTA1OTAxMAkvKiBBTEUgYWN0aXZlIGxvdywgZGF0YSBzaXplIDFieXRlICovCisjZGVmaW5lIENGR19DU19BTEVUSU1JTkcJMHgwMDAwMDAwNQkvKiBVc2UgYWx0ZXJuYXRpdmUgQ1MgdGltaW5nIGZvciBDUzAgYW5kIENTMiAqLwogCiAvKiBVc2UgU1JBTSBmb3IgaW5pdGlhbCBzdGFjayAqLwogI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfU1JBTV9CQVNFCQkvKiBJbml0aWFsIFJBTSBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXAzMjVyeGEuaCBiL2luY2x1ZGUvY29uZmlncy9hcDMyNXJ4YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXAzMjVyeGEuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFJlbmVzYXMgU29sdXRpb25zIEFQLTMyNVJYQSBib2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdS5ub2J1aGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQVAzMjVSWEFfSAorI2RlZmluZSBfX0FQMzI1UlhBX0gKKworI3VuZGVmIERFQlVHCisjZGVmaW5lIENPTkZJR19TSAkJMQorI2RlZmluZSBDT05GSUdfU0g0CQkxCisjZGVmaW5lIENPTkZJR19DUFVfU0g3NzIzCTEKKyNkZWZpbmUgQ09ORklHX0FQMzI1UlhBCTEKKworI2RlZmluZSBDT05GSUdfQ01EX0xPQURCCisjZGVmaW5lIENPTkZJR19DTURfTE9BRFMKKyNkZWZpbmUgQ09ORklHX0NNRF9GTEFTSAorI2RlZmluZSBDT05GSUdfQ01EX01FTU9SWQorI2RlZmluZSBDT05GSUdfQ01EX05FVAorI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKKyNkZWZpbmUgQ09ORklHX0NNRF9ORlMKKyNkZWZpbmUgQ09ORklHX0NNRF9TRFJBTQorI2RlZmluZSBDT05GSUdfQ01EX0VOVgorI2RlZmluZSBDT05GSUdfQ01EX0lERQorI2RlZmluZSBDT05GSUdfQ01EX0VYVDIKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTM4NDAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJjb25zb2xlPXR0eVNDMiwzODQwMCIKKworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI3VuZGVmICBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisKKy8qIFNNQzkxMTggKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9TTUM5MTFYIDEKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9TTUM5MTFYXzMyX0JJVCAxCisjZGVmaW5lIENPTkZJR19EUklWRVJfU01DOTExWF9CQVNFIDB4QjYwODAwMDAKKworLyogTUVNT1JZICovCisjZGVmaW5lIEFQMzI1UlhBX1NEUkFNX0JBU0UJCSgweDg4MDAwMDAwKQorI2RlZmluZSBBUDMyNVJYQV9GTEFTSF9CQVNFXzEJCSgweEEwMDAwMDAwKQorI2RlZmluZSBBUDMyNVJYQV9GTEFTSF9CQU5LX1NJWkUJKDEyOCAqIDEwMjQgKiAxMDI0KQorCisvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfTE9OR0hFTFAKKy8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIj0+ICIKKy8qIEJ1ZmZlciBzaXplIGZvciBpbnB1dCBmcm9tIHRoZSBDb25zb2xlICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgorLyogQnVmZmVyIHNpemUgZm9yIENvbnNvbGUgb3V0cHV0ICovCisjZGVmaW5lIENGR19QQlNJWkUJCTI1NgorLyogbWF4IGFyZ3MgYWNjZXB0ZWQgZm9yIG1vbml0b3IgY29tbWFuZHMgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CisvKiBCdWZmZXIgc2l6ZSBmb3IgQm9vdCBBcmd1bWVudHMgcGFzc2VkIHRvIGtlcm5lbCAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJNTEyCisvKiBMaXN0IG9mIGxlZ2FsIGJhdWRyYXRlIHNldHRpbmdzIGZvciB0aGlzIGJvYXJkICovCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDM4NDAwIH0KKworLyogU0NJRiAqLworI2RlZmluZSBDT05GSUdfU0NJRl9DT05TT0xFIDEKKyNkZWZpbmUgQ09ORklHX1NDSUZfQQkJMSAvKiBTSDc3MjMgaGFzIFNDSUYgYW5kIFNDSUZBICovCisjZGVmaW5lIENPTkZJR19DT05TX1NDSUY1CTEKKworLyogU3VwcHJlc3MgZGlzcGxheSBvZiBjb25zb2xlIGluZm9ybWF0aW9uIGF0IGJvb3QgKi8KKyN1bmRlZiAgQ0ZHX0NPTlNPTEVfSU5GT19RVUlFVAorI3VuZGVmICBDRkdfQ09OU09MRV9PVkVSV1JJVEVfUk9VVElORQorI3VuZGVmICBDRkdfQ09OU09MRV9FTlZfT1ZFUldSSVRFCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJKEFQMzI1UlhBX1NEUkFNX0JBU0UpCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgKDYwICogMTAyNCAqIDEwMjQpKQorCisvKiBFbmFibGUgYWx0ZXJuYXRlLCBtb3JlIGV4dGVuc2l2ZSwgbWVtb3J5IHRlc3QgKi8KKyN1bmRlZiAgQ0ZHX0FMVF9NRU1URVNUCisvKiBTY3JhdGNoIGFkZHJlc3MgdXNlZCBieSB0aGUgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0ICovCisjdW5kZWYgIENGR19NRU1URVNUX1NDUkFUQ0gKKworLyogRW5hYmxlIHRlbXBvcmFyeSBiYXVkcmF0ZSBjaGFuZ2Ugd2hpbGUgc2VyaWFsIGRvd25sb2FkICovCisjdW5kZWYgIENGR19MT0FEU19CQVVEX0NIQU5HRQorCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCShBUDMyNVJYQV9TRFJBTV9CQVNFKQorLyogbWF5YmUgbW9yZSwgYnV0IGlmIHNvIHUtYm9vdCBkb2Vzbid0IGtub3cgYWJvdXQgaXQuLi4gKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNX1NJWkUJKDEyOCAqIDEwMjQgKiAxMDI0KQorLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgZm9yIHNjcmlwdHMgPyE/ICovCisjZGVmaW5lIENGR19MT0FEX0FERFIJKENGR19TRFJBTV9CQVNFICsgMTYgKiAxMDI0ICogMTAyNCkKKworLyogQWRkcmVzcyBvZiB1LWJvb3QgaW1hZ2UgaW4gRmxhc2ggKE5PVCBydW4gdGltZSBhZGRyZXNzIGluIFNEUkFNKSA/IT8gKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQkoQVAzMjVSWEFfRkxBU0hfQkFTRV8xKQorLyogTW9uaXRvciBzaXplICovCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkoMTI4ICogMTAyNCkKKy8qIFNpemUgb2YgRFJBTSByZXNlcnZlZCBmb3IgbWFsbG9jKCkgdXNlICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCSgyNTYgKiAxMDI0KQorLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCSgyNTYpCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDggKiAxMDI0ICogMTAyNCkKKworLyogRkxBU0ggKi8KKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIgMQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCisjdW5kZWYgIENGR19GTEFTSF9RVUlFVF9URVNUCisvKiBwcmludCAnRScgZm9yIGVtcHR5IHNlY3RvciBvbiBmbGluZm8gKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKy8qIFBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgRmxhc2ggbWVtb3J5ICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCShBUDMyNVJYQV9GTEFTSF9CQVNFXzEpCisvKiBNYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gZWFjaCBGbGFzaCBjaGlwICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk1MTIKKworLyoKKyAqIElERSBzdXBwb3J0CisgKi8KKyNkZWZpbmUgQ09ORklHX0lERV9SRVNFVAkxCisjZGVmaW5lIENGR19QSU9fTU9ERQkJMQorI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMQkvKiBJREUgYnVzICovCisjZGVmaW5lIENGR19JREVfTUFYREVWSUNFCTEKKyNkZWZpbmUgQ0ZHX0FUQV9CQVNFX0FERFIJMHhCNDE4MDAwMAorI2RlZmluZSBDRkdfQVRBX1NUUklERQkJMgkvKiAxYml0IHNoaWZ0ICovCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMHgyMDAJLyogZGF0YSByZWcgb2Zmc2V0ICovCisjZGVmaW5lIENGR19BVEFfUkVHX09GRlNFVAkweDIwMAkvKiByZWcgb2Zmc2V0ICovCisjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDIxMAkvKiBhbHRlcm5hdGUgcmVnaXN0ZXIgb2Zmc2V0ICovCisKKy8qIGlmIHlvdSB1c2UgYWxsIE5PUiBGbGFzaCAsIHlvdSBjaGFuZ2UgZGlwLXN3aXRjaC4gUGxlYXNlIHNlZSBNYW51YWwuICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQorI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVCB7IENGR19GTEFTSF9CQVNFICsgKDAgKiBBUDMyNVJYQV9GTEFTSF9CQU5LX1NJWkUpfQorCisvKiBUaW1lb3V0IGZvciBGbGFzaCBlcmFzZSBvcGVyYXRpb25zIChpbiBtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDMgKiAxMDAwKQorLyogVGltZW91dCBmb3IgRmxhc2ggd3JpdGUgb3BlcmF0aW9ucyAoaW4gbXMpICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgzICogMTAwMCkKKy8qIFRpbWVvdXQgZm9yIEZsYXNoIHNldCBzZWN0b3IgbG9jayBiaXQgb3BlcmF0aW9ucyAoaW4gbXMpICovCisjZGVmaW5lIENGR19GTEFTSF9MT0NLX1RPVVQJKDMgKiAxMDAwKQorLyogVGltZW91dCBmb3IgRmxhc2ggY2xlYXIgbG9jayBiaXQgb3BlcmF0aW9ucyAoaW4gbXMpICovCisjZGVmaW5lIENGR19GTEFTSF9VTkxPQ0tfVE9VVAkoMyAqIDEwMDApCisKKy8qCisgKiBVc2UgaGFyZHdhcmUgZmxhc2ggc2VjdG9ycyBwcm90ZWN0aW9uIGluc3RlYWQKKyAqIG9mIFUtQm9vdCBzb2Z0d2FyZSBwcm90ZWN0aW9uCisgKi8KKyN1bmRlZiAgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKyN1bmRlZiAgQ0ZHX0RJUkVDVF9GTEFTSF9URlRQCisKKy8qIEVOViBzZXR0aW5nICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkoMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkoQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQorLyogT2Zmc2V0IG9mIGVudiBGbGFzaCBzZWN0b3IgcmVsYXRpdmUgdG8gQ0ZHX0ZMQVNIX0JBU0UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCShDRkdfRU5WX0FERFIgLSBDRkdfRkxBU0hfQkFTRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAkoQ0ZHX0VOVl9TRUNUX1NJWkUpCisKKy8qIEJvYXJkIENsb2NrICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMzMzMzMzMzMKKyNkZWZpbmUgVE1VX0NMS19ESVZJREVSCQkoNCkJLyogNCAoZGVmYXVsdCksIDE2LCA2NCwgMjU2IG9yIDEwMjQgKi8KKyNkZWZpbmUgQ0ZHX0haCQkJKENPTkZJR19TWVNfQ0xLX0ZSRVEgLyBUTVVfQ0xLX0RJVklERVIpCisKKyNlbmRpZgkvKiBfX0FQMzI1UlhBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yc2s3MjAzLmggYi9pbmNsdWRlL2NvbmZpZ3MvcnNrNzIwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNTk4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcnNrNzIwMy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29uZmlndWF0aW9uIHNldHRpbmdzIGZvciB0aGUgUmVuZXNhcyBUZWNobm9sb2d5IFJTSyA3MjAzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vYnVoaXJvIEl3YW1hdHN1CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fUlNLNzIwM19ICisjZGVmaW5lIF9fUlNLNzIwM19ICisKKyN1bmRlZiBERUJVRworI2RlZmluZSBDT05GSUdfU0gJCTEKKyNkZWZpbmUgQ09ORklHX1NIMgkJMQorI2RlZmluZSBDT05GSUdfU0gyQQkJMQorI2RlZmluZSBDT05GSUdfQ1BVX1NINzIwMwkxCisjZGVmaW5lIENPTkZJR19SU0s3MjAzCTEKKworI2RlZmluZSBDT05GSUdfQ01EX0ZMQVNICisjZGVmaW5lIENPTkZJR19DTURfTkVUCisjZGVmaW5lIENPTkZJR19DTURfTkZTCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX0VOVgorI2RlZmluZSBDT05GSUdfQ01EX1NEUkFNCisjZGVmaW5lIENPTkZJR19DTURfTUVNT1JZCisjZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkJMHgwQzEwMDAwMCAvKiBSU0s3MjAzX1NEUkFNX0JBU0UgKyAxTUIgKi8KKworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI3VuZGVmCUNPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKworLyogTUVNT1JZICovCisjZGVmaW5lIFJTSzcyMDNfU0RSQU1fQkFTRQkweDBDMDAwMDAwCisjZGVmaW5lIFJTSzcyMDNfRkxBU0hfQkFTRV8xCTB4MjAwMDAwMDAJLyogTm9uIGNhY2hlICovCisjZGVmaW5lIFJTSzcyMDNfRkxBU0hfQkFOS19TSVpFCSg0ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkyNTYJLyogQnVmZmVyIHNpemUgZm9yIGlucHV0IGZyb20gdGhlIENvbnNvbGUgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkyNTYJLyogQnVmZmVyIHNpemUgZm9yIENvbnNvbGUgb3V0cHV0ICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CS8qIG1heCBhcmdzIGFjY2VwdGVkIGZvciBtb25pdG9yIGNvbW1hbmRzICovCisvKiBCdWZmZXIgc2l6ZSBmb3IgQm9vdCBBcmd1bWVudHMgcGFzc2VkIHRvIGtlcm5lbCAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJNTEyCisvKiBMaXN0IG9mIGxlZ2FsIGJhdWRyYXRlIHNldHRpbmdzIGZvciB0aGlzIGJvYXJkICovCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDExNTIwMCB9CisKKy8qIFNDSUYgKi8KKyNkZWZpbmUgQ09ORklHX1NDSUZfQ09OU09MRQkxCisjZGVmaW5lIENPTkZJR19DT05TX1NDSUYwCTEKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlSU0s3MjAzX1NEUkFNX0JBU0UKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAoMyAqIDEwMjQgKiAxMDI0KSkKKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJUlNLNzIwM19TRFJBTV9CQVNFCisjZGVmaW5lIENGR19TRFJBTV9TSVpFCQkoMzIgKiAxMDI0ICogMTAyNCkKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoQ0ZHX1NEUkFNX0JBU0UgKyAxMDI0ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlSU0s3MjAzX0ZMQVNIX0JBU0VfMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDI1NiAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTI1NgorI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCAqIDEwMjQgKiAxMDI0KQorCisvKiBGTEFTSCAqLworI2RlZmluZSBDT05GSUdfRkxBU0hfQ0ZJX0RSSVZFUgorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9DRklfV0lEVEggRkxBU0hfQ0ZJXzE2QklUCisjdW5kZWYJQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JLyogcHJpbnQgJ0UnIGZvciBlbXB0eSBzZWN0b3Igb24gZmxpbmZvICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQlSU0s3MjAzX0ZMQVNIX0JBU0VfMQorI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFIH0KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTY0CisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQorCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJKDY0ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQlDRkdfRU5WX1NFQ1RfU0laRQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQorI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMAorI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAKKworLyogQm9hcmQgQ2xvY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkzMzMzMzMzMworI2RlZmluZSBDTVRfQ0xLX0RJVklERVIJMzIJLyogOCAoZGVmYXVsdCksIDMyLCAxMjggb3IgNTEyICovCisjZGVmaW5lIENGR19IWgkJCShDT05GSUdfU1lTX0NMS19GUkVRIC8gQ01UX0NMS19ESVZJREVSKQorCisjZW5kaWYJLyogX19SU0s3MjAzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc2VxdW9pYS5oCmluZGV4IDE4Njc1YzIuLjc0ZjZlM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NlcXVvaWEuaApAQCAtMTc5LDcgKzE3OSw3IEBACiAgKiBEZWZpbmUgdGhlIHBhcnRpdGlvbmluZyBvZiB0aGUgTkFORCBjaGlwIChvbmx5IFJBTSBVLUJvb3QgaXMgbmVlZGVkIGhlcmUpCiAgKi8KICNkZWZpbmUgQ0ZHX05BTkRfVV9CT09UX09GRlMJKDE2IDw8IDEwKQkvKiBPZmZzZXQgdG8gUkFNIFUtQm9vdCBpbWFnZSAqLwotI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU0laRQkoMzg0IDw8IDEwKQkvKiBTaXplIG9mIFJBTSBVLUJvb3QgaW1hZ2UgICAqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU0laRQkoNTEyIDw8IDEwKQkvKiBTaXplIG9mIFJBTSBVLUJvb3QgaW1hZ2UgICAqLwogCiAvKgogICogTm93IHRoZSBOQU5EIGNoaXAgaGFzIHRvIGJlIGRlZmluZWQgKG5vIGF1dG9kZXRlY3Rpb24gdXNlZCEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2g3Nzg1bGNyLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc2g3Nzg1bGNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkYjE2MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9zaDc3ODVsY3IuaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFJlbmVzYXMgVGVjaG5vbG9neSBSMFA3Nzg1TEMwMDExUkwgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggWW9zaGloaXJvIFNoaW1vZGEgPHNoaW1vZGEueW9zaGloaXJvQHJlbmVzYXMuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19TSDc3ODVMQ1JfSAorI2RlZmluZSBfX1NINzc4NUxDUl9ICisKKyN1bmRlZiBERUJVRworI2RlZmluZSBDT05GSUdfU0gJCTEKKyNkZWZpbmUgQ09ORklHX1NINEEJCTEKKyNkZWZpbmUgQ09ORklHX0NQVV9TSDc3ODUJMQorI2RlZmluZSBDT05GSUdfU0g3Nzg1TENSCTEKKworI2RlZmluZSBDT05GSUdfQ01EX0ZMQVNICisjZGVmaW5lIENPTkZJR19DTURfTUVNT1JZCisjZGVmaW5lIENPTkZJR19DTURfUENJCisjZGVmaW5lIENPTkZJR19DTURfTkVUCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX05GUworI2RlZmluZSBDT05GSUdfQ01EX0RGTAorI2RlZmluZSBDT05GSUdfQ01EX1NEUkFNCisjZGVmaW5lIENPTkZJR19DTURfUlVOCisjZGVmaW5lIENPTkZJR19DTURfRU5WCisKKyNkZWZpbmUgQ09ORklHX0NNRF9VU0IKKyNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgorI2RlZmluZSBDT05GSUdfQ01EX0ZBVAorI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJCSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIgorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKKwkiYm9vdGRldmljZT0wOjFcMCIJCQkJCQlcCisJInVzYmxvYWQ9dXNiIHJlc2V0O3VzYmJvb3Q7dXNiIHN0b3A7Ym9vdG1cMCIKKworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI3VuZGVmCUNPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKworLyogTUVNT1JZICovCisjZGVmaW5lIFNINzc4NUxDUl9TRFJBTV9CQVNFCQkoMHgwODAwMDAwMCkKKyNkZWZpbmUgU0g3Nzg1TENSX1NEUkFNX1NJWkUJCSgxMjggKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgU0g3Nzg1TENSX0ZMQVNIX0JBU0VfMQkJKDB4YTAwMDAwMDApCisjZGVmaW5lIFNINzc4NUxDUl9GTEFTSF9CQU5LX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIFNINzc4NUxDUl9VU0JfQkFTRQkJKDB4YjQwMDAwMDApCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCisjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgorI2RlZmluZSBDRkdfUEJTSVpFCQkyNTYKKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CisjZGVmaW5lIENGR19CQVJHU0laRQkJNTEyCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDExNTIwMCB9CisKKy8qIFNDSUYgKi8KKyNkZWZpbmUgQ09ORklHX1NDSUZfQ09OU09MRQkxCisjZGVmaW5lIENPTkZJR19DT05TX1NDSUYxCTEKKyNkZWZpbmUgQ09ORklHX1NDSUZfRVhUX0NMT0NLCTEKKyN1bmRlZglDRkdfQ09OU09MRV9JTkZPX1FVSUVUCisjdW5kZWYJQ0ZHX0NPTlNPTEVfT1ZFUldSSVRFX1JPVVRJTkUKKyN1bmRlZglDRkdfQ09OU09MRV9FTlZfT1ZFUldSSVRFCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkoU0g3Nzg1TENSX1NEUkFNX0JBU0UpCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgXAorCQkJCQkoU0g3Nzg1TENSX1NEUkFNX1NJWkUpIC0gXAorCQkJCQkgNCAqIDEwMjQgKiAxMDI0KQorI3VuZGVmCUNGR19BTFRfTUVNVEVTVAorI3VuZGVmCUNGR19NRU1URVNUX1NDUkFUQ0gKKyN1bmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UKKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkoU0g3Nzg1TENSX1NEUkFNX0JBU0UpCisjZGVmaW5lIENGR19TRFJBTV9TSVpFCShTSDc3ODVMQ1JfU0RSQU1fU0laRSkKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkoQ0ZHX1NEUkFNX0JBU0UgKyAxNiAqIDEwMjQgKiAxMDI0KQorCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJKFNINzc4NUxDUl9GTEFTSF9CQVNFXzEpCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDUxMiAqIDEwMjQpCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoNTEyICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJKDI1NikKKyNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkJKDggKiAxMDI0ICogMTAyNCkKKworLyogRkxBU0ggKi8KKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI3VuZGVmCUNGR19GTEFTSF9RVUlFVF9URVNUCisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkoU0g3Nzg1TENSX0ZMQVNIX0JBU0VfMSkKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTUxMgorCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQorI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFICsgXAorCQkJCSAoMCAqIFNINzc4NUxDUl9GTEFTSF9CQU5LX1NJWkUpIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMyAqIDEwMDApCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgzICogMTAwMCkKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0xPQ0tfVE9VVAkoMyAqIDEwMDApCisjZGVmaW5lIENGR19GTEFTSF9VTkxPQ0tfVE9VVAkoMyAqIDEwMDApCisKKyN1bmRlZglDRkdfRkxBU0hfUFJPVEVDVElPTgorI3VuZGVmCUNGR19ESVJFQ1RfRkxBU0hfVEZUUAorCisvKiBSOEE2NjU5NyAqLworI2RlZmluZSBMSVRUTEVFTkRJQU4JCQkvKiBmb3IgaW5jbHVkZS91c2IuaCAqLworI2RlZmluZSBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRAorI2RlZmluZSBDT05GSUdfUjhBNjY1OTdfQkFTRV9BRERSCVNINzc4NUxDUl9VU0JfQkFTRQorI2RlZmluZSBDT05GSUdfUjhBNjY1OTdfWFRBTAkJMHgwMDAwCS8qIDEyTUh6ICovCisjZGVmaW5lIENPTkZJR19SOEE2NjU5N19MRFJWCQkweDgwMDAJLyogMy4zViAqLworI2RlZmluZSBDT05GSUdfUjhBNjY1OTdfRU5ESUFOCQkweDAwMDAJLyogbGl0dGxlICovCisKKy8qIFBDSSBDb250cm9sbGVyICovCisjZGVmaW5lIENPTkZJR19QQ0kKKyNkZWZpbmUgQ09ORklHX1NINF9QQ0kKKyNkZWZpbmUgQ09ORklHX1NINzc4MF9QQ0kKKyNkZWZpbmUgQ09ORklHX1BDSV9QTlAKKyNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cJMQorCisjZGVmaW5lIENPTkZJR19QQ0lfTUVNX0JVUwkweEZEMDAwMDAwCS8qIE1lbW9yeSBzcGFjZSBiYXNlIGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX1BDSV9NRU1fUEhZUwlDT05GSUdfUENJX01FTV9CVVMKKyNkZWZpbmUgQ09ORklHX1BDSV9NRU1fU0laRQkweDAxMDAwMDAwCS8qIFNpemUgb2YgTWVtb3J5IHdpbmRvdyAqLworCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fQlVTCTB4RkUyMDAwMDAJLyogSU8gc3BhY2UgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fUEhZUwlDT05GSUdfUENJX0lPX0JVUworI2RlZmluZSBDT05GSUdfUENJX0lPX1NJWkUJMHgwMDIwMDAwMAkvKiBTaXplIG9mIElPIHdpbmRvdyAqLworCisvKiBOZXR3b3JrIGRldmljZSAoUlRMODE2OSkgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19SVEw4MTY5CisKKy8qIEVOViBzZXR0aW5nICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkoMjU2ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkoQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJKENGR19FTlZfQUREUiAtIENGR19GTEFTSF9CQVNFKQorI2RlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NFQ1RfU0laRSkKKworLyogQm9hcmQgQ2xvY2sgKi8KKy8qIFRoZSBTQ0lGIHVzZWQgZXh0ZXJuYWwgY2xvY2suIHN5c3RlbSBjbG9jayBvbmx5IHVzZWQgdGltZXIuICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJNTAwMDAwMDAKKyNkZWZpbmUgVE1VX0NMS19ESVZJREVSCQk0CisjZGVmaW5lIENGR19IWgkJCShDT05GSUdfU1lTX0NMS19GUkVRIC8gVE1VX0NMS19ESVZJREVSKQorCisjZW5kaWYJLyogX19TSDc3ODVMQ1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NtZGs2NDAwLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc21kazY0MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGMxNDZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3NtZGs2NDAwLmgKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICogR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CisgKiBEYXZpZCBNdWVsbGVyIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFNBTVNVTkcgU01ESzY0MDAobURpcmFjLUlJSSkgYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKyNkZWZpbmUgQ09ORklHX1MzQzY0MDAJCTEJLyogaW4gYSBTQU1TVU5HIFMzQzY0MDAgU29DICAgICAqLworI2RlZmluZSBDT05GSUdfUzNDNjRYWAkJMQkvKiBpbiBhIFNBTVNVTkcgUzNDNjRYWCBGYW1pbHkgICovCisjZGVmaW5lIENPTkZJR19TTURLNjQwMAkJMQkvKiBvbiBhIFNBTVNVTkcgU01ESzY0MDAgQm9hcmQgICovCisKKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJMHg1MDAwMDAwMAorCisvKiBpbnB1dCBjbG9jayBvZiBQTEw6IFNNREs2NDAwIGhhcyAxMk1IeiBpbnB1dCBjbG9jayAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTEyMDAwMDAwCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpICYmIChURVhUX0JBU0UgPj0gMHhjMDAwMDAwMCkKKyNkZWZpbmUgQ09ORklHX0VOQUJMRV9NTVUKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19NRU1PUllfVVBQRVJfQ09ERQorCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcKKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcKKworLyoKKyAqIEFyY2hpdGVjdHVyZSBtYWdpYyBhbmQgbWFjaGluZSB0eXBlCisgKi8KKyNkZWZpbmUgTUFDSF9UWVBFCQkxMjcwCisKKyNkZWZpbmUgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTworI2RlZmluZSBDT05GSUdfRElTUExBWV9CT0FSRElORk8KKworI3VuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisKKy8qCisgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEwMjQgKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyBmb3IgaW5pdGlhbCBkYXRhICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9DUzg5MDAJMQkvKiB3ZSBoYXZlIGEgQ1M4OTAwIG9uLWJvYXJkCSovCisjZGVmaW5lIENTODkwMF9CQVNFCSAgCTB4MTg4MDAzMDAKKyNkZWZpbmUgQ1M4OTAwX0JVUzE2CQkxIAkvKiBmb2xsb3cgdGhlIExpbnV4IGRyaXZlcgkqLworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMMSAgICAgICAgICAxCS8qIHdlIHVzZSBTRVJJQUwgMSBvbiBTTURLNjQwMAkqLworCisjZGVmaW5lIENGR19IVVNIX1BBUlNFUgkJCS8qIHVzZSAiaHVzaCIgY29tbWFuZCBwYXJzZXIJKi8KKyNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmQgZGVmaW5pdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKKyNkZWZpbmUgQ09ORklHX0NNRF9SRUdJTkZPCisjZGVmaW5lIENPTkZJR19DTURfTE9BRFMKKyNkZWZpbmUgQ09ORklHX0NNRF9MT0FEQgorI2RlZmluZSBDT05GSUdfQ01EX0VOVgorI2RlZmluZSBDT05GSUdfQ01EX05BTkQKKyNpZiBkZWZpbmVkKENPTkZJR19CT09UX09ORU5BTkQpCisjZGVmaW5lIENPTkZJR19DTURfT05FTkFORAorI2VuZGlmCisjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX0VMRgorI2RlZmluZSBDT05GSUdfQ01EX0ZBVAorI2RlZmluZSBDT05GSUdfQ01EX0VYVDIKKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDT05GSUdfQ01EX0tHREIpCisjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTExNTIwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UJICovCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJICAgICAgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIlNNREs2NDAwICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAgICovCisjZGVmaW5lIENGR19QQlNJWkUJCTM4NAkJLyogUHJpbnQgQnVmZmVyIFNpemUgICAgICAgICAgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfU0RSQU1fQkFTRQkvKiBtZW10ZXN0IHdvcmtzIG9uCSAgICAgICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19TRFJBTV9CQVNFICsgMHg3ZTAwMDAwKSAvKiAxMjZNQiBpbiBEUkFNICovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJQ0ZHX1NEUkFNX0JBU0UJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisKKy8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkweDQwMDAwCQkvKiByZWd1bGFyIHN0YWNrIDI1NktCICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgU3VwcG9ydCBDbG9jayBTZXR0aW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBTZXR0aW5nCVNZTkMJQVNZTkMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgNjY3XzEzM182NgkgWAkgIE8KKyA1MzNfMTMzXzY2CSBPCSAgTworIDQwMF8xMzNfNjYJIFgJICBPCisgNDAwXzEwMF81MAkgTwkgIE8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiNkZWZpbmUgQ09ORklHX0NMS182NjdfMTMzXzY2Ki8KKyNkZWZpbmUgQ09ORklHX0NMS181MzNfMTMzXzY2CisvKgorI2RlZmluZSBDT05GSUdfQ0xLXzQwMF8xMDBfNTAKKyNkZWZpbmUgQ09ORklHX0NMS180MDBfMTMzXzY2CisjZGVmaW5lIENPTkZJR19TWU5DX01PREUKKyovCisKKy8qIFNNREs2NDAwIGhhcyAyIGJhbmtzIG9mIERSQU0sIGJ1dCB3ZSB1c2Ugb25seSBvbmUgaW4gVS1Cb290ICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlDRkdfU0RSQU1fQkFTRQkvKiBTRFJBTSBCYW5rICMxCSovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDgwMDAwMDAJLyogMTI4IE1CIGluIEJhbmsgIzEJKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCTB4MDAwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkqLworLyogQU0yOUxWMTYwQiBoYXMgMzUgc2VjdG9ycywgQU0yOUxWODAwQiAtIDE5ICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk0MAorCisjZGVmaW5lIENPTkZJR19BTURfTFY4MDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBVc2UgQ0ZJIHBhcmFtZXRlcnMgKG5lZWRlZD8pICovCisvKiBVc2UgZHJpdmVycy9jZmlfZmxhc2guYywgZXZlbiB0aG91Z2ggdGhlIGZsYXNoIGlzIG5vdCBDRkktY29tcGxpYW50CSovCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCTEKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9XSURUSAlGTEFTSF9DRklfMTZCSVQKKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9MRUdBQ1kKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0xFR0FDWV81MTJLeDE2CisKKy8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoNSAqIENGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDUgKiBDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlCSovCisKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKworLyoKKyAqIFNNREs2NDAwIGJvYXJkIHNwZWNpZmljIGRhdGEKKyAqLworCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBmb3IgU01ESzY0MDAiCisKKy8qIGJhc2UgYWRkcmVzcyBmb3IgdWJvb3QgKi8KKyNkZWZpbmUgQ0ZHX1BIWV9VQk9PVF9CQVNFCShDRkdfU0RSQU1fQkFTRSArIDB4MDdlMDAwMDApCisvKiB0b3RhbCBtZW1vcnkgYXZhaWxhYmxlIHRvIHVib290ICovCisjZGVmaW5lIENGR19VQk9PVF9TSVpFCQkoMTAyNCAqIDEwMjQpCisKKyNpZmRlZiBDT05GSUdfRU5BQkxFX01NVQorI2RlZmluZSBDRkdfTUFQUEVEX1JBTV9CQVNFCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJuYW5kIHJlYWQgMHhjMDAxODAwMCAweDYwMDAwIDB4MWMwMDAwOyIgXAorCQkJCSJib290bSAweGMwMDE4MDAwIgorI2Vsc2UKKyNkZWZpbmUgQ0ZHX01BUFBFRF9SQU1fQkFTRQlDRkdfU0RSQU1fQkFTRQorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJIm5hbmQgcmVhZCAweDUwMDE4MDAwIDB4NjAwMDAgMHgxYzAwMDA7IiBcCisJCQkJImJvb3RtIDB4NTAwMTgwMDAiCisjZW5kaWYKKworLyogTkFORCBVLUJvb3QgbG9hZCBhbmQgc3RhcnQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfVUJPT1RfQkFTRQkJKENGR19NQVBQRURfUkFNX0JBU0UgKyAweDA3ZTAwMDAwKQorCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwNDAwMDAKKworLyogTkFORCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJMQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkweDcwMjAwMDEwCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkxCisjZGVmaW5lIENGR19TM0NfTkFORF9IV0VDQworCisjZGVmaW5lIENGR19OQU5EX1NLSVBfQkFEX0RPVF9JCTEgIC8qICIuaSIgcmVhZCBza2lwcyBiYWQgYmxvY2tzCSAgICAgICovCisjZGVmaW5lIENGR19OQU5EX1dQCQkxCisjZGVmaW5lIENGR19OQU5EX1lBRkZTX1dSSVRFCTEgIC8qIHN1cHBvcnQgeWFmZnMgd3JpdGUJCSAgICAgICovCisjZGVmaW5lIENGR19OQU5EX0JCVF8yTkRQQUdFCTEgIC8qIGJhZC1ibG9jayBtYXJrZXJzIGluIDFzdCBhbmQgMm5kIHBhZ2VzICAqLworCisjZGVmaW5lIENGR19OQU5EX1VfQk9PVF9EU1QJQ0ZHX1BIWV9VQk9PVF9CQVNFCS8qIE5VQiBsb2FkLWFkZHIgICAgICAqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU1RBUlQJQ0ZHX05BTkRfVV9CT09UX0RTVAkvKiBOVUIgc3RhcnQtYWRkciAgICAgKi8KKworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfT0ZGUwkoNCAqIDEwMjQpCS8qIE9mZnNldCB0byBSQU0gVS1Cb290IGltYWdlICovCisjZGVmaW5lIENGR19OQU5EX1VfQk9PVF9TSVpFCSgyNTIgKiAxMDI0KQkvKiBTaXplIG9mIFJBTSBVLUJvb3QgaW1hZ2UgICAqLworCisvKiBOQU5EIGNoaXAgcGFnZSBzaXplCQkqLworI2RlZmluZSBDRkdfTkFORF9QQUdFX1NJWkUJMjA0OAorLyogTkFORCBjaGlwIGJsb2NrIHNpemUJCSovCisjZGVmaW5lIENGR19OQU5EX0JMT0NLX1NJWkUJKDEyOCAqIDEwMjQpCisvKiBOQU5EIGNoaXAgcGFnZSBwZXIgYmxvY2sgY291bnQgICovCisjZGVmaW5lIENGR19OQU5EX1BBR0VfQ09VTlQJNjQKKy8qIExvY2F0aW9uIG9mIHRoZSBiYWQtYmxvY2sgbGFiZWwgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQkFEX0JMT0NLX1BPUwkwCisvKiBFeHRyYSBhZGRyZXNzIGN5Y2xlIGZvciA+IDEyOE1pQiAqLworI2RlZmluZSBDRkdfTkFORF81X0FERFJfQ1lDTEUKKworLyogU2l6ZSBvZiB0aGUgYmxvY2sgcHJvdGVjdGVkIGJ5IG9uZSBPT0IgKFNwYXJlIEFyZWEgaW4gU2Ftc3VuZyB0ZXJtaW5vbG9neSkgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfRUNDU0laRQlDRkdfTkFORF9QQUdFX1NJWkUKKy8qIE51bWJlciBvZiBFQ0MgYnl0ZXMgcGVyIE9PQiAtIFMzQzY0MDAgY2FsY3VsYXRlcyA0IGJ5dGVzIEVDQyBpbiAxLWJpdCBtb2RlICovCisjZGVmaW5lIENGR19OQU5EX0VDQ0JZVEVTCTQKKy8qIE51bWJlciBvZiBFQ0MtYmxvY2tzIHBlciBOQU5EIHBhZ2UgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfRUNDU1RFUFMJKENGR19OQU5EX1BBR0VfU0laRSAvIENGR19OQU5EX0VDQ1NJWkUpCisvKiBTaXplIG9mIGEgc2luZ2xlIE9PQiByZWdpb24gKi8KKyNkZWZpbmUgQ0ZHX05BTkRfT09CU0laRQk2NAorLyogTnVtYmVyIG9mIEVDQyBieXRlcyBwZXIgcGFnZSAqLworI2RlZmluZSBDRkdfTkFORF9FQ0NUT1RBTAkoQ0ZHX05BTkRfRUNDQllURVMgKiBDRkdfTkFORF9FQ0NTVEVQUykKKy8qIEVDQyBieXRlIHBvc2l0aW9ucyAqLworI2RlZmluZSBDRkdfTkFORF9FQ0NQT1MJCXs0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIFwKKwkJCQkgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCBcCisJCQkJIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2M30KKworLyogQm9vdCBjb25maWd1cmF0aW9uIChkZWZpbmUgb25seSBvbmUgb2YgbmV4dCAzKSAqLworI2RlZmluZSBDT05GSUdfQk9PVF9OQU5ECisvKiBOb25lIG9mIHRoZXNlIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuIExlZnQgZnJvbSB0aGUgb3JpZ2luYWwgU2Ftc3VuZworICogdmVyc2lvbiBmb3IgcmVmZXJlbmNlCisjZGVmaW5lIENPTkZJR19CT09UX05PUgorI2RlZmluZSBDT05GSUdfQk9PVF9NT1ZJTkFORAorI2RlZmluZSBDT05GSUdfQk9PVF9PTkVOQU5ECisqLworCisjZGVmaW5lIENPTkZJR19OQU5ECisjZGVmaW5lIENPTkZJR19OQU5EX1MzQzY0WFgKKy8qIFVuaW1wbGVtZW50ZWQgb3IgdW5zdXBwb3J0ZWQuIFNlZSBjb21tZW50IGFib3ZlLgorI2RlZmluZSBDT05GSUdfT05FTkFORAorI2RlZmluZSBDT05GSUdfTU9WSU5BTkQKKyovCisKKy8qIFNldHRpbmdzIGFzIGFib3ZlIGJvb3QgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkiY29uc29sZT10dHlTQUMsMTE1MjAwIgorCisjaWYgIWRlZmluZWQoQ09ORklHX0VOQUJMRV9NTVUpCisjZGVmaW5lIENPTkZJR19DTURfVVNCCQkJMQorI2RlZmluZSBDT05GSUdfVVNCX09IQ0lfTkVXCQkxCisjZGVmaW5lIENGR19VU0JfT0hDSV9SRUdTX0JBU0UJCTB4NzQzMDAwMDAKKyNkZWZpbmUgQ0ZHX1VTQl9PSENJX1NMT1RfTkFNRQkJInMzYzY0MDAiCisjZGVmaW5lIENGR19VU0JfT0hDSV9NQVhfUk9PVF9QT1JUUwkzCisjZGVmaW5lIENGR19VU0JfT0hDSV9DUFVfSU5JVAkJMQorI2RlZmluZSBMSVRUTEVFTkRJQU4JCQkxCS8qIHVzZWQgYnkgdXNiX29oY2kuYwkqLworCisjZGVmaW5lIENPTkZJR19VU0JfU1RPUkFHRQkxCisjZW5kaWYKKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JMQorCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfTkVXKSAmJiBkZWZpbmVkKENPTkZJR19FTkFCTEVfTU1VKQorIyBlcnJvciAidXNiX29oY2kuYyBpcyBjdXJyZW50bHkgYnJva2VuIHdpdGggTU1VIGVuYWJsZWQuIgorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21wYzUxMnguaCBiL2luY2x1ZGUvbXBjNTEyeC5oCmluZGV4IGE3NmIxY2EuLmNiNDE4ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXBjNTEyeC5oCisrKyBiL2luY2x1ZGUvbXBjNTEyeC5oCkBAIC01OCw2ICs1OCw3IEBACiAjZGVmaW5lIENTNV9DT05GSUcJCTB4MDAwMTQKICNkZWZpbmUgQ1M2X0NPTkZJRwkJMHgwMDAxOAogI2RlZmluZSBDUzdfQ09ORklHCQkweDAwMDFDCisjZGVmaW5lIENTX0FMRV9USU1JTkdfQ09ORklHCTB4MDAwMzQKIAogI2RlZmluZSBDU19DVFJMCQkJMHgwMDAyMAogI2RlZmluZSBDU19DVFJMX01FCQkweDAxMDAwMDAwCS8qIENTIE1hc3RlciBFbmFibGUgYml0ICovCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9zZG1hLmggYi9pbmNsdWRlL21wYzV4eHhfc2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjcHUvbXBjNXh4eC9zZG1hLmgKcmVuYW1lIHRvIGluY2x1ZGUvbXBjNXh4eF9zZG1hLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjNjQwMC5oIGIvaW5jbHVkZS9zM2M2NDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzZTk5YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvczNjNjQwMC5oCkBAIC0wLDAgKzEsODk0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBCeXVuZ2phZSBMZWUsIFNhbXN1bmcgRXJlY3Ryb25pY3MsIGJqbGVlQHNhbXN1bmcuY29tLgorICogICAgICAtIG9ubHkgc3VwcG9ydCBmb3IgUzNDNjQwMAorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5BTUUJICAgIDogczNjNjQwMC5oCisgKgorICogQmFzZWQgb24gUzNDNjQwMCBVc2VyJ3MgbWFudWFsIFJldiAwLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19TM0M2NDAwX0hfXworI2RlZmluZSBfX1MzQzY0MDBfSF9fCisKKyNpZm5kZWYgQ09ORklHX1MzQzY0MDAKKyNkZWZpbmUgQ09ORklHX1MzQzY0MDAJCTEKKyNlbmRpZgorCisjZGVmaW5lIFMzQzY0WFhfVUFSVF9DSEFOTkVMUwkzCisjZGVmaW5lIFMzQzY0WFhfU1BJX0NIQU5ORUxTCTIKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjZGVmaW5lIEVMRklOX0NMT0NLX1BPV0VSX0JBU0UJMHg3ZTAwZjAwMAorCisvKiBDbG9jayAmIFBvd2VyIENvbnRyb2xsZXIgZm9yIG1EaXJhYzMqLworI2RlZmluZSBBUExMX0xPQ0tfT0ZGU0VUCTB4MDAKKyNkZWZpbmUgTVBMTF9MT0NLX09GRlNFVAkweDA0CisjZGVmaW5lIEVQTExfTE9DS19PRkZTRVQJMHgwOAorI2RlZmluZSBBUExMX0NPTl9PRkZTRVQJCTB4MEMKKyNkZWZpbmUgTVBMTF9DT05fT0ZGU0VUCQkweDEwCisjZGVmaW5lIEVQTExfQ09OMF9PRkZTRVQJMHgxNAorI2RlZmluZSBFUExMX0NPTjFfT0ZGU0VUCTB4MTgKKyNkZWZpbmUgQ0xLX1NSQ19PRkZTRVQJCTB4MUMKKyNkZWZpbmUgQ0xLX0RJVjBfT0ZGU0VUCQkweDIwCisjZGVmaW5lIENMS19ESVYxX09GRlNFVAkJMHgyNAorI2RlZmluZSBDTEtfRElWMl9PRkZTRVQJCTB4MjgKKyNkZWZpbmUgQ0xLX09VVF9PRkZTRVQJCTB4MkMKKyNkZWZpbmUgSENMS19HQVRFX09GRlNFVAkweDMwCisjZGVmaW5lIFBDTEtfR0FURV9PRkZTRVQJMHgzNAorI2RlZmluZSBTQ0xLX0dBVEVfT0ZGU0VUCTB4MzgKKyNkZWZpbmUgQUhCX0NPTjBfT0ZGU0VUCQkweDEwMAorI2RlZmluZSBBSEJfQ09OMV9PRkZTRVQJCTB4MTA0CisjZGVmaW5lIEFIQl9DT04yX09GRlNFVAkJMHgxMDgKKyNkZWZpbmUgU0VMRUNUX0RNQV9PRkZTRVQJMHgxMTAKKyNkZWZpbmUgU1dfUlNUX09GRlNFVAkJMHgxMTQKKyNkZWZpbmUgU1lTX0lEX09GRlNFVAkJMHgxMTgKKyNkZWZpbmUgTUVNX1NZU19DRkdfT0ZGU0VUCTB4MTIwCisjZGVmaW5lIFFPU19PVkVSUklERTBfT0ZGU0VUCTB4MTI0CisjZGVmaW5lIFFPU19PVkVSUklERTFfT0ZGU0VUCTB4MTI4CisjZGVmaW5lIE1FTV9DRkdfU1RBVF9PRkZTRVQJMHgxMkMKKyNkZWZpbmUgUFdSX0NGR19PRkZTRVQJCTB4ODA0CisjZGVmaW5lIEVJTlRfTUFTS19PRkZTRVQJMHg4MDgKKyNkZWZpbmUgTk9SX0NGR19PRkZTRVQJCTB4ODEwCisjZGVmaW5lIFNUT1BfQ0ZHX09GRlNFVAkJMHg4MTQKKyNkZWZpbmUgU0xFRVBfQ0ZHX09GRlNFVAkweDgxOAorI2RlZmluZSBPU0NfRlJFUV9PRkZTRVQJCTB4ODIwCisjZGVmaW5lIE9TQ19TVEFCTEVfT0ZGU0VUCTB4ODI0CisjZGVmaW5lIFBXUl9TVEFCTEVfT0ZGU0VUCTB4ODI4CisjZGVmaW5lIEZQQ19TVEFCTEVfT0ZGU0VUCTB4ODJDCisjZGVmaW5lIE1UQ19TVEFCTEVfT0ZGU0VUCTB4ODMwCisjZGVmaW5lIE9USEVSU19PRkZTRVQJCTB4OTAwCisjZGVmaW5lIFJTVF9TVEFUX09GRlNFVAkJMHg5MDQKKyNkZWZpbmUgV0FLRVVQX1NUQVRfT0ZGU0VUCTB4OTA4CisjZGVmaW5lIEJMS19QV1JfU1RBVF9PRkZTRVQJMHg5MEMKKyNkZWZpbmUgSU5GX1JFRzBfT0ZGU0VUCQkweEEwMAorI2RlZmluZSBJTkZfUkVHMV9PRkZTRVQJCTB4QTA0CisjZGVmaW5lIElORl9SRUcyX09GRlNFVAkJMHhBMDgKKyNkZWZpbmUgSU5GX1JFRzNfT0ZGU0VUCQkweEEwQworI2RlZmluZSBJTkZfUkVHNF9PRkZTRVQJCTB4QTEwCisjZGVmaW5lIElORl9SRUc1X09GRlNFVAkJMHhBMTQKKyNkZWZpbmUgSU5GX1JFRzZfT0ZGU0VUCQkweEExOAorI2RlZmluZSBJTkZfUkVHN19PRkZTRVQJCTB4QTFDCisKKyNkZWZpbmUgT1NDX0NOVF9WQUxfT0ZGU0VUCTB4ODI0CisjZGVmaW5lIFBXUl9DTlRfVkFMX09GRlNFVAkweDgyOAorI2RlZmluZSBGUENfQ05UX1ZBTF9PRkZTRVQJMHg4MkMKKyNkZWZpbmUgTVRDX0NOVF9WQUxfT0ZGU0VUCTB4ODMwCisKKyNkZWZpbmUgQVBMTF9MT0NLX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEFQTExfTE9DS19PRkZTRVQpCisjZGVmaW5lIE1QTExfTE9DS19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBNUExMX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBFUExMX0xPQ0tfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgRVBMTF9MT0NLX09GRlNFVCkKKyNkZWZpbmUgQVBMTF9DT05fUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQVBMTF9DT05fT0ZGU0VUKQorI2RlZmluZSBNUExMX0NPTl9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBNUExMX0NPTl9PRkZTRVQpCisjZGVmaW5lIEVQTExfQ09OMF9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBFUExMX0NPTjBfT0ZGU0VUKQorI2RlZmluZSBFUExMX0NPTjFfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgRVBMTF9DT04xX09GRlNFVCkKKyNkZWZpbmUgQ0xLX1NSQ19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBDTEtfU1JDX09GRlNFVCkKKyNkZWZpbmUgQ0xLX0RJVjBfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQ0xLX0RJVjBfT0ZGU0VUKQorI2RlZmluZSBDTEtfRElWMV9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBDTEtfRElWMV9PRkZTRVQpCisjZGVmaW5lIENMS19ESVYyX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIENMS19ESVYyX09GRlNFVCkKKyNkZWZpbmUgQ0xLX09VVF9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBDTEtfT1VUX09GRlNFVCkKKyNkZWZpbmUgSENMS19HQVRFX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEhDTEtfR0FURV9PRkZTRVQpCisjZGVmaW5lIFBDTEtfR0FURV9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBQQ0xLX0dBVEVfT0ZGU0VUKQorI2RlZmluZSBTQ0xLX0dBVEVfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgU0NMS19HQVRFX09GRlNFVCkKKyNkZWZpbmUgQUhCX0NPTjBfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQUhCX0NPTjBfT0ZGU0VUKQorI2RlZmluZSBBSEJfQ09OMV9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBBSEJfQ09OMV9PRkZTRVQpCisjZGVmaW5lIEFIQl9DT04yX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEFIQl9DT04yX09GRlNFVCkKKyNkZWZpbmUgU0VMRUNUX0RNQV9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBcCisJCQkJICAgICAgU0VMRUNUX0RNQV9PRkZTRVQpCisjZGVmaW5lIFNXX1JTVF9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTV19SU1RfT0ZGU0VUKQorI2RlZmluZSBTWVNfSURfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgU1lTX0lEX09GRlNFVCkKKyNkZWZpbmUgTUVNX1NZU19DRkdfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgXAorCQkJCSAgICAgIE1FTV9TWVNfQ0ZHX09GRlNFVCkKKyNkZWZpbmUgUU9TX09WRVJSSURFMF9SRUcJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBRT1NfT1ZFUlJJREUwX09GRlNFVCkKKyNkZWZpbmUgUU9TX09WRVJSSURFMV9SRUcJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBRT1NfT1ZFUlJJREUxX09GRlNFVCkKKyNkZWZpbmUgTUVNX0NGR19TVEFUX1JFRwlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgXAorCQkJCSAgICAgIE1FTV9DRkdfU1RBVF9PRkZTRVQpCisjZGVmaW5lIFBXUl9DRkdfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgUFdSX0NGR19PRkZTRVQpCisjZGVmaW5lIEVJTlRfTUFTS19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBFSU5UX01BU0tfT0ZGU0VUKQorI2RlZmluZSBOT1JfQ0ZHX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIE5PUl9DRkdfT0ZGU0VUKQorI2RlZmluZSBTVE9QX0NGR19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTVE9QX0NGR19PRkZTRVQpCisjZGVmaW5lIFNMRUVQX0NGR19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTTEVFUF9DRkdfT0ZGU0VUKQorI2RlZmluZSBPU0NfRlJFUV9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBPU0NfRlJFUV9PRkZTRVQpCisjZGVmaW5lIE9TQ19DTlRfVkFMX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBPU0NfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIFBXUl9DTlRfVkFMX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBQV1JfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIEZQQ19DTlRfVkFMX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBGUENfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIE1UQ19DTlRfVkFMX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBNVENfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIE9USEVSU19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBPVEhFUlNfT0ZGU0VUKQorI2RlZmluZSBSU1RfU1RBVF9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBSU1RfU1RBVF9PRkZTRVQpCisjZGVmaW5lIFdBS0VVUF9TVEFUX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBXQUtFVVBfU1RBVF9PRkZTRVQpCisjZGVmaW5lIEJMS19QV1JfU1RBVF9SRUcJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFwKKwkJCQkgICAgICBCTEtfUFdSX1NUQVRfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHMF9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBJTkZfUkVHMF9PRkZTRVQpCisjZGVmaW5lIElORl9SRUcxX1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUcxX09GRlNFVCkKKyNkZWZpbmUgSU5GX1JFRzJfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgSU5GX1JFRzJfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHM19SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBJTkZfUkVHM19PRkZTRVQpCisjZGVmaW5lIElORl9SRUc0X1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUc0X09GRlNFVCkKKyNkZWZpbmUgSU5GX1JFRzVfUkVHCQlfX1JFRyhFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgSU5GX1JFRzVfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHNl9SRUcJCV9fUkVHKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBJTkZfUkVHNl9PRkZTRVQpCisjZGVmaW5lIElORl9SRUc3X1JFRwkJX19SRUcoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUc3X09GRlNFVCkKKworI2RlZmluZSBBUExMX0xPQ0sJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBBUExMX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBNUExMX0xPQ0sJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBNUExMX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBFUExMX0xPQ0sJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBFUExMX0xPQ0tfT0ZGU0VUKQorI2RlZmluZSBBUExMX0NPTgkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEFQTExfQ09OX09GRlNFVCkKKyNkZWZpbmUgTVBMTF9DT04JKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBNUExMX0NPTl9PRkZTRVQpCisjZGVmaW5lIEVQTExfQ09OMAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEVQTExfQ09OMF9PRkZTRVQpCisjZGVmaW5lIEVQTExfQ09OMQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEVQTExfQ09OMV9PRkZTRVQpCisjZGVmaW5lIENMS19TUkMJCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQ0xLX1NSQ19PRkZTRVQpCisjZGVmaW5lIENMS19ESVYwCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQ0xLX0RJVjBfT0ZGU0VUKQorI2RlZmluZSBDTEtfRElWMQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIENMS19ESVYxX09GRlNFVCkKKyNkZWZpbmUgQ0xLX0RJVjIJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBDTEtfRElWMl9PRkZTRVQpCisjZGVmaW5lIENMS19PVVQJCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQ0xLX09VVF9PRkZTRVQpCisjZGVmaW5lIEhDTEtfR0FURQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEhDTEtfR0FURV9PRkZTRVQpCisjZGVmaW5lIFBDTEtfR0FURQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFBDTEtfR0FURV9PRkZTRVQpCisjZGVmaW5lIFNDTEtfR0FURQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFNDTEtfR0FURV9PRkZTRVQpCisjZGVmaW5lIEFIQl9DT04wCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgQUhCX0NPTjBfT0ZGU0VUKQorI2RlZmluZSBBSEJfQ09OMQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEFIQl9DT04xX09GRlNFVCkKKyNkZWZpbmUgQUhCX0NPTjIJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBBSEJfQ09OMl9PRkZTRVQpCisjZGVmaW5lIFNFTEVDVF9ETUEJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTRUxFQ1RfRE1BX09GRlNFVCkKKyNkZWZpbmUgU1dfUlNUCQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFNXX1JTVF9PRkZTRVQpCisjZGVmaW5lIFNZU19JRAkJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTWVNfSURfT0ZGU0VUKQorI2RlZmluZSBNRU1fU1lTX0NGRwkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIE1FTV9TWVNfQ0ZHX09GRlNFVCkKKyNkZWZpbmUgUU9TX09WRVJSSURFMAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFFPU19PVkVSUklERTBfT0ZGU0VUKQorI2RlZmluZSBRT1NfT1ZFUlJJREUxCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgUU9TX09WRVJSSURFMV9PRkZTRVQpCisjZGVmaW5lIE1FTV9DRkdfU1RBVAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIE1FTV9DRkdfU1RBVF9PRkZTRVQpCisjZGVmaW5lIFBXUl9DRkcJCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgUFdSX0NGR19PRkZTRVQpCisjZGVmaW5lIEVJTlRfTUFTSwkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEVJTlRfTUFTS19PRkZTRVQpCisjZGVmaW5lIE5PUl9DRkcJCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgTk9SX0NGR19PRkZTRVQpCisjZGVmaW5lIFNUT1BfQ0ZHCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgU1RPUF9DRkdfT0ZGU0VUKQorI2RlZmluZSBTTEVFUF9DRkcJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBTTEVFUF9DRkdfT0ZGU0VUKQorI2RlZmluZSBPU0NfRlJFUQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIE9TQ19GUkVRX09GRlNFVCkKKyNkZWZpbmUgT1NDX0NOVF9WQUwJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBPU0NfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIFBXUl9DTlRfVkFMCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgUFdSX0NOVF9WQUxfT0ZGU0VUKQorI2RlZmluZSBGUENfQ05UX1ZBTAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEZQQ19DTlRfVkFMX09GRlNFVCkKKyNkZWZpbmUgTVRDX0NOVF9WQUwJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBNVENfQ05UX1ZBTF9PRkZTRVQpCisjZGVmaW5lIE9USEVSUwkJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBPVEhFUlNfT0ZGU0VUKQorI2RlZmluZSBSU1RfU1RBVAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIFJTVF9TVEFUX09GRlNFVCkKKyNkZWZpbmUgV0FLRVVQX1NUQVQJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBXQUtFVVBfU1RBVF9PRkZTRVQpCisjZGVmaW5lIEJMS19QV1JfU1RBVAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIEJMS19QV1JfU1RBVF9PRkZTRVQpCisjZGVmaW5lIElORl9SRUcwCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgSU5GX1JFRzBfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHMQkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUcxX09GRlNFVCkKKyNkZWZpbmUgSU5GX1JFRzIJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBJTkZfUkVHMl9PRkZTRVQpCisjZGVmaW5lIElORl9SRUczCShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgSU5GX1JFRzNfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHNAkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUc0X09GRlNFVCkKKyNkZWZpbmUgSU5GX1JFRzUJKEVMRklOX0NMT0NLX1BPV0VSX0JBU0UgKyBJTkZfUkVHNV9PRkZTRVQpCisjZGVmaW5lIElORl9SRUc2CShFTEZJTl9DTE9DS19QT1dFUl9CQVNFICsgSU5GX1JFRzZfT0ZGU0VUKQorI2RlZmluZSBJTkZfUkVHNwkoRUxGSU5fQ0xPQ0tfUE9XRVJfQkFTRSArIElORl9SRUc3X09GRlNFVCkKKworCisvKgorICogR1BJTworICovCisjZGVmaW5lIEVMRklOX0dQSU9fQkFTRQkJMHg3ZjAwODAwMAorCisjZGVmaW5lIEdQQUNPTl9PRkZTRVQJCTB4MDAKKyNkZWZpbmUgR1BBREFUX09GRlNFVAkJMHgwNAorI2RlZmluZSBHUEFQVURfT0ZGU0VUCQkweDA4CisjZGVmaW5lIEdQQUNPTlNMUF9PRkZTRVQJMHgwQworI2RlZmluZSBHUEFQVURTTFBfT0ZGU0VUCTB4MTAKKyNkZWZpbmUgR1BCQ09OX09GRlNFVAkJMHgyMAorI2RlZmluZSBHUEJEQVRfT0ZGU0VUCQkweDA0CisjZGVmaW5lIEdQQlBVRF9PRkZTRVQJCTB4MDgKKyNkZWZpbmUgR1BCQ09OU0xQX09GRlNFVAkweDBDCisjZGVmaW5lIEdQQlBVRFNMUF9PRkZTRVQJMHgzMAorI2RlZmluZSBHUENDT05fT0ZGU0VUCQkweDQwCisjZGVmaW5lIEdQQ0RBVF9PRkZTRVQJCTB4NDQKKyNkZWZpbmUgR1BDUFVEX09GRlNFVAkJMHg0OAorI2RlZmluZSBHUENDT05TTFBfT0ZGU0VUCTB4NEMKKyNkZWZpbmUgR1BDUFVEU0xQX09GRlNFVAkweDUwCisjZGVmaW5lIEdQRENPTl9PRkZTRVQJCTB4NjAKKyNkZWZpbmUgR1BEREFUX09GRlNFVAkJMHg2NAorI2RlZmluZSBHUERQVURfT0ZGU0VUCQkweDY4CisjZGVmaW5lIEdQRENPTlNMUF9PRkZTRVQJMHg2QworI2RlZmluZSBHUERQVURTTFBfT0ZGU0VUCTB4NzAKKyNkZWZpbmUgR1BFQ09OX09GRlNFVAkJMHg4MAorI2RlZmluZSBHUEVEQVRfT0ZGU0VUCQkweDg0CisjZGVmaW5lIEdQRVBVRF9PRkZTRVQJCTB4ODgKKyNkZWZpbmUgR1BFQ09OU0xQX09GRlNFVAkweDhDCisjZGVmaW5lIEdQRVBVRFNMUF9PRkZTRVQJMHg5MAorI2RlZmluZSBHUEZDT05fT0ZGU0VUCQkweEEwCisjZGVmaW5lIEdQRkRBVF9PRkZTRVQJCTB4QTQKKyNkZWZpbmUgR1BGUFVEX09GRlNFVAkJMHhBOAorI2RlZmluZSBHUEZDT05TTFBfT0ZGU0VUCTB4QUMKKyNkZWZpbmUgR1BGUFVEU0xQX09GRlNFVAkweEIwCisjZGVmaW5lIEdQR0NPTl9PRkZTRVQJCTB4QzAKKyNkZWZpbmUgR1BHREFUX09GRlNFVAkJMHhDNAorI2RlZmluZSBHUEdQVURfT0ZGU0VUCQkweEM4CisjZGVmaW5lIEdQR0NPTlNMUF9PRkZTRVQJMHhDQworI2RlZmluZSBHUEdQVURTTFBfT0ZGU0VUCTB4RDAKKyNkZWZpbmUgR1BIQ09OMF9PRkZTRVQJCTB4RTAKKyNkZWZpbmUgR1BIQ09OMV9PRkZTRVQJCTB4RTQKKyNkZWZpbmUgR1BIREFUX09GRlNFVAkJMHhFOAorI2RlZmluZSBHUEhQVURfT0ZGU0VUCQkweEVDCisjZGVmaW5lIEdQSENPTlNMUF9PRkZTRVQJMHhGMAorI2RlZmluZSBHUEhQVURTTFBfT0ZGU0VUCTB4RjQKKyNkZWZpbmUgR1BJQ09OX09GRlNFVAkJMHgxMDAKKyNkZWZpbmUgR1BJREFUX09GRlNFVAkJMHgxMDQKKyNkZWZpbmUgR1BJUFVEX09GRlNFVAkJMHgxMDgKKyNkZWZpbmUgR1BJQ09OU0xQX09GRlNFVAkweDEwQworI2RlZmluZSBHUElQVURTTFBfT0ZGU0VUCTB4MTEwCisjZGVmaW5lIEdQSkNPTl9PRkZTRVQJCTB4MTIwCisjZGVmaW5lIEdQSkRBVF9PRkZTRVQJCTB4MTI0CisjZGVmaW5lIEdQSlBVRF9PRkZTRVQJCTB4MTI4CisjZGVmaW5lIEdQSkNPTlNMUF9PRkZTRVQJMHgxMkMKKyNkZWZpbmUgR1BKUFVEU0xQX09GRlNFVAkweDEzMAorI2RlZmluZSBNRU0wRFJWQ09OX09GRlNFVAkweDFEMAorI2RlZmluZSBNRU0xRFJWQ09OX09GRlNFVAkweDFENAorI2RlZmluZSBHUEtDT04wX09GRlNFVAkJMHg4MDAKKyNkZWZpbmUgR1BLQ09OMV9PRkZTRVQJCTB4ODA0CisjZGVmaW5lIEdQS0RBVF9PRkZTRVQJCTB4ODA4CisjZGVmaW5lIEdQS1BVRF9PRkZTRVQJCTB4ODBDCisjZGVmaW5lIEdQTENPTjBfT0ZGU0VUCQkweDgxMAorI2RlZmluZSBHUExDT04xX09GRlNFVAkJMHg4MTQKKyNkZWZpbmUgR1BMREFUX09GRlNFVAkJMHg4MTgKKyNkZWZpbmUgR1BMUFVEX09GRlNFVAkJMHg4MUMKKyNkZWZpbmUgR1BNQ09OX09GRlNFVAkJMHg4MjAKKyNkZWZpbmUgR1BNREFUX09GRlNFVAkJMHg4MjQKKyNkZWZpbmUgR1BNUFVEX09GRlNFVAkJMHg4MjgKKyNkZWZpbmUgR1BOQ09OX09GRlNFVAkJMHg4MzAKKyNkZWZpbmUgR1BOREFUX09GRlNFVAkJMHg4MzQKKyNkZWZpbmUgR1BOUFVEX09GRlNFVAkJMHg4MzgKKyNkZWZpbmUgR1BPQ09OX09GRlNFVAkJMHgxNDAKKyNkZWZpbmUgR1BPREFUX09GRlNFVAkJMHgxNDQKKyNkZWZpbmUgR1BPUFVEX09GRlNFVAkJMHgxNDgKKyNkZWZpbmUgR1BPQ09OU0xQX09GRlNFVAkweDE0QworI2RlZmluZSBHUE9QVURTTFBfT0ZGU0VUCTB4MTUwCisjZGVmaW5lIEdQUENPTl9PRkZTRVQJCTB4MTYwCisjZGVmaW5lIEdQUERBVF9PRkZTRVQJCTB4MTY0CisjZGVmaW5lIEdQUFBVRF9PRkZTRVQJCTB4MTY4CisjZGVmaW5lIEdQUENPTlNMUF9PRkZTRVQJMHgxNkMKKyNkZWZpbmUgR1BQUFVEU0xQX09GRlNFVAkweDE3MAorI2RlZmluZSBHUFFDT05fT0ZGU0VUCQkweDE4MAorI2RlZmluZSBHUFFEQVRfT0ZGU0VUCQkweDE4NAorI2RlZmluZSBHUFFQVURfT0ZGU0VUCQkweDE4OAorI2RlZmluZSBHUFFDT05TTFBfT0ZGU0VUCTB4MThDCisjZGVmaW5lIEdQUVBVRFNMUF9PRkZTRVQJMHgxOTAKKworI2RlZmluZSBFSU5UUEVORF9PRkZTRVQJCTB4OTI0CisKKyNkZWZpbmUgR1BBQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BBQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BBREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BBREFUX09GRlNFVCkKKyNkZWZpbmUgR1BBUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BBUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BBQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BBQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BBUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BBUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BCQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BCQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BCREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BCREFUX09GRlNFVCkKKyNkZWZpbmUgR1BCUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BCUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BCQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BCQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BCUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BCUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BDQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BDQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BDREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BDREFUX09GRlNFVCkKKyNkZWZpbmUgR1BDUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BDUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BDQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BDQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BDUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BDUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BEQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BEQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BEREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BEREFUX09GRlNFVCkKKyNkZWZpbmUgR1BEUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BEUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BEQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BEQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BEUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BEUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BFQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BFQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BFREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BFREFUX09GRlNFVCkKKyNkZWZpbmUgR1BFUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BFUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BFQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BFQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BFUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BFUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BGQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BGQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BGREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BGREFUX09GRlNFVCkKKyNkZWZpbmUgR1BGUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BGUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BGQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BGQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BGUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BGUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BHQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BHQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BHREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BHREFUX09GRlNFVCkKKyNkZWZpbmUgR1BHUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BHUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BHQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BHQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BHUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BHUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BIQ09OMF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSENPTjBfT0ZGU0VUKQorI2RlZmluZSBHUEhDT04xX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BIQ09OMV9PRkZTRVQpCisjZGVmaW5lIEdQSERBVF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSERBVF9PRkZTRVQpCisjZGVmaW5lIEdQSFBVRF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSFBVRF9PRkZTRVQpCisjZGVmaW5lIEdQSENPTlNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSENPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSFBVRFNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSFBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSUNPTl9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSUNPTl9PRkZTRVQpCisjZGVmaW5lIEdQSURBVF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSURBVF9PRkZTRVQpCisjZGVmaW5lIEdQSVBVRF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSVBVRF9PRkZTRVQpCisjZGVmaW5lIEdQSUNPTlNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSUNPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSVBVRFNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSVBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSkNPTl9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSkNPTl9PRkZTRVQpCisjZGVmaW5lIEdQSkRBVF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSkRBVF9PRkZTRVQpCisjZGVmaW5lIEdQSlBVRF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSlBVRF9PRkZTRVQpCisjZGVmaW5lIEdQSkNPTlNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSkNPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSlBVRFNMUF9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQSlBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQS0NPTjBfUkVHCQlfX1JFRyhFTEZJTl9HUElPX0JBU0UgKyBHUEtDT04wX09GRlNFVCkKKyNkZWZpbmUgR1BLQ09OMV9SRUcJCV9fUkVHKEVMRklOX0dQSU9fQkFTRSArIEdQS0NPTjFfT0ZGU0VUKQorI2RlZmluZSBHUEtEQVRfUkVHCQlfX1JFRyhFTEZJTl9HUElPX0JBU0UgKyBHUEtEQVRfT0ZGU0VUKQorI2RlZmluZSBHUEtQVURfUkVHCQlfX1JFRyhFTEZJTl9HUElPX0JBU0UgKyBHUEtQVURfT0ZGU0VUKQorI2RlZmluZSBHUExDT04wX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BMQ09OMF9PRkZTRVQpCisjZGVmaW5lIEdQTENPTjFfUkVHCQlfX1JFRyhFTEZJTl9HUElPX0JBU0UgKyBHUExDT04xX09GRlNFVCkKKyNkZWZpbmUgR1BMREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BMREFUX09GRlNFVCkKKyNkZWZpbmUgR1BMUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BMUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BNQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BNQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BNREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BNREFUX09GRlNFVCkKKyNkZWZpbmUgR1BNUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BNUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BOQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BOQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BOREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BOREFUX09GRlNFVCkKKyNkZWZpbmUgR1BOUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BOUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BPQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BPQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BPREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BPREFUX09GRlNFVCkKKyNkZWZpbmUgR1BPUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BPUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BPQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BPQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BPUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BPUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BQQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BQQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BQREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BQREFUX09GRlNFVCkKKyNkZWZpbmUgR1BQUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BQUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BQQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BQQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BQUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BQUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BRQ09OX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BRQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BRREFUX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BRREFUX09GRlNFVCkKKyNkZWZpbmUgR1BRUFVEX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BRUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BRQ09OU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BRQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BRUFVEU0xQX1JFRwkJX19SRUcoRUxGSU5fR1BJT19CQVNFICsgR1BRUFVEU0xQX09GRlNFVCkKKworLyoKKyAqIEJ1cyBNYXRyaXgKKyAqLworI2RlZmluZSBFTEZJTl9NRU1fU1lTX0NGRwkweDdlMDBmMTIwCisKKyNkZWZpbmUgR1BBQ09OCQkoRUxGSU5fR1BJT19CQVNFICsgR1BBQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BBREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BBREFUX09GRlNFVCkKKyNkZWZpbmUgR1BBUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BBUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BBQ09OU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUEFDT05TTFBfT0ZGU0VUKQorI2RlZmluZSBHUEFQVURTTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQQVBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQQkNPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQQkNPTl9PRkZTRVQpCisjZGVmaW5lIEdQQkRBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQQkRBVF9PRkZTRVQpCisjZGVmaW5lIEdQQlBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQQlBVRF9PRkZTRVQpCisjZGVmaW5lIEdQQkNPTlNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BCQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BCUFVEU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUEJQVURTTFBfT0ZGU0VUKQorI2RlZmluZSBHUENDT04JCShFTEZJTl9HUElPX0JBU0UgKyBHUENDT05fT0ZGU0VUKQorI2RlZmluZSBHUENEQVQJCShFTEZJTl9HUElPX0JBU0UgKyBHUENEQVRfT0ZGU0VUKQorI2RlZmluZSBHUENQVUQJCShFTEZJTl9HUElPX0JBU0UgKyBHUENQVURfT0ZGU0VUKQorI2RlZmluZSBHUENDT05TTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQQ0NPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQQ1BVRFNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BDUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BEQ09OCQkoRUxGSU5fR1BJT19CQVNFICsgR1BEQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BEREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BEREFUX09GRlNFVCkKKyNkZWZpbmUgR1BEUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BEUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BEQ09OU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUERDT05TTFBfT0ZGU0VUKQorI2RlZmluZSBHUERQVURTTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQRFBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQRUNPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQRUNPTl9PRkZTRVQpCisjZGVmaW5lIEdQRURBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQRURBVF9PRkZTRVQpCisjZGVmaW5lIEdQRVBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQRVBVRF9PRkZTRVQpCisjZGVmaW5lIEdQRUNPTlNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BFQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BFUFVEU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUEVQVURTTFBfT0ZGU0VUKQorI2RlZmluZSBHUEZDT04JCShFTEZJTl9HUElPX0JBU0UgKyBHUEZDT05fT0ZGU0VUKQorI2RlZmluZSBHUEZEQVQJCShFTEZJTl9HUElPX0JBU0UgKyBHUEZEQVRfT0ZGU0VUKQorI2RlZmluZSBHUEZQVUQJCShFTEZJTl9HUElPX0JBU0UgKyBHUEZQVURfT0ZGU0VUKQorI2RlZmluZSBHUEZDT05TTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQRkNPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQRlBVRFNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BGUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BHQ09OCQkoRUxGSU5fR1BJT19CQVNFICsgR1BHQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BHREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BHREFUX09GRlNFVCkKKyNkZWZpbmUgR1BHUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BHUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BHQ09OU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUEdDT05TTFBfT0ZGU0VUKQorI2RlZmluZSBHUEdQVURTTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQR1BVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSENPTjAJCShFTEZJTl9HUElPX0JBU0UgKyBHUEhDT04wX09GRlNFVCkKKyNkZWZpbmUgR1BIQ09OMQkJKEVMRklOX0dQSU9fQkFTRSArIEdQSENPTjFfT0ZGU0VUKQorI2RlZmluZSBHUEhEQVQJCShFTEZJTl9HUElPX0JBU0UgKyBHUEhEQVRfT0ZGU0VUKQorI2RlZmluZSBHUEhQVUQJCShFTEZJTl9HUElPX0JBU0UgKyBHUEhQVURfT0ZGU0VUKQorI2RlZmluZSBHUEhDT05TTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQSENPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSFBVRFNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BIUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BJQ09OCQkoRUxGSU5fR1BJT19CQVNFICsgR1BJQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BJREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BJREFUX09GRlNFVCkKKyNkZWZpbmUgR1BJUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BJUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BJQ09OU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUElDT05TTFBfT0ZGU0VUKQorI2RlZmluZSBHUElQVURTTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQSVBVRFNMUF9PRkZTRVQpCisjZGVmaW5lIEdQSkNPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQSkNPTl9PRkZTRVQpCisjZGVmaW5lIEdQSkRBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQSkRBVF9PRkZTRVQpCisjZGVmaW5lIEdQSlBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQSlBVRF9PRkZTRVQpCisjZGVmaW5lIEdQSkNPTlNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BKQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BKUFVEU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUEpQVURTTFBfT0ZGU0VUKQorI2RlZmluZSBHUEtDT04wCQkoRUxGSU5fR1BJT19CQVNFICsgR1BLQ09OMF9PRkZTRVQpCisjZGVmaW5lIEdQS0NPTjEJCShFTEZJTl9HUElPX0JBU0UgKyBHUEtDT04xX09GRlNFVCkKKyNkZWZpbmUgR1BLREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BLREFUX09GRlNFVCkKKyNkZWZpbmUgR1BLUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BLUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BMQ09OMAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTENPTjBfT0ZGU0VUKQorI2RlZmluZSBHUExDT04xCQkoRUxGSU5fR1BJT19CQVNFICsgR1BMQ09OMV9PRkZTRVQpCisjZGVmaW5lIEdQTERBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTERBVF9PRkZTRVQpCisjZGVmaW5lIEdQTFBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTFBVRF9PRkZTRVQpCisjZGVmaW5lIEdQTUNPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQTUNPTl9PRkZTRVQpCisjZGVmaW5lIEdQTURBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTURBVF9PRkZTRVQpCisjZGVmaW5lIEdQTVBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTVBVRF9PRkZTRVQpCisjZGVmaW5lIEdQTkNPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQTkNPTl9PRkZTRVQpCisjZGVmaW5lIEdQTkRBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTkRBVF9PRkZTRVQpCisjZGVmaW5lIEdQTlBVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQTlBVRF9PRkZTRVQpCisjZGVmaW5lIEdQT0NPTgkJKEVMRklOX0dQSU9fQkFTRSArIEdQT0NPTl9PRkZTRVQpCisjZGVmaW5lIEdQT0RBVAkJKEVMRklOX0dQSU9fQkFTRSArIEdQT0RBVF9PRkZTRVQpCisjZGVmaW5lIEdQT1BVRAkJKEVMRklOX0dQSU9fQkFTRSArIEdQT1BVRF9PRkZTRVQpCisjZGVmaW5lIEdQT0NPTlNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BPQ09OU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BPUFVEU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUE9QVURTTFBfT0ZGU0VUKQorI2RlZmluZSBHUFBDT04JCShFTEZJTl9HUElPX0JBU0UgKyBHUFBDT05fT0ZGU0VUKQorI2RlZmluZSBHUFBEQVQJCShFTEZJTl9HUElPX0JBU0UgKyBHUFBEQVRfT0ZGU0VUKQorI2RlZmluZSBHUFBQVUQJCShFTEZJTl9HUElPX0JBU0UgKyBHUFBQVURfT0ZGU0VUKQorI2RlZmluZSBHUFBDT05TTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQUENPTlNMUF9PRkZTRVQpCisjZGVmaW5lIEdQUFBVRFNMUAkoRUxGSU5fR1BJT19CQVNFICsgR1BQUFVEU0xQX09GRlNFVCkKKyNkZWZpbmUgR1BRQ09OCQkoRUxGSU5fR1BJT19CQVNFICsgR1BRQ09OX09GRlNFVCkKKyNkZWZpbmUgR1BRREFUCQkoRUxGSU5fR1BJT19CQVNFICsgR1BRREFUX09GRlNFVCkKKyNkZWZpbmUgR1BRUFVECQkoRUxGSU5fR1BJT19CQVNFICsgR1BRUFVEX09GRlNFVCkKKyNkZWZpbmUgR1BRQ09OU0xQCShFTEZJTl9HUElPX0JBU0UgKyBHUFFDT05TTFBfT0ZGU0VUKQorI2RlZmluZSBHUFFQVURTTFAJKEVMRklOX0dQSU9fQkFTRSArIEdQUVBVRFNMUF9PRkZTRVQpCisKKy8qCisgKiBNZW1vcnkgY29udHJvbGxlcgorICovCisjZGVmaW5lIEVMRklOX1NST01fQkFTRQkJMHg3MDAwMDAwMAorCisjZGVmaW5lIFNST01fQldfUkVHCV9fUkVHKEVMRklOX1NST01fQkFTRSArIDB4MCkKKyNkZWZpbmUgU1JPTV9CQzBfUkVHCV9fUkVHKEVMRklOX1NST01fQkFTRSArIDB4NCkKKyNkZWZpbmUgU1JPTV9CQzFfUkVHCV9fUkVHKEVMRklOX1NST01fQkFTRSArIDB4OCkKKyNkZWZpbmUgU1JPTV9CQzJfUkVHCV9fUkVHKEVMRklOX1NST01fQkFTRSArIDB4QykKKyNkZWZpbmUgU1JPTV9CQzNfUkVHCV9fUkVHKEVMRklOX1NST01fQkFTRSArIDB4MTApCisjZGVmaW5lIFNST01fQkM0X1JFRwlfX1JFRyhFTEZJTl9TUk9NX0JBU0UgKyAweDE0KQorI2RlZmluZSBTUk9NX0JDNV9SRUcJX19SRUcoRUxGSU5fU1JPTV9CQVNFICsgMHgxOCkKKworLyoKKyAqIFNEUkFNIENvbnRyb2xsZXIKKyAqLworI2RlZmluZSBFTEZJTl9ETUMwX0JBU0UJCTB4N2UwMDAwMDAKKyNkZWZpbmUgRUxGSU5fRE1DMV9CQVNFCQkweDdlMDAxMDAwCisKKyNkZWZpbmUgSU5ERVhfRE1DX01FTUNfU1RBVFVTCTB4MDAKKyNkZWZpbmUgSU5ERVhfRE1DX01FTUNfQ01ECTB4MDQKKyNkZWZpbmUgSU5ERVhfRE1DX0RJUkVDVF9DTUQJMHgwOAorI2RlZmluZSBJTkRFWF9ETUNfTUVNT1JZX0NGRwkweDBDCisjZGVmaW5lIElOREVYX0RNQ19SRUZSRVNIX1BSRAkweDEwCisjZGVmaW5lIElOREVYX0RNQ19DQVNfTEFURU5DWQkweDE0CisjZGVmaW5lIElOREVYX0RNQ19UX0RRU1MJMHgxOAorI2RlZmluZSBJTkRFWF9ETUNfVF9NUkQJCTB4MUMKKyNkZWZpbmUgSU5ERVhfRE1DX1RfUkFTCQkweDIwCisjZGVmaW5lIElOREVYX0RNQ19UX1JDCQkweDI0CisjZGVmaW5lIElOREVYX0RNQ19UX1JDRAkJMHgyOAorI2RlZmluZSBJTkRFWF9ETUNfVF9SRkMJCTB4MkMKKyNkZWZpbmUgSU5ERVhfRE1DX1RfUlAJCTB4MzAKKyNkZWZpbmUgSU5ERVhfRE1DX1RfUlJECQkweDM0CisjZGVmaW5lIElOREVYX0RNQ19UX1dSCQkweDM4CisjZGVmaW5lIElOREVYX0RNQ19UX1dUUgkJMHgzQworI2RlZmluZSBJTkRFWF9ETUNfVF9YUAkJMHg0MAorI2RlZmluZSBJTkRFWF9ETUNfVF9YU1IJCTB4NDQKKyNkZWZpbmUgSU5ERVhfRE1DX1RfRVNSCQkweDQ4CisjZGVmaW5lIElOREVYX0RNQ19NRU1PUllfQ0ZHMgkweDRDCisjZGVmaW5lIElOREVYX0RNQ19DSElQXzBfQ0ZHCTB4MjAwCisjZGVmaW5lIElOREVYX0RNQ19DSElQXzFfQ0ZHCTB4MjA0CisjZGVmaW5lIElOREVYX0RNQ19DSElQXzJfQ0ZHCTB4MjA4CisjZGVmaW5lIElOREVYX0RNQ19DSElQXzNfQ0ZHCTB4MjBDCisjZGVmaW5lIElOREVYX0RNQ19VU0VSX1NUQVRVUwkweDMwMAorI2RlZmluZSBJTkRFWF9ETUNfVVNFUl9DT05GSUcJMHgzMDQKKworLyoKKyAqIE1lbW9yeSBDaGlwIGRpcmVjdCBjb21tYW5kCisgKi8KKyNkZWZpbmUgRE1DX05PUDAJMHgwYzAwMDAKKyNkZWZpbmUgRE1DX05PUDEJMHgxYzAwMDAKKyNkZWZpbmUgRE1DX1BBMAkJMHgwMDAwMDAJLyogUHJlY2hhcmdlIGFsbCAqLworI2RlZmluZSBETUNfUEExCQkweDEwMDAwMAorI2RlZmluZSBETUNfQVIwCQkweDA0MDAwMAkvKiBBdXRvcmVmcmVzaCAqLworI2RlZmluZSBETUNfQVIxCQkweDE0MDAwMAorI2RlZmluZSBETUNfU0RSX01SMAkweDA4MDAzMgkvKiBNUlMsIENBUyAzLCAgQnVyc3QgTGVuZ3RoIDQgKi8KKyNkZWZpbmUgRE1DX1NEUl9NUjEJMHgxODAwMzIKKyNkZWZpbmUgRE1DX0REUl9NUjAJMHgwODAxNjIKKyNkZWZpbmUgRE1DX0REUl9NUjEJMHgxODAxNjIKKyNkZWZpbmUgRE1DX21ERFJfTVIwCTB4MDgwMDMyCS8qIENBUyAzLCBCdXJzdCBMZW5ndGggNCAqLworI2RlZmluZSBETUNfbUREUl9NUjEJMHgxODAwMzIKKyNkZWZpbmUgRE1DX21TRFJfRU1SMAkweDBhMDAwMAkvKiBFTVJTLCBEUzpGdWxsLCBQQVNSOkZ1bGwgQXJyYXkgKi8KKyNkZWZpbmUgRE1DX21TRFJfRU1SMQkweDFhMDAwMAorI2RlZmluZSBETUNfRERSX0VNUjAJMHgwOTAwMDAKKyNkZWZpbmUgRE1DX0REUl9FTVIxCTB4MTkwMDAwCisjZGVmaW5lIERNQ19tRERSX0VNUjAJMHgwYTAwMDAJLyogIERTOkZ1bGwsIFBBU1I6RnVsbCBBcnJheSAqLworI2RlZmluZSBETUNfbUREUl9FTVIxCTB4MWEwMDAwCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqIFNldCBtZW1vcnkgY29uZmlndXJhdGlvbgorICoJYWN0aXZlX2NoaXBzCT0gMSdiMCAoMSBjaGlwKQorICoJcW9zX21hc3Rlcl9jaGlwCT0gMydiMDAwKEFSSURbMzowXSkKKyAqCW1lbW9yeSBidXJzdAk9IDMnYjAxMChidXJzdCA0KQorICoJc3RvcF9tZW1fY2xvY2sJPSAxJ2IwKGRpc2FibGUgZHluYW1pY2FsIHN0b3ApCisgKglhdXRvX3Bvd2VyX2Rvd24JPSAxJ2IwKGRpc2FibGUgYXV0byBwb3dlci1kb3duIG1vZGUpCisgKglwb3dlcl9kb3duX3ByZAk9IDYnYjAwXzAwMDAoMCBjeWNsZSBmb3IgYXV0byBwb3dlci1kb3duKQorICoJYXBfYml0CQk9IDEnYjAgKGJpdCBwb3NpdGlvbiBvZiBhdXRvLXByZWNoYXJnZSBpcyAxMCkKKyAqCXJvd19iaXRzCT0gMydiMDEwKCMgcm93IGFkZHJlc3MgMTMpCisgKgljb2x1bW5fYml0cwk9IDMnYjAxMCgjIGNvbHVtbiBhZGRyZXNzIDEwICkKKyAqCisgKiBTZXQgdXNlciBjb25maWd1cmF0aW9uCisgKgkyJ2IxMD1TRFJBTS9tU0RSQU0sIDInYjExPUREUiwgMidiMDE9bUREUgorICoKKyAqIFNldCBjaGlwIHNlbGVjdCBmb3IgY2hpcCBbbl0KKyAqCSByb3cgYmFuayBjb250cm9sLCBiYW5rIGFkZHJlc3MgMHgzMDAwXzAwMDAgfiAweDM3ZmZfZmZmZgorICoJIENISVBfW25dX0NGRz0weDMwRjgsICAzMDogQUREUlszMToyNF0sIEY4OiBNYXNrWzMxOjI0XQorICovCisKKy8qCisgKiBOYW5kIGZsYXNoIGNvbnRyb2xsZXIKKyAqLworI2RlZmluZSBFTEZJTl9OQU5EX0JBU0UJCTB4NzAyMDAwMDAKKworI2RlZmluZSBORkNPTkZfT0ZGU0VUCQkweDAwCisjZGVmaW5lIE5GQ09OVF9PRkZTRVQJCTB4MDQKKyNkZWZpbmUgTkZDTU1EX09GRlNFVAkJMHgwOAorI2RlZmluZSBORkFERFJfT0ZGU0VUCQkweDBjCisjZGVmaW5lIE5GREFUQV9PRkZTRVQJCTB4MTAKKyNkZWZpbmUgTkZNRUNDREFUQTBfT0ZGU0VUCTB4MTQKKyNkZWZpbmUgTkZNRUNDREFUQTFfT0ZGU0VUCTB4MTgKKyNkZWZpbmUgTkZTRUNDREFUQTBfT0ZGU0VUCTB4MWMKKyNkZWZpbmUgTkZTQkxLX09GRlNFVAkJMHgyMAorI2RlZmluZSBORkVCTEtfT0ZGU0VUCQkweDI0CisjZGVmaW5lIE5GU1RBVF9PRkZTRVQJCTB4MjgKKyNkZWZpbmUgTkZFU1RBVDBfT0ZGU0VUCQkweDJjCisjZGVmaW5lIE5GRVNUQVQxX09GRlNFVAkJMHgzMAorI2RlZmluZSBORk1FQ0MwX09GRlNFVAkJMHgzNAorI2RlZmluZSBORk1FQ0MxX09GRlNFVAkJMHgzOAorI2RlZmluZSBORlNFQ0NfT0ZGU0VUCQkweDNjCisjZGVmaW5lIE5GTUxDQklUUFRfT0ZGU0VUCTB4NDAKKworI2RlZmluZSBORkNPTkYJCQkoRUxGSU5fTkFORF9CQVNFICsgTkZDT05GX09GRlNFVCkKKyNkZWZpbmUgTkZDT05UCQkJKEVMRklOX05BTkRfQkFTRSArIE5GQ09OVF9PRkZTRVQpCisjZGVmaW5lIE5GQ01NRAkJCShFTEZJTl9OQU5EX0JBU0UgKyBORkNNTURfT0ZGU0VUKQorI2RlZmluZSBORkFERFIJCQkoRUxGSU5fTkFORF9CQVNFICsgTkZBRERSX09GRlNFVCkKKyNkZWZpbmUgTkZEQVRBCQkJKEVMRklOX05BTkRfQkFTRSArIE5GREFUQV9PRkZTRVQpCisjZGVmaW5lIE5GTUVDQ0RBVEEwCQkoRUxGSU5fTkFORF9CQVNFICsgTkZNRUNDREFUQTBfT0ZGU0VUKQorI2RlZmluZSBORk1FQ0NEQVRBMQkJKEVMRklOX05BTkRfQkFTRSArIE5GTUVDQ0RBVEExX09GRlNFVCkKKyNkZWZpbmUgTkZTRUNDREFUQTAJCShFTEZJTl9OQU5EX0JBU0UgKyBORlNFQ0NEQVRBMF9PRkZTRVQpCisjZGVmaW5lIE5GU0JMSwkJCShFTEZJTl9OQU5EX0JBU0UgKyBORlNCTEtfT0ZGU0VUKQorI2RlZmluZSBORkVCTEsJCQkoRUxGSU5fTkFORF9CQVNFICsgTkZFQkxLX09GRlNFVCkKKyNkZWZpbmUgTkZTVEFUCQkJKEVMRklOX05BTkRfQkFTRSArIE5GU1RBVF9PRkZTRVQpCisjZGVmaW5lIE5GRVNUQVQwCQkoRUxGSU5fTkFORF9CQVNFICsgTkZFU1RBVDBfT0ZGU0VUKQorI2RlZmluZSBORkVTVEFUMQkJKEVMRklOX05BTkRfQkFTRSArIE5GRVNUQVQxX09GRlNFVCkKKyNkZWZpbmUgTkZNRUNDMAkJCShFTEZJTl9OQU5EX0JBU0UgKyBORk1FQ0MwX09GRlNFVCkKKyNkZWZpbmUgTkZNRUNDMQkJCShFTEZJTl9OQU5EX0JBU0UgKyBORk1FQ0MxX09GRlNFVCkKKyNkZWZpbmUgTkZTRUNDCQkJKEVMRklOX05BTkRfQkFTRSArIE5GU0VDQ19PRkZTRVQpCisjZGVmaW5lIE5GTUxDQklUUFQJCShFTEZJTl9OQU5EX0JBU0UgKyBORk1MQ0JJVFBUX09GRlNFVCkKKworI2RlZmluZSBORkNPTkZfUkVHCQlfX1JFRyhFTEZJTl9OQU5EX0JBU0UgKyBORkNPTkZfT0ZGU0VUKQorI2RlZmluZSBORkNPTlRfUkVHCQlfX1JFRyhFTEZJTl9OQU5EX0JBU0UgKyBORkNPTlRfT0ZGU0VUKQorI2RlZmluZSBORkNNRF9SRUcJCV9fUkVHKEVMRklOX05BTkRfQkFTRSArIE5GQ01NRF9PRkZTRVQpCisjZGVmaW5lIE5GQUREUl9SRUcJCV9fUkVHKEVMRklOX05BTkRfQkFTRSArIE5GQUREUl9PRkZTRVQpCisjZGVmaW5lIE5GREFUQV9SRUcJCV9fUkVHKEVMRklOX05BTkRfQkFTRSArIE5GREFUQV9PRkZTRVQpCisjZGVmaW5lIE5GREFUQThfUkVHCQlfX1JFR2IoRUxGSU5fTkFORF9CQVNFICsgTkZEQVRBX09GRlNFVCkKKyNkZWZpbmUgTkZNRUNDREFUQTBfUkVHCQlfX1JFRyhFTEZJTl9OQU5EX0JBU0UgKyBORk1FQ0NEQVRBMF9PRkZTRVQpCisjZGVmaW5lIE5GTUVDQ0RBVEExX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZNRUNDREFUQTFfT0ZGU0VUKQorI2RlZmluZSBORlNFQ0NEQVRBMF9SRUcJCV9fUkVHKEVMRklOX05BTkRfQkFTRSArIE5GU0VDQ0RBVEEwX09GRlNFVCkKKyNkZWZpbmUgTkZTQkxLX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZTQkxLX09GRlNFVCkKKyNkZWZpbmUgTkZFQkxLX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZFQkxLX09GRlNFVCkKKyNkZWZpbmUgTkZTVEFUX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZTVEFUX09GRlNFVCkKKyNkZWZpbmUgTkZFU1RBVDBfUkVHCQlfX1JFRyhFTEZJTl9OQU5EX0JBU0UgKyBORkVTVEFUMF9PRkZTRVQpCisjZGVmaW5lIE5GRVNUQVQxX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZFU1RBVDFfT0ZGU0VUKQorI2RlZmluZSBORk1FQ0MwX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZNRUNDMF9PRkZTRVQpCisjZGVmaW5lIE5GTUVDQzFfUkVHCQlfX1JFRyhFTEZJTl9OQU5EX0JBU0UgKyBORk1FQ0MxX09GRlNFVCkKKyNkZWZpbmUgTkZTRUNDX1JFRwkJX19SRUcoRUxGSU5fTkFORF9CQVNFICsgTkZTRUNDX09GRlNFVCkKKyNkZWZpbmUgTkZNTENCSVRQVF9SRUcJCV9fUkVHKEVMRklOX05BTkRfQkFTRSArIE5GTUxDQklUUFRfT0ZGU0VUKQorCisjZGVmaW5lIE5GQ09ORl9FQ0NfNEJJVAkJKDE8PDI0KQorCisjZGVmaW5lIE5GQ09OVF9FQ0NfRU5DCQkoMTw8MTgpCisjZGVmaW5lIE5GQ09OVF9XUAkJKDE8PDE2KQorI2RlZmluZSBORkNPTlRfTUVDQ0xPQ0sJCSgxPDw3KQorI2RlZmluZSBORkNPTlRfU0VDQ0xPQ0sJCSgxPDw2KQorI2RlZmluZSBORkNPTlRfSU5JVE1FQ0MJCSgxPDw1KQorI2RlZmluZSBORkNPTlRfSU5JVFNFQ0MJCSgxPDw0KQorI2RlZmluZSBORkNPTlRfSU5JVEVDQwkJKE5GQ09OVF9JTklUTUVDQyB8IE5GQ09OVF9JTklUU0VDQykKKyNkZWZpbmUgTkZDT05UX0NTX0FMVAkJKDE8PDIpCisjZGVmaW5lIE5GQ09OVF9DUwkJKDE8PDEpCisjZGVmaW5lIE5GQ09OVF9FTkFCTEUJCSgxPDwwKQorCisjZGVmaW5lIE5GU1RBVF9FQ0NFTkNET05FCSgxPDw3KQorI2RlZmluZSBORlNUQVRfRUNDREVDRE9ORQkoMTw8NikKKyNkZWZpbmUgTkZTVEFUX1JuQgkJKDE8PDApCisKKyNkZWZpbmUgTkZFU1RBVDBfRUNDQlVTWQkoMTw8MzEpCisKKy8qCisgKiBJbnRlcnJ1cHQKKyAqLworI2RlZmluZSBFTEZJTl9WSUMwX0JBU0VfQUREUgkweDcxMjAwMDAwCisjZGVmaW5lIEVMRklOX1ZJQzFfQkFTRV9BRERSCTB4NzEzMDAwMDAKKyNkZWZpbmUgb0lOVE1PRAkJCTB4MEMJLyogVklDIElOVCBTRUxFQ1QgKElSUSBvciBGSVEpICovCisjZGVmaW5lIG9JTlRVTk1TSwkJMHgxMAkvKiBWSUMgSU5UIEVOICh3cml0ZSAxIHRvIHVubWFzaykgKi8KKyNkZWZpbmUgb0lOVE1TSwkJCTB4MTQJLyogVklDIElOVCBFTiBDTEVBUiAod3JpdGUgMSB0byBtYXNrKSAqLworI2RlZmluZSBvSU5UU1VCTVNLCQkweDFDCS8qIFZJQyBTT0ZUIElOVCBDTEVBUiAqLworI2RlZmluZSBvVkVDVEFERFIJCTB4RjAwIC8qIFZJQyBBRERSRVNTICovCisKKy8qCisgKiBXYXRjaGRvZyB0aW1lcgorICovCisjZGVmaW5lIEVMRklOX1dBVENIRE9HX0JBU0UJMHg3RTAwNDAwMAorCisjZGVmaW5lIFdUQ09OX1JFRwkJX19SRUcoMHg3RTAwNDAwNCkKKyNkZWZpbmUgV1REQVRfUkVHCQlfX1JFRygweDdFMDA0MDA4KQorI2RlZmluZSBXVENOVF9SRUcJCV9fUkVHKDB4N0UwMDQwMEMpCisKKworLyoKKyAqIFVBUlQKKyAqLworI2RlZmluZSBFTEZJTl9VQVJUX0JBU0UJCTB4N0YwMDUwMDAKKworI2RlZmluZSBFTEZJTl9VQVJUMF9PRkZTRVQJMHgwMDAwCisjZGVmaW5lIEVMRklOX1VBUlQxX09GRlNFVAkweDA0MDAKKyNkZWZpbmUgRUxGSU5fVUFSVDJfT0ZGU0VUCTB4MDgwMAorCisjZGVmaW5lIFVMQ09OX09GRlNFVAkJMHgwMAorI2RlZmluZSBVQ09OX09GRlNFVAkJMHgwNAorI2RlZmluZSBVRkNPTl9PRkZTRVQJCTB4MDgKKyNkZWZpbmUgVU1DT05fT0ZGU0VUCQkweDBDCisjZGVmaW5lIFVUUlNUQVRfT0ZGU0VUCQkweDEwCisjZGVmaW5lIFVFUlNUQVRfT0ZGU0VUCQkweDE0CisjZGVmaW5lIFVGU1RBVF9PRkZTRVQJCTB4MTgKKyNkZWZpbmUgVU1TVEFUX09GRlNFVAkJMHgxQworI2RlZmluZSBVVFhIX09GRlNFVAkJMHgyMAorI2RlZmluZSBVUlhIX09GRlNFVAkJMHgyNAorI2RlZmluZSBVQlJESVZfT0ZGU0VUCQkweDI4CisjZGVmaW5lIFVESVZTTE9UX09GRlNFVAkJMHgyQworI2RlZmluZSBVSU5UUF9PRkZTRVQJCTB4MzAKKyNkZWZpbmUgVUlOVFNQX09GRlNFVAkJMHgzNAorI2RlZmluZSBVSU5UTV9PRkZTRVQJCTB4MzgKKworI2RlZmluZSBVTENPTjBfUkVHCQlfX1JFRygweDdGMDA1MDAwKQorI2RlZmluZSBVQ09OMF9SRUcJCV9fUkVHKDB4N0YwMDUwMDQpCisjZGVmaW5lIFVGQ09OMF9SRUcJCV9fUkVHKDB4N0YwMDUwMDgpCisjZGVmaW5lIFVNQ09OMF9SRUcJCV9fUkVHKDB4N0YwMDUwMEMpCisjZGVmaW5lIFVUUlNUQVQwX1JFRwkJX19SRUcoMHg3RjAwNTAxMCkKKyNkZWZpbmUgVUVSU1RBVDBfUkVHCQlfX1JFRygweDdGMDA1MDE0KQorI2RlZmluZSBVRlNUQVQwX1JFRwkJX19SRUcoMHg3RjAwNTAxOCkKKyNkZWZpbmUgVU1TVEFUMF9SRUcJCV9fUkVHKDB4N0YwMDUwMWMpCisjZGVmaW5lIFVUWEgwX1JFRwkJX19SRUcoMHg3RjAwNTAyMCkKKyNkZWZpbmUgVVJYSDBfUkVHCQlfX1JFRygweDdGMDA1MDI0KQorI2RlZmluZSBVQlJESVYwX1JFRwkJX19SRUcoMHg3RjAwNTAyOCkKKyNkZWZpbmUgVURJVlNMT1QwX1JFRwkJX19SRUcoMHg3RjAwNTAyYykKKyNkZWZpbmUgVUlOVFAwX1JFRwkJX19SRUcoMHg3RjAwNTAzMCkKKyNkZWZpbmUgVUlOVFNQMF9SRUcJCV9fUkVHKDB4N0YwMDUwMzQpCisjZGVmaW5lIFVJTlRNMF9SRUcJCV9fUkVHKDB4N0YwMDUwMzgpCisKKyNkZWZpbmUgVUxDT04xX1JFRwkJX19SRUcoMHg3RjAwNTQwMCkKKyNkZWZpbmUgVUNPTjFfUkVHCQlfX1JFRygweDdGMDA1NDA0KQorI2RlZmluZSBVRkNPTjFfUkVHCQlfX1JFRygweDdGMDA1NDA4KQorI2RlZmluZSBVTUNPTjFfUkVHCQlfX1JFRygweDdGMDA1NDBDKQorI2RlZmluZSBVVFJTVEFUMV9SRUcJCV9fUkVHKDB4N0YwMDU0MTApCisjZGVmaW5lIFVFUlNUQVQxX1JFRwkJX19SRUcoMHg3RjAwNTQxNCkKKyNkZWZpbmUgVUZTVEFUMV9SRUcJCV9fUkVHKDB4N0YwMDU0MTgpCisjZGVmaW5lIFVNU1RBVDFfUkVHCQlfX1JFRygweDdGMDA1NDFjKQorI2RlZmluZSBVVFhIMV9SRUcJCV9fUkVHKDB4N0YwMDU0MjApCisjZGVmaW5lIFVSWEgxX1JFRwkJX19SRUcoMHg3RjAwNTQyNCkKKyNkZWZpbmUgVUJSRElWMV9SRUcJCV9fUkVHKDB4N0YwMDU0MjgpCisjZGVmaW5lIFVESVZTTE9UMV9SRUcJCV9fUkVHKDB4N0YwMDU0MmMpCisjZGVmaW5lIFVJTlRQMV9SRUcJCV9fUkVHKDB4N0YwMDU0MzApCisjZGVmaW5lIFVJTlRTUDFfUkVHCQlfX1JFRygweDdGMDA1NDM0KQorI2RlZmluZSBVSU5UTTFfUkVHCQlfX1JFRygweDdGMDA1NDM4KQorCisjZGVmaW5lIFVUUlNUQVRfVFhfRU1QVFkJKDEgPDwgMikKKyNkZWZpbmUgVVRSU1RBVF9SWF9SRUFEWQkoMSA8PCAwKQorI2RlZmluZSBVQVJUX0VSUl9NQVNLCQkweEYKKworLyoKKyAqIFBXTSB0aW1lcgorICovCisjZGVmaW5lIEVMRklOX1RJTUVSX0JBU0UJMHg3RjAwNjAwMAorCisjZGVmaW5lIFRDRkcwX1JFRwlfX1JFRygweDdGMDA2MDAwKQorI2RlZmluZSBUQ0ZHMV9SRUcJX19SRUcoMHg3RjAwNjAwNCkKKyNkZWZpbmUgVENPTl9SRUcJX19SRUcoMHg3RjAwNjAwOCkKKyNkZWZpbmUgVENOVEIwX1JFRwlfX1JFRygweDdGMDA2MDBjKQorI2RlZmluZSBUQ01QQjBfUkVHCV9fUkVHKDB4N0YwMDYwMTApCisjZGVmaW5lIFRDTlRPMF9SRUcJX19SRUcoMHg3RjAwNjAxNCkKKyNkZWZpbmUgVENOVEIxX1JFRwlfX1JFRygweDdGMDA2MDE4KQorI2RlZmluZSBUQ01QQjFfUkVHCV9fUkVHKDB4N0YwMDYwMWMpCisjZGVmaW5lIFRDTlRPMV9SRUcJX19SRUcoMHg3RjAwNjAyMCkKKyNkZWZpbmUgVENOVEIyX1JFRwlfX1JFRygweDdGMDA2MDI0KQorI2RlZmluZSBUQ01QQjJfUkVHCV9fUkVHKDB4N0YwMDYwMjgpCisjZGVmaW5lIFRDTlRPMl9SRUcJX19SRUcoMHg3RjAwNjAyYykKKyNkZWZpbmUgVENOVEIzX1JFRwlfX1JFRygweDdGMDA2MDMwKQorI2RlZmluZSBUQ01QQjNfUkVHCV9fUkVHKDB4N0YwMDYwMzQpCisjZGVmaW5lIFRDTlRPM19SRUcJX19SRUcoMHg3RjAwNjAzOCkKKyNkZWZpbmUgVENOVEI0X1JFRwlfX1JFRygweDdGMDA2MDNjKQorI2RlZmluZSBUQ05UTzRfUkVHCV9fUkVHKDB4N0YwMDYwNDApCisKKy8qIEZpZWxkcyAqLworI2RlZmluZSBmVENGRzBfRFpPTkUJCUZsZCg4LCAxNikgLyogdGhlIGRlYWQgem9uZSBsZW5ndGggKD10aW1lciAwKSAqLworI2RlZmluZSBmVENGRzBfUFJFMQkJRmxkKDgsIDgpICAvKiBwcmVzY2FsZXIgdmFsdWUgZm9yIHRpbWUgMiwzLDQgKi8KKyNkZWZpbmUgZlRDRkcwX1BSRTAJCUZsZCg4LCAwKSAgLyogcHJlc2NhbGVyIHZhbHVlIGZvciB0aW1lIDAsMSAqLworI2RlZmluZSBmVENGRzFfTVVYNAkJRmxkKDQsIDE2KQorLyogYml0cyAqLworI2RlZmluZSBUQ0ZHMF9EWk9ORSh4KQkJRkluc3J0KCh4KSwgZlRDRkcwX0RaT05FKQorI2RlZmluZSBUQ0ZHMF9QUkUxKHgpCQlGSW5zcnQoKHgpLCBmVENGRzBfUFJFMSkKKyNkZWZpbmUgVENGRzBfUFJFMCh4KQkJRkluc3J0KCh4KSwgZlRDRkcwX1BSRTApCisjZGVmaW5lIFRDT05fNF9BVVRPCQkoMSA8PCAyMikgIC8qIGF1dG8gcmVsb2FkIG9uL29mZiBmb3IgVGltZXIgNCAqLworI2RlZmluZSBUQ09OXzRfVVBEQVRFCQkoMSA8PCAyMSkgIC8qIG1hbnVhbCBVcGRhdGUgVENOVEI0ICovCisjZGVmaW5lIFRDT05fNF9PTk9GRgkJKDEgPDwgMjApICAvKiAwOiBTdG9wLCAxOiBzdGFydCBUaW1lciA0ICovCisjZGVmaW5lIENPVU5UXzRfT04JCShUQ09OXzRfT05PRkYgKiAxKQorI2RlZmluZSBDT1VOVF80X09GRgkJKFRDT05fNF9PTk9GRiAqIDApCisjZGVmaW5lIFRDT05fM19BVVRPCQkoMSA8PCAxOSkgIC8qIGF1dG8gcmVsb2FkIG9uL29mZiBmb3IgVGltZXIgMyAqLworI2RlZmluZSBUSU1FUjNfQVRMT0FEX09OCShUQ09OXzNfQVVUTyAqIDEpCisjZGVmaW5lIFRJTUVSM19BVExBT0RfT0ZGCUZDbHJCaXQoVENPTiwgVENPTl8zX0FVVE8pCisjZGVmaW5lIFRDT05fM19JTlZFUlQJCSgxIDw8IDE4KSAgLyogMTogSW52ZXJ0ZXIgb24gZm9yIFRPVVQzICovCisjZGVmaW5lIFRJTUVSM19JVlRfT04JCShUQ09OXzNfSU5WRVJUICogMSkKKyNkZWZpbmUgVElNRVIzX0lWVF9PRkYJCShGQ2xyQml0KFRDT04sIFRDT05fM19JTlZFUlQpKQorI2RlZmluZSBUQ09OXzNfTUFOCQkoMSA8PCAxNykgIC8qIG1hbnVhbCBVcGRhdGUgVENOVEIzLFRDTVBCMyAqLworI2RlZmluZSBUSU1FUjNfTUFOVVAJCShUQ09OXzNfTUFOKjEpCisjZGVmaW5lIFRJTUVSM19OT1AJCShGQ2xyQml0KFRDT04sIFRDT05fM19NQU4pKQorI2RlZmluZSBUQ09OXzNfT05PRkYJCSgxIDw8IDE2KSAgLyogMDogU3RvcCwgMTogc3RhcnQgVGltZXIgMyAqLworI2RlZmluZSBUSU1FUjNfT04JCShUQ09OXzNfT05PRkYgKiAxKQorI2RlZmluZSBUSU1FUjNfT0ZGCQkoRkNsckJpdChUQ09OLCBUQ09OXzNfT05PRkYpKQorCisjaWYgZGVmaW5lZChDT05GSUdfQ0xLXzQwMF8xMDBfNTApCisjZGVmaW5lIFNUQVJUVVBfQU1ESVYJCTQwMAorI2RlZmluZSBTVEFSVFVQX01ESVYJCTQwMAorI2RlZmluZSBTVEFSVFVQX1BESVYJCTYKKyNkZWZpbmUgU1RBUlRVUF9TRElWCQkxCisjZWxpZiBkZWZpbmVkKENPTkZJR19DTEtfNDAwXzEzM182NikKKyNkZWZpbmUgU1RBUlRVUF9BTURJVgkJNDAwCisjZGVmaW5lIFNUQVJUVVBfTURJVgkJNTMzCisjZGVmaW5lIFNUQVJUVVBfUERJVgkJNgorI2RlZmluZSBTVEFSVFVQX1NESVYJCTEKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NMS181MzNfMTMzXzY2KQorI2RlZmluZSBTVEFSVFVQX0FNRElWCQk1MzMKKyNkZWZpbmUgU1RBUlRVUF9NRElWCQk1MzMKKyNkZWZpbmUgU1RBUlRVUF9QRElWCQk2CisjZGVmaW5lIFNUQVJUVVBfU0RJVgkJMQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ0xLXzY2N18xMzNfNjYpCisjZGVmaW5lIFNUQVJUVVBfQU1ESVYJCTY2NworI2RlZmluZSBTVEFSVFVQX01ESVYJCTUzMworI2RlZmluZSBTVEFSVFVQX1BESVYJCTYKKyNkZWZpbmUgU1RBUlRVUF9TRElWCQkxCisjZW5kaWYKKworI2RlZmluZQlTVEFSVFVQX1BDTEtESVYJCTMKKyNkZWZpbmUgU1RBUlRVUF9IQ0xLWDJESVYJMQorI2RlZmluZSBTVEFSVFVQX0hDTEtESVYJCTEKKyNkZWZpbmUgU1RBUlRVUF9NUExMRElWCQkxCisjZGVmaW5lIFNUQVJUVVBfQVBMTERJVgkJMAorCisjZGVmaW5lIENMS19ESVZfVkFMCSgoU1RBUlRVUF9QQ0xLRElWIDw8IDEyKSB8IChTVEFSVFVQX0hDTEtYMkRJViA8PCA5KSB8IFwKKwkoU1RBUlRVUF9IQ0xLRElWIDw8IDgpIHwgKFNUQVJUVVBfTVBMTERJVjw8NCkgfCBTVEFSVFVQX0FQTExESVYpCisjZGVmaW5lIE1QTExfVkFMCSgoMSA8PCAzMSkgfCAoU1RBUlRVUF9NRElWIDw8IDE2KSB8IFwKKwkoU1RBUlRVUF9QRElWIDw8IDgpIHwgU1RBUlRVUF9TRElWKQorI2RlZmluZSBTVEFSVFVQX01QTEwJKCgoQ09ORklHX1NZU19DTEtfRlJFUSA+PiBTVEFSVFVQX1NESVYpIC8gXAorCVNUQVJUVVBfUERJVikgKiBTVEFSVFVQX01ESVYpCisKKyNpZiBkZWZpbmVkKENPTkZJR19TWU5DX01PREUpCisjZGVmaW5lIEFQTExfVkFMCSgoMSA8PCAzMSkgfCAoU1RBUlRVUF9NRElWIDw8IDE2KSB8IFwKKwkoU1RBUlRVUF9QRElWIDw8IDgpIHwgU1RBUlRVUF9TRElWKQorI2RlZmluZSBTVEFSVFVQX0FQTEwJKCgoQ09ORklHX1NZU19DTEtfRlJFUSA+PiBTVEFSVFVQX1NESVYpIC8gXAorCVNUQVJUVVBfUERJVikgKiBTVEFSVFVQX01ESVYpCisjZGVmaW5lIFNUQVJUVVBfSENMSwkoU1RBUlRVUF9NUExMIC8gKFNUQVJUVVBfSENMS1gyRElWICsgMSkgLyBcCisJKFNUQVJUVVBfSENMS0RJViArIDEpKQorI2Vsc2UKKyNkZWZpbmUgQVBMTF9WQUwJKCgxIDw8IDMxKSB8IChTVEFSVFVQX0FNRElWIDw8IDE2KSB8IFwKKwkoU1RBUlRVUF9QRElWIDw8IDgpIHwgU1RBUlRVUF9TRElWKQorI2RlZmluZSBTVEFSVFVQX0FQTEwJKCgoQ09ORklHX1NZU19DTEtfRlJFUSA+PiBTVEFSVFVQX1NESVYpIC8gXAorCVNUQVJUVVBfUERJVikgKiBTVEFSVFVQX0FNRElWKQorI2RlZmluZSBTVEFSVFVQX0hDTEsJKFNUQVJUVVBfTVBMTCAvIChTVEFSVFVQX0hDTEtYMkRJViArIDEpIC8gXAorCShTVEFSVFVQX0hDTEtESVYgKyAxKSkKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBoeXNpY2FsIE1lbW9yeSBNYXAKKyAqLworI2RlZmluZSBETUMxX01FTV9DRkcJMHg4MDAxMDAxMgkvKiBDaGlwMSwgQnVyc3Q0LCBSb3cvQ29sdW1uIGJpdCAqLworI2RlZmluZSBETUMxX01FTV9DRkcyCTB4QjQ1CisjZGVmaW5lIERNQzFfQ0hJUDBfQ0ZHCTB4MTUwRjgJCS8qIDB4NDAwMF8wMDAwIH4gMHg0M2ZmX2ZmZmYgKDY0TUIpICovCisjZGVmaW5lIERNQ19ERFJfMzJfQ0ZHCTB4MCAJCS8qIDMyYml0LCBERFIgKi8KKworLyogTWVtb3J5IFBhcmFtZXRlcnMgKi8KKy8qIEREUiBQYXJhbWV0ZXJzICovCisjZGVmaW5lIEREUl90UkVGUkVTSAkJNzgwMAkvKiBucyAqLworI2RlZmluZSBERFJfdFJBUwkJNDUJLyogbnMgKG1pbjogNDVucykqLworI2RlZmluZSBERFJfdFJDIAkJNjgJLyogbnMgKG1pbjogNjcuNW5zKSovCisjZGVmaW5lIEREUl90UkNECQkyMwkvKiBucyAobWluOiAyMi41bnMpKi8KKyNkZWZpbmUgRERSX3RSRkMJCTgwCS8qIG5zIChtaW46IDgwbnMpKi8KKyNkZWZpbmUgRERSX3RSUCAJCTIzCS8qIG5zIChtaW46IDIyLjVucykqLworI2RlZmluZSBERFJfdFJSRAkJMTUJLyogbnMgKG1pbjogMTVucykqLworI2RlZmluZSBERFJfdFdSIAkJMTUJLyogbnMgKG1pbjogMTVucykqLworI2RlZmluZSBERFJfdFhTUgkJMTIwCS8qIG5zIChtaW46IDEyMG5zKSovCisjZGVmaW5lIEREUl9DQVNMCQkzCS8qIENBUyBMYXRlbmN5IDMgKi8KKworLyoKKyAqIG1ERFIgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqLworCisjZGVmaW5lIE5TX1RPX0NMSyh0KQkJKChTVEFSVFVQX0hDTEsgLyAxMDAwICogKHQpIC0gMSkgLyAxMDAwMDAwKQorCisjZGVmaW5lIERNQ19ERFJfQkFfRU1SUyAJMgorI2RlZmluZSBETUNfRERSX01FTV9DQVNMQVQJMworLyogNiAgIFNldCBDYXMgTGF0ZW5jeSB0byAzICovCisjZGVmaW5lIERNQ19ERFJfQ0FTX0xBVEVOQ1kJKEREUl9DQVNMIDw8IDEpCisvKiBNaW4gMC43NSB+IDEuMjUgKi8KKyNkZWZpbmUgRE1DX0REUl90X0RRU1MJCTEKKy8qIE1pbiAyIHRjayAqLworI2RlZmluZSBETUNfRERSX3RfTVJECQkyCisvKiA3LCBNaW4gNDVucyAqLworI2RlZmluZSBETUNfRERSX3RfUkFTCQkoTlNfVE9fQ0xLKEREUl90UkFTKSArIDEpCisvKiAxMCwgTWluIDY3LjVucyAqLworI2RlZmluZSBETUNfRERSX3RfUkMJCShOU19UT19DTEsoRERSX3RSQykgKyAxKQorLyogNCw1KFRSTSksIE1pbiAyMi41bnMgKi8KKyNkZWZpbmUgRE1DX0REUl90X1JDRAkJKE5TX1RPX0NMSyhERFJfdFJDRCkgKyAxKQorI2RlZmluZSBETUNfRERSX3NjaGVkdWxlX1JDRAkoKERNQ19ERFJfdF9SQ0QgLSAzKSA8PCAzKQorLyogMTEsMTgoVFJNKSBNaW4gODBucyAqLworI2RlZmluZSBETUNfRERSX3RfUkZDCQkoTlNfVE9fQ0xLKEREUl90UkZDKSArIDEpCisjZGVmaW5lIERNQ19ERFJfc2NoZWR1bGVfUkZDCSgoRE1DX0REUl90X1JGQyAtIDMpIDw8IDUpCisvKiA0LCA1KFRSTSkgTWluIDIyLjVucyAqLworI2RlZmluZSBETUNfRERSX3RfUlAJCShOU19UT19DTEsoRERSX3RSUCkgKyAxKQorI2RlZmluZSBETUNfRERSX3NjaGVkdWxlX1JQCSgoRE1DX0REUl90X1JQIC0gMykgPDwgMykKKy8qIDMsIE1pbiAxNW5zICovCisjZGVmaW5lIERNQ19ERFJfdF9SUkQJCShOU19UT19DTEsoRERSX3RSUkQpICsgMSkKKy8qIE1pbiAxNW5zICovCisjZGVmaW5lIERNQ19ERFJfdF9XUgkJKE5TX1RPX0NMSyhERFJfdFdSKSArIDEpCisjZGVmaW5lIERNQ19ERFJfdF9XVFIJCTIKKy8qIDF0Y2sgKyB0SVMoMS41bnMpICovCisjZGVmaW5lIERNQ19ERFJfdF9YUAkJMgorLyogMTcsIE1pbiAxMjBucyAqLworI2RlZmluZSBETUNfRERSX3RfWFNSCQkoTlNfVE9fQ0xLKEREUl90WFNSKSArIDEpCisjZGVmaW5lIERNQ19ERFJfdF9FU1IJCURNQ19ERFJfdF9YU1IKKy8qIFRSTSAyNjU2ICovCisjZGVmaW5lIERNQ19ERFJfUkVGUkVTSF9QUkQJKE5TX1RPX0NMSyhERFJfdFJFRlJFU0gpKQorLyogMmIwMSA6IG1ERFIgKi8KKyNkZWZpbmUgRE1DX0REUl9VU0VSX0NPTkZJRwkxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitlbnVtIHMzYzY0eHhfdWFydHNfbnIgeworCVMzQzY0WFhfVUFSVDAsCisJUzNDNjRYWF9VQVJUMSwKKwlTM0M2NFhYX1VBUlQyLAorfTsKKworI2luY2x1ZGUgInMzYzY0eDAuaCIKKworc3RhdGljIGlubGluZSBzM2M2NHh4X3VhcnQgKnMzYzY0eHhfZ2V0X2Jhc2VfdWFydChlbnVtIHMzYzY0eHhfdWFydHNfbnIgbnIpCit7CisJcmV0dXJuIChzM2M2NHh4X3VhcnQgKikoRUxGSU5fVUFSVF9CQVNFICsgKG5yICogMHg0MDApKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLypfX1MzQzY0MDBfSF9fKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjNjR4MC5oIGIvaW5jbHVkZS9zM2M2NHgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiZjFkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvczNjNjR4MC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIERhdmlkIE3Dg8WSbGxlciBFTFNPRlQgQUcgU3dpdHplcmxhbmQuIGQubXVlbGxlckBlbHNvZnQuY2gKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU1FCSAgICA6IFMzQzY0WFguaAorICogVmVyc2lvbiAgOiAzMS4zLjIwMDMKKyAqCisgKiBjb21tb24gc3R1ZmYgZm9yIFNBTVNVTkcgUzNDNjRYWCBTb0MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19TM0M2NFhYX0hfXworI2RlZmluZSBfX1MzQzY0WFhfSF9fCisKKyNpZiBkZWZpbmVkKENPTkZJR19TWU5DX01PREUpICYmIGRlZmluZWQoQ09ORklHX1MzQzY0MDApCisjZXJyb3IgQ09ORklHX1NZTkNfTU9ERSB1bmF2YWlsYWJsZSBvbiBTM0M2NDAwLCBwbGVhc2UsIGZpeCB5b3VyIGNvbmZpZ3VyYXRpb24hCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKiBVQVJUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTEpICovCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdTMyCVVMQ09OOworCXZvbGF0aWxlIHUzMglVQ09OOworCXZvbGF0aWxlIHUzMglVRkNPTjsKKwl2b2xhdGlsZSB1MzIJVU1DT047CisJdm9sYXRpbGUgdTMyCVVUUlNUQVQ7CisJdm9sYXRpbGUgdTMyCVVFUlNUQVQ7CisJdm9sYXRpbGUgdTMyCVVGU1RBVDsKKwl2b2xhdGlsZSB1MzIJVU1TVEFUOworI2lmZGVmIF9fQklHX0VORElBTgorCXZvbGF0aWxlIHU4CXJlczFbM107CisJdm9sYXRpbGUgdTgJVVRYSDsKKwl2b2xhdGlsZSB1OAlyZXMyWzNdOworCXZvbGF0aWxlIHU4CVVSWEg7CisjZWxzZSAvKiBMaXR0bGUgRW5kaWFuICovCisJdm9sYXRpbGUgdTgJVVRYSDsKKwl2b2xhdGlsZSB1OAlyZXMxWzNdOworCXZvbGF0aWxlIHU4CVVSWEg7CisJdm9sYXRpbGUgdTgJcmVzMlszXTsKKyNlbmRpZgorCXZvbGF0aWxlIHUzMglVQlJESVY7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdm9sYXRpbGUgdTgJcmVzM1syXTsKKwl2b2xhdGlsZSB1MTYJVURJVlNMT1Q7CisjZWxzZQorCXZvbGF0aWxlIHUxNglVRElWU0xPVDsKKwl2b2xhdGlsZSB1OAlyZXMzWzJdOworI2VuZGlmCit9IHMzYzY0eHhfdWFydDsKKworLyogUFdNIFRJTUVSIChzZWUgbWFudWFsIGNoYXB0ZXIgMTApICovCit0eXBlZGVmIHN0cnVjdCB7CisJdm9sYXRpbGUgdTMyCVRDTlRCOworCXZvbGF0aWxlIHUzMglUQ01QQjsKKwl2b2xhdGlsZSB1MzIJVENOVE87Cit9IHMzYzY0eHhfdGltZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1MzIJVENGRzA7CisJdm9sYXRpbGUgdTMyCVRDRkcxOworCXZvbGF0aWxlIHUzMglUQ09OOworCXMzYzY0eHhfdGltZXIJY2hbNF07CisJdm9sYXRpbGUgdTMyCVRDTlRCNDsKKwl2b2xhdGlsZSB1MzIJVENOVE80OworfSBzM2M2NHh4X3RpbWVyczsKKworI2VuZGlmIC8qX19TM0M2NFhYX0hfXyovCmRpZmYgLS1naXQgYS9saWJfYXJtL2JvYXJkLmMgYi9saWJfYXJtL2JvYXJkLmMKaW5kZXggNmUzZWYwOC4uNWFkZTg4MiAxMDA2NDQKLS0tIGEvbGliX2FybS9ib2FyZC5jCisrKyBiL2xpYl9hcm0vYm9hcmQuYwpAQCAtNDMwLDkgKzQzMCw5IEBACiAKIAkvKiBQZXJmb3JtIG5ldHdvcmsgY2FyZCBpbml0aWFsaXNhdGlvbiBpZiBuZWNlc3NhcnkgKi8KICNpZmRlZiBDT05GSUdfRFJJVkVSX1RJX0VNQUMKLWV4dGVybiB2b2lkIGRtNjQ0eF9ldGhfc2V0X21hY19hZGRyIChjb25zdCB1X2ludDhfdCAqYWRkcik7CitleHRlcm4gdm9pZCBkYXZpbmNpX2V0aF9zZXRfbWFjX2FkZHIgKGNvbnN0IHVfaW50OF90ICphZGRyKTsKIAlpZiAoZ2V0ZW52ICgiZXRoYWRkciIpKSB7Ci0JCWRtNjQ0eF9ldGhfc2V0X21hY19hZGRyKGdkLT5iZC0+YmlfZW5ldGFkZHIpOworCQlkYXZpbmNpX2V0aF9zZXRfbWFjX2FkZHIoZ2QtPmJkLT5iaV9lbmV0YWRkcik7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2xpYl9tNjhrL2JvYXJkLmMgYi9saWJfbTY4ay9ib2FyZC5jCmluZGV4IGU1OWM2YjAuLjRmZWUzNWEgMTAwNjQ0Ci0tLSBhL2xpYl9tNjhrL2JvYXJkLmMKKysrIGIvbGliX202OGsvYm9hcmQuYwpAQCAtNjMsNiArNjMsOCBAQAogI2luY2x1ZGUgPHNwaS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxuYW5kLmg+CisKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiBzdGF0aWMgY2hhciAqZmFpbGVkID0gIioqKiBmYWlsZWQgKioqXG4iOwpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9NYWtlZmlsZSBiL25hbmRfc3BsL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5ZWIyYQotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDYgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2LTIwMDcKKyMgU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDgKKyMgR3Vlbm5hZGkgTGlha2hvdmV0a2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitDT05GSUdfTkFORF9TUEwJPSB5CisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaW5jbHVkZSAkKFRPUERJUikvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLm1rCisKK0xEU0NSSVBUPSAkKFRPUERJUikvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworTERGTEFHUwk9IC1Cc3RhdGljIC1UICQoTERTQ1JJUFQpIC1UdGV4dCAkKFRFWFRfQkFTRSkgJChQTEFURk9STV9MREZMQUdTKQorQUZMQUdTCSs9IC1EQ09ORklHX05BTkRfU1BMCitDRkxBR1MJKz0gLURDT05GSUdfTkFORF9TUEwKKworU09CSlMJPSBzdGFydC5vIGNwdV9pbml0Lm8gbG93bGV2ZWxfaW5pdC5vCitDT0JKUwk9IG5hbmRfYm9vdC5vIG5hbmRfZWNjLm8gczNjNjR4eC5vCisKK1NSQ1MJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitfX09CSlMJOj0gJChTT0JKUykgJChDT0JKUykKK0xORElSCTo9ICQoT0JKVFJFRSkvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikKKworbmFuZG9iagk6PSAkKE9CSlRSRUUpL25hbmRfc3BsLworCitBTEwJPSAkKG5hbmRvYmopdS1ib290LXNwbCAkKG5hbmRvYmopdS1ib290LXNwbC5iaW4gJChuYW5kb2JqKXUtYm9vdC1zcGwtMTZrLmJpbgorCithbGw6CSQob2JqKS5kZXBlbmQgJChBTEwpCisKKyQobmFuZG9iail1LWJvb3Qtc3BsLTE2ay5iaW46ICQobmFuZG9iail1LWJvb3Qtc3BsCisJJChPQkpDT1BZKSAke09CSkNGTEFHU30gLS1wYWQtdG89JChQQURfVE8pIC1PIGJpbmFyeSAkPCAkQAorCiskKG5hbmRvYmopdS1ib290LXNwbC5iaW46CSQobmFuZG9iail1LWJvb3Qtc3BsCisJJChPQkpDT1BZKSAke09CSkNGTEFHU30gLU8gYmluYXJ5ICQ8ICRACisKKyQobmFuZG9iail1LWJvb3Qtc3BsOgkkKE9CSlMpCisJY2QgJChMTkRJUikgJiYgJChMRCkgJChMREZMQUdTKSAkKF9fT0JKUykgXAorCQktTWFwICQobmFuZG9iail1LWJvb3Qtc3BsLm1hcCBcCisJCS1vICQobmFuZG9iail1LWJvb3Qtc3BsCisKKyMgY3JlYXRlIHN5bWJvbGljIGxpbmtzIGZvciBjb21tb24gZmlsZXMKKworIyBmcm9tIGNwdSBkaXJlY3RvcnkKKyQob2JqKXN0YXJ0LlM6CisJQHJtIC1mICRACisJQGxuIC1zICQoVE9QRElSKS9jcHUvYXJtMTE3Ni9zdGFydC5TICRACisKKyMgZnJvbSBTb0MgZGlyZWN0b3J5CiskKG9iailjcHVfaW5pdC5TOgorCUBybSAtZiAkQAorCUBsbiAtcyAkKFRPUERJUikvY3B1L2FybTExNzYvczNjNjR4eC9jcHVfaW5pdC5TICRACisKKyMgZnJvbSBib2FyZCBkaXJlY3RvcnkKKyQob2JqKWxvd2xldmVsX2luaXQuUzoKKwlAcm0gLWYgJEAKKwlAbG4gLXMgJChUT1BESVIpL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvbG93bGV2ZWxfaW5pdC5TICRACisKKyMgZnJvbSBuYW5kX3NwbCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfYm9vdC5jOgorCUBybSAtZiAkQAorCUBsbiAtcyAkKFRPUERJUikvbmFuZF9zcGwvbmFuZF9ib290LmMgJEAKKworIyBmcm9tIGRyaXZlcnMvbXRkL25hbmQgZGlyZWN0b3J5CiskKG9iailuYW5kX2VjYy5jOgorCUBybSAtZiAkQAorCUBsbiAtcyAkKFRPUERJUikvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jICRACisKKyQob2JqKXMzYzY0eHguYzoKKwlAcm0gLWYgJEAKKwlAbG4gLXMgJChUT1BESVIpL2RyaXZlcnMvbXRkL25hbmQvczNjNjR4eC5jICRACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJChvYmopJS5vOgkkKG9iaiklLlMKKwkkKENDKSAkKEFGTEFHUykgLWMgLW8gJEAgJDwKKworJChvYmopJS5vOgkkKG9iaiklLmMKKwkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL2NvbmZpZy5tayBiL25hbmRfc3BsL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTYyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9uYW5kX3NwbC9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL2NvbmZpZy5tawpAQCAtMCwwICsxLDQwIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjCisjIFNhbXN1bmcgUzNDNjR4eCBSZWZlcmVuY2UgUGxhdGZvcm0gKHNtZGs2NDAwKSBib2FyZAorCisjIFRFWFRfQkFTRSBmb3IgU1BMOgorIworIyBPbiBTM0M2NHh4IHBsYXRmb3JtcyB0aGUgU1BMIGlzIGxvY2F0ZWQgaW4gU1JBTSBhdCAwLgorIworIyBURVhUX0JBU0UgPSAwCisKK2luY2x1ZGUgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy5taworCisjIFBBRF9UTyB1c2VkIHRvIGdlbmVyYXRlIGEgNGtCeXRlIGJpbmFyeSBuZWVkZWQgZm9yIHRoZSBjb21iaW5lZCBpbWFnZQorIyAtPiBQQURfVE8gPSBURVhUX0JBU0UgKyA0MDk2CitQQURfVE8JOj0gJChzaGVsbCBleHByICQkWyQoVEVYVF9CQVNFKSArIDQwOTZdKQorCitpZmVxICgkKGRlYnVnKSwxKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURERUJVRworZW5kaWYKZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvdS1ib290LmxkcyBiL25hbmRfc3BsL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmYwMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC91LWJvb3QubGRzCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldGtpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIHN0YXJ0Lm8JKC50ZXh0KQorCSAgY3B1X2luaXQubwkoLnRleHQpCisJICBuYW5kX2Jvb3QubwkoLnRleHQpCisKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IDRlNTA4YTAuLjg1ZmEwZGEgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTU3Niw3ICs1NzYsNyBAQAogZXh0ZXJuIGludCBlbWFjNHh4X21paXBoeV9pbml0aWFsaXplKGJkX3QgKmJpcyk7CiBleHRlcm4gaW50IG1jZjUyeDJfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIGV4dGVybiBpbnQgbnM3NTIwX21paXBoeV9pbml0aWFsaXplKGJkX3QgKmJpcyk7Ci1leHRlcm4gaW50IGRtNjQ0eF9ldGhfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKTsKK2V4dGVybiBpbnQgZGF2aW5jaV9ldGhfbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKTsKIAogCiBpbnQgZXRoX2luaXRpYWxpemUoYmRfdCAqYmlzKQpAQCAtNTk5LDcgKzU5OSw3IEBACiAJbnM3NTIwX21paXBoeV9pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19EUklWRVJfVElfRU1BQykKLQlkbTY0NHhfZXRoX21paXBoeV9pbml0aWFsaXplKGJpcyk7CisJZGF2aW5jaV9ldGhfbWlpcGh5X2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgogCXJldHVybiAwOwogfQo=