This is a multipart message in MIME format. ------------Zoidberg-BeMail-temp-------- Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable
Hi, I'm sending the diffs against sane-backends-1.0.15 for the sane port we use in ZETA, which is based on the BeSANE port from intuiware, and subsequent work from yellowTAB (usb support, ...). Parts of it are of general interest, like checks for header files, and the removal of libusb dependancy in the sm3600 backend. We did our best to clean it up, but there might still be some margin of improvement in the code, though I hope most of it will make to cvs. Comments are welcome. Yours, Fran=E7ois Revol francois dot revol at yellowtab dot com -- Software Architect YellowTab GmbH http://www.yellowtab.com/ ------------Zoidberg-BeMail-temp-------- Content-Transfer-Encoding: base64 Content-Disposition: Attachment Content-Type: text/plain; name=sane-backends-1.0.15.zeta.patch.001.txt VGhpcyBpcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBzYW5lLWJhY2tlbmRzLTEuMC4xNSB1c2VkIGlu IFpldGEgYW5kIHRoZSBvZmZpY2lhbCBhcmNoaXZlLgpJdCBpcyB1c2VkIHdpdGggdGhlIGZvbGxv d2luZyBjb25maWd1cmUgb3B0aW9uczoKCkJPT1RSRUxfSU5TVEFMTF9ESVIgOj0gYmVvcwpJTlNU QUxMX0RJUiA6PSAvYm9vdC8kKEJPT1RSRUxfSU5TVEFMTF9ESVIpCi4vY29uZmlndXJlIC0tcHJl Zml4PSQoSU5TVEFMTF9ESVIpIFwKLS1iaW5kaXI9JChJTlNUQUxMX0RJUikvYmluIFwKLS1zYmlu ZGlyPSQoSU5TVEFMTF9ESVIpL2JpbiBcCi0tbGliZGlyPSQoSU5TVEFMTF9ESVIpL3N5c3RlbS9s aWIgXAotLWluY2x1ZGVkaXI9JChJTlNUQUxMX0RJUikvZXRjL2RldmVsb3AvemV0YS1yMS1nY2My LXg4Ni9oZWFkZXJzIFwKLS1kYXRhZGlyPSQoSU5TVEFMTF9ESVIpL2V0YyBcCi0td2l0aC1kb2Nk aXI9JChJTlNUQUxMX0RJUikvZXRjL0xhbmd1YWdlL2RvY3VtZW50YXRpb24vZW5VUy9zYW5lIFwK LS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS10cmFuc2xhdGlvbnMgLS1lbmFibGUtcG5tLWJhY2tl bmQKClNvbWUgbm90ZXMgb24gdGhlIGNoYW5nZXMsIHNvbWUgZnJvbSB0aGUgb2xkIEJlU0FORSBw b3J0LCBzb21lIGJ5IG1lOgotIHRoZSBiYWNrZW5kcyBhcmUgbm90IGluc3RhbGxlZCBhcyBzaGFy ZWQgbGlicyBidXQgYXMgYWRkLW9ucywgd2hpY2ggYXJlIHNoYXJlZCBsaWJzIApidXQgaW4gYSBz cGVjaWZpYyBmb2xkZXIgaW4gWy9zeXN0ZW18fl0vY29uZmlnL2FkZC1vbnMvIG5hbWVkIFNBTkUv LgpUaGUgaW5zdGFsbCB0YXJnZXQgaGFzIGJlZW4gY2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGlz LAotIHNvbWUgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gQmVPUy9aRVRBIChpcGMuaCwgLi4uKSwKLSBi YWNrZW5kIGZ1bmN0aW9uIG5hbWVzIGdldCBhIHByZWZpeCwgSSBzdXBwb3NlIHRvIGF2b2lkIG5h bWVzcGFjZSBjbGFzaGVzLAotIHRob3VnaCB3ZSBkbyBoYXZlIGEgbGliZGwgdG8gaW1wbGVtZW50 IGRsX29wZW4sIHRoZSBuYXRpdmUgd2F5IGlzIHByZWZlcmVkLAotIHdlIGRvbid0IGhhdmUgYSBs aWJ1c2IgcG9ydCwgYW5kIEkgaGFkIGEgc20zNjAwIGFyb3VuZCwgc28gSSBwb3J0ZWQgdGhlIGJh Y2tlbmQgb3ZlciB0byBzYW5laSAKKHdhcyBpdCBzb21lIGtpbmQgb2YgZm9yZWlnbiBjb2RlIG5v dCBmdWxseSBwb3J0ZWQgPz8pLAotIHNuYXBzY2FuIG11dGV4IHN0dWZmIGltcGxlbWVudGVkIG5h dGl2ZWx5LCBjb3VsZG4ndCB0ZXN0IGl0IHRob3VnaCwgbm90IGV2ZW4gc3VyZSBpdCBpcyB1c2Vk LAotIGFkZGVkIGEgLS13aXRoLWRvY2Rpcj0gY29uZmlndXJlIGFyZywKLSBCZU9TIGhhcyBhIGJy b2tlbiBnZXRbbmFtZXxhZGRyXWluZm8oKSBmcm9tIGJpbmQuIFRoaXMgaXMgZml4ZWQgaW4gWkVU QSBSMS4KLSBsaWJ0b29sIG5lZWRzIC1uby11bmRlZmluZWQgKHRoaXMgc2hvdWxkIHJlYWxseSBi ZSBvbiBieSBkZWZhdWx0IGFueXdheSwgZm9yIGNvZGUgY29ycmVjdG5lc3MpLAotIHZhcmlvdXMg VlBBVEggZml4ZXMsCi0gY2hlY2sgZm9yIDxiZS9kcml2ZXJzL1VTQl9zY2FubmVyLmg+LCBidXQg bm90IHVzZWQgeWV0LAotIGdldHBhc3MgcmVwbGFjZW1lbnQsCi0gbm8gU19JRlNPQ0sgKHNvY2tl dHMgYXJlIGZkcyB0byAvZGV2L25ldC9hcGkpLAotIHN0dWIgcGlvIGNvZGUsIHVudGVzdGVkLAoK RnJhbmNvaXMgUmV2b2wuCgoKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9S RUFETUUuemV0YSBzYW5lL1JFQURNRS56ZXRhCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAu MTUvUkVBRE1FLnpldGEJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBzYW5lL1JFQURNRS56 ZXRhCVR1ZSBGZWIgMTUgMTU6MzA6NDMgMjAwNQpAQCAtMCwwICsxLDI2IEBACitTQU5FIGFuZCBa ZXRhCistLS0tLS0tLS0tLS0tCisKK1RoZSBaZXRhIHBvcnQgaXMgYmFzZWQgb24gZXhpc3Rpbmcg QmVPUyBwb3J0LCB3aXRoIHNvbWUgY2hhbmdlcyAKK3RvIGFjY29tb2RhdGUgeWVsbG93VEFCJ3Mg aW50ZXJuYWwgYnVpbGQgcHJvY2VkdXJlLCBhbmQgc29tZSBuZXcgCitjb252ZW50aW9ucyBicm91 Z2h0IHVwIGJ5IFpldGEuCisKK0NmLiBSRUFETUUuYmVvcyBmb3IgbW9yZSBoaXN0b3JpY2FsIHN0 dWZmLgorCitTQU5FIDEuMC45IHdhcyB1cGRhdGVkIGZvciBaZXRhIGJ5IEl0aGFtYXIgQWRlbWEg Zm9yIHllbGxvd1RBQi4KKworU0FORSAxLjAuMTUgd2FzIHVwZGF0ZWQgZm9yIEJlT1MgYW5kIFpl dGEgYnkgRnJhbsOnb2lzIFJldm9sIGZvciB5ZWxsb3dUQUIuCisKK1pldGEgdXNlcyBhIG1vZGlm aWVkIHZlcnNpb24gb2YgUGhpbGlwcGUgSG91ZG9pbidzIFNhbml0eSBHVUkgZnJvbnRlbmQuCito dHRwOi8vcGhpbGlwcGUuaG91ZG9pbi5mcmVlLmZyL3BoaWwvYmVvcy9zYW5pdHkvaW5kZXgtZW4u aHRtbAorCitTQU5FIHdhcyByZXBvcnRlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjb25m aWd1cmF0aW9uIGFuZCBmZWF0dXJlczoKKworUGxhdGZvcm06IFpldGEgUjEgKD09IEJlT1MgUjYu eCkgaXg4NgorTGF0ZXN0IFNBTkUgdmVyc2lvbiB0ZXN0ZWQ6IDEuMC4xNQorQ29tcGlsZXI6IGdj YyAyLjk1LjMKK1VzZXItbGV2ZWwgU0NTSSBzdXBwb3J0OiB5ZXMKK1VTQiBzdXBwb3J0OiB5ZXMK K1NoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ6IHllcworRHluYW1pYyBsb2FkaW5nIHN1cHBvcnQ6IHll cyAgCitYMTEgY2xpZW50czogbm8KZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4x NS9iYWNrZW5kL01ha2VmaWxlLmluIHNhbmUvYmFja2VuZC9NYWtlZmlsZS5pbgotLS0gL0RldmVs L3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvTWFrZWZpbGUuaW4JU3VuIE9jdCAxMCAxNDo0 Mzo0MiAyMDA0CisrKyBzYW5lL2JhY2tlbmQvTWFrZWZpbGUuaW4JV2VkIEFwciAgNiAxNTozODo0 NCAyMDA1CkBAIC0yNSw2ICsyNSw3IEBACiBpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACiBvbGRp bmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCiBjb25maWdkaXIgPSAke3N5c2NvbmZkaXJ9L3NhbmUu ZAorQkVPU19BRERPTkRJUiA9IEBCRU9TX0FERE9ORElSQAogCiBWX01BSk9SID0gQFZfTUFKT1JA CiBWX01JTk9SID0gQFZfTUlOT1JACkBAIC0xNzYsNyArMTc3LDE3IEBACiAKIGFsbDoJJChMSUJT KSBsaWJzYW5lLmxhCiAKLWluc3RhbGw6CitpbnN0YWxsOiBpbnN0YWxsLWJlQEJFX0lOU1RBTExf RkxBVk9SQCBpbnN0YWxsLWxpYnNhbmUgaW5zdGFsbC1iZWNmZworCisjIG5lZWQgdG8gY291bnRl ciBsaWJ0b29sIG1hZG5lc3MgaGVyZS4uLgoraW5zdGFsbC1iZS1iZW9zOgorCSQoTUtESVIpICQo REVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQobGlic2FuZWRpcikgJChERVNURElSKSQoY29u ZmlnZGlyKSAkKERFU1RESVIpJChCRU9TX0FERE9ORElSKQorCUBsaXN0PSIkKEFMTF9CQUNLRU5E UykiOyBmb3IgYmUgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvIGluc3RhbGxpbmcgJCR7YmV9IGlu ICQoQkVPU19BRERPTkRJUikvJCR7YmV9Li4uOyBcCisJICBjcCAtcCAubGlicy9saWJzYW5lLSQk e2JlfS5zbyAkKERFU1RESVIpJChCRU9TX0FERE9ORElSKS8kJHtiZX0gfHwgZXhpdCAxOyBcCisJ ZG9uZQorCitpbnN0YWxsLWJlOgogCSQoTUtESVIpICQoREVTVERJUikkKGxpYmRpcikgJChERVNU RElSKSQobGlic2FuZWRpcikgJChERVNURElSKSQoY29uZmlnZGlyKQogCUBsaXN0PSIkKExJQlMp IjsgZm9yIGJlIGluICQkbGlzdDsgZG8gXAogCSAgZWNobyBpbnN0YWxsaW5nICQke2JlfSBpbiAk KGxpYnNhbmVkaXIpLyQke2JlfS4uLjsgXApAQCAtMjAxLDggKzIxMiwxMiBAQAogIwkgIG5uPWBl Y2hvICQkbiB8IHNlZCAncyxebGlic2FuZS1kbGwsbGlic2FuZSwnYDsgXAogIwkgIChjZCAuLjsg aWYgdGVzdCAtZiBzYW5lLyQkbiA7IHRoZW4gJChMTl9TKSBzYW5lLyQkbiAkJG5uOyBmaTsgKTsg XAogIwlkb25lIHx8IGV4aXQgMQorCitpbnN0YWxsLWxpYnNhbmU6CiAJJChMSUJUT09MKSAkKE1J TlNUKSAkKElOU1RBTExfUFJPR1JBTSkgbGlic2FuZS5sYSBcCiAgICAgICAgICAgJChERVNURElS KSQobGliZGlyKS9saWJzYW5lLmxhCisKK2luc3RhbGwtYmVjZmc6CiAJQGxpc3Q9IiQoQ09ORklH UykiOyBmb3IgY2ZnIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAhIC1yICQoc3JjZGlyKS8k JHtjZmd9OyB0aGVuIGNvbnRpbnVlOyBmaTsgXAogCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChj b25maWdkaXIpLyQke2NmZ307IHRoZW4gXApAQCAtMzk0LDYgKzQwOSw3IEBACiBsaWJzYW5lLXNo YXJwLmxhOiAuLi9zYW5laS9zYW5laV9jb25zdHJhaW5fdmFsdWUubG8KIGxpYnNhbmUtc2hhcnAu bGE6IC4uL3NhbmVpL3NhbmVpX3Njc2kubG8KIGxpYnNhbmUtc20zNjAwLmxhOiAuLi9zYW5laS9z YW5laV9jb25zdHJhaW5fdmFsdWUubG8KK2xpYnNhbmUtc20zNjAwLmxhOiAuLi9zYW5laS9zYW5l aV91c2IubG8KIGxpYnNhbmUtc25hcHNjYW4ubGE6IC4uL3NhbmVpL3NhbmVpX2NvbmZpZzIubG8K IGxpYnNhbmUtc25hcHNjYW4ubGE6IC4uL3NhbmVpL3NhbmVpX2NvbnN0cmFpbl92YWx1ZS5sbwog bGlic2FuZS1zbmFwc2Nhbi5sYTogLi4vc2FuZWkvc2FuZWlfc2NzaS5sbwpkaWZmIC11ck4gL0Rl dmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaCBzYW5lL2Jh Y2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaAotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2Jh Y2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaAlTYXQgTWF5IDE1IDE1OjEzOjI5IDIwMDQKKysrIHNhbmUv YmFja2VuZC9hcnRlY19lcGx1czQ4dS5oCUZyaSBGZWIgIDQgMDc6NTk6MzMgMjAwNQpAQCAtNSw3 ICs1LDkgQEAKICNpbmNsdWRlICIuLi9pbmNsdWRlL3NhbmUvc2FuZWkuaCIKICNpbmNsdWRlICIu Li9pbmNsdWRlL3NhbmUvc2FuZW9wdHMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRl ZiBIQVZFX1NZU19JUENfSAogI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNlbmRpZgogI2luY2x1ZGUg PHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAt dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL2RsbC5jIHNhbmUvYmFja2Vu ZC9kbGwuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvZGxsLmMJTW9u IE1heSAyNCAyMToxMToyOSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvZGxsLmMJVGh1IEZlYiAxNyAw Mjo0OTo1MCAyMDA1CkBAIC01MCw2ICs1MCwxMyBAQAogIyBpbmNsdWRlICJsYWxsb2NhLmgiCQkv KiBNVVNUIGNvbWUgZmlyc3QgZm9yIEFJWCEgKi8KICNlbmRpZgogCisjaWZkZWYgX19CRU9TX18K KyNpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKyNpbmNsdWRlIDxzdG9yYWdlL0ZpbmREaXJlY3Rvcnku aD4KKyNpbmNsdWRlIDxrZXJuZWwvaW1hZ2UuaD4KKyNpbmNsdWRlIDxwb3NpeC9kaXJlbnQuaD4K KyNlbmRpZgorCiAjaW5jbHVkZSAic2FuZS9jb25maWcuaCIKICNpbmNsdWRlICJsYWxsb2NhLmgi CiAKQEAgLTE5OSw3ICsyMDYsOSBAQAogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAogfQogCisjaWZuZGVmIF9fQkVPU19fCiAjaW5jbHVkZSAiZGxsLXBy ZWxvYWQuYyIKKyNlbmRpZgogCiBzdHJ1Y3QgbWV0YV9zY2FubmVyCiB7CkBAIC0yMjQsMTEgKzIz MywyMCBAQAogc3RhdGljIHN0cnVjdCBhbGlhcyAqZmlyc3RfYWxpYXM7CiBzdGF0aWMgU0FORV9B dXRoX0NhbGxiYWNrIGF1dGhfY2FsbGJhY2s7CiBzdGF0aWMgc3RydWN0IGJhY2tlbmQgKmZpcnN0 X2JhY2tlbmQ7CisKKyNpZm5kZWYgX19CRU9TX18KIHN0YXRpYyBjb25zdCBjaGFyICpvcF9uYW1l W10gPSB7CiAgICJpbml0IiwgImV4aXQiLCAiZ2V0X2RldmljZXMiLCAib3BlbiIsICJjbG9zZSIs ICJnZXRfb3B0aW9uX2Rlc2NyaXB0b3IiLAogICAiY29udHJvbF9vcHRpb24iLCAiZ2V0X3BhcmFt ZXRlcnMiLCAic3RhcnQiLCAicmVhZCIsICJjYW5jZWwiLAogICAic2V0X2lvX21vZGUiLCAiZ2V0 X3NlbGVjdF9mZCIKIH07CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgKm9wX25hbWVbXSA9IHsK KyAgInNhbmVfaW5pdCIsICJzYW5lX2V4aXQiLCAic2FuZV9nZXRfZGV2aWNlcyIsICJzYW5lX29w ZW4iLCAic2FuZV9jbG9zZSIsICJzYW5lX2dldF9vcHRpb25fZGVzY3JpcHRvciIsCisgICJzYW5l X2NvbnRyb2xfb3B0aW9uIiwgInNhbmVfZ2V0X3BhcmFtZXRlcnMiLCAic2FuZV9zdGFydCIsICJz YW5lX3JlYWQiLCAic2FuZV9jYW5jZWwiLAorICAic2FuZV9zZXRfaW9fbW9kZSIsICJzYW5lX2dl dF9zZWxlY3RfZmQiCit9OworI2VuZGlmIC8qIF9fQkVPU19fICovCiAKIHN0YXRpYyB2b2lkICoK IG9wX3Vuc3VwcG9ydGVkICh2b2lkKQpAQCAtMjk4LDYgKzMxNiw1NyBAQAogfQogI2VuZGlmCiAK KyNpZmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KKworc3RhdGljIFNB TkVfU3RhdHVzCitsb2FkIChzdHJ1Y3QgYmFja2VuZCAqYmUpCit7CisJLy8gdXNlIEJlT1Mga2Vy bmVsIGZ1bmN0aW9uIHRvIGxvYWQgc2Nhbm5lciBhZGRvbnMgZnJvbSB+L2NvbmZpZy9hZGQtb25z L1NBTkUvCisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbWFnZV9pZCBpZCA9IC0xOworCWludCBp LCB3OworCWRpcmVjdG9yeV93aGljaCB3aGljaFszXSA9IHsgQl9VU0VSX0FERE9OU19ESVJFQ1RP UlksIEJfQ09NTU9OX0FERE9OU19ESVJFQ1RPUlksIEJfQkVPU19BRERPTlNfRElSRUNUT1JZIH07 CisJCisJLy8gbG9vayBmb3IgY29uZmlnIGZpbGVzIGluIFNBTkUvY29uZgorCWZvciAodyA9IDA7 ICh3IDwgMykgJiYgKGlkIDwgMCkgJiYgKGZpbmRfZGlyZWN0b3J5KHdoaWNoW3ddLDAsdHJ1ZSxw YXRoLFBBVEhfTUFYKSA9PSAwKTsgdysrKQorCXsKKwkJc3RyY2F0KHBhdGgsIi9TQU5FLyIpOwor CQlzdHJjYXQocGF0aCxiZS0+bmFtZSk7CisJCURCRygxLCAibG9hZGluZyBiYWNrZW5kICVzXG4i LCBiZS0+bmFtZSk7CisKKwkJLyogaW5pdGlhbGl6ZSBhbGwgb3BzIHRvICJ1bnN1cHBvcnRlZCIg c28gd2UgY2FuICJ1c2UiIHRoZSBiYWNrZW5kCisgICAgIAkgICBldmVuIGlmIHRoZSBzdHVmZiBs YXRlciBpbiB0aGlzIGZ1bmN0aW9uIGZhaWxzICovCisJCWJlLT5sb2FkZWQgPSAxOworCQliZS0+ aGFuZGxlID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9PUFM7ICsraSkgYmUtPm9wW2ldID0g b3BfdW5zdXBwb3J0ZWQ7CisgIAkJREJHKDIsICJkbG9wZW4oKWluZyBgJXMnXG4iLCBwYXRoKTsK KwkJaWQ9bG9hZF9hZGRfb24ocGF0aCk7CisJCWlmIChpZCA8IDApCisJCXsKKwkJCWNvbnRpbnVl OyAvKiB0cnkgbmV4dCBwYXRoICovCisJCX0KKyAgICAJYmUtPmhhbmRsZT0odm9pZCAqKWlkOwor CSAgICAJCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fT1BTOyArK2kpCisgICAgCXsKKyAgICAgIAkJ dm9pZCAqKCpvcCkgKCk7CisgICAgICAJCW9wID0gTlVMTDsKKwkgICAgICAJLyogTG9vayBmb3Ig dGhlIHN5bWJvbCAqLworCQkJaWYgKChnZXRfaW1hZ2Vfc3ltYm9sKGlkLCBvcF9uYW1lW2ldLEJf U1lNQk9MX1RZUEVfVEVYVCwodm9pZCAqKikmb3ApIDwgMCkgfHwgIW9wKQorCQkJICAgIERCRygy LCAidW5hYmxlIHRvIGZpbmQgJXNcbiIsIG9wX25hbWVbaV0pOworICAgICAgCQllbHNlIGJlLT5v cFtpXT1vcDsKKyAgICAgIAl9CisgICAgfQorCWlmIChpZCA8IDApCisgICAJeworCQlEQkcoMiwg ImxvYWQ6IGNvdWxkbid0IGZpbmQgJXNcbiIscGF0aCk7CisgICAgIAlyZXR1cm4gU0FORV9TVEFU VVNfSU5WQUw7CisgICAJfQorICByZXR1cm4gU0FORV9TVEFUVVNfR09PRDsKK30KKworI2Vsc2UK IHN0YXRpYyBTQU5FX1N0YXR1cwogbG9hZCAoc3RydWN0IGJhY2tlbmQgKmJlKQogewpAQCAtNTA1 LDYgKzU3NCw3IEBACiAgIHJldHVybiBTQU5FX1NUQVRVU19VTlNVUFBPUlRFRDsKICNlbmRpZiAv KiBIQVZFX0RMTCAqLwogfQorI2VuZGlmIC8qIF9fQkVPU19fICovCiAKIHN0YXRpYyBTQU5FX1N0 YXR1cwogaW5pdCAoc3RydWN0IGJhY2tlbmQgKmJlKQpAQCAtNTQ1LDYgKzYxNSw3IEBACiBzdGF0 aWMgdm9pZAogYWRkX2FsaWFzIChjb25zdCBjaGFyICpsaW5lX3BhcmFtKQogeworI2lmbmRlZiBf X0JFT1NfXwogICBjb25zdCBjaGFyICpjb21tYW5kOwogICBlbnVtCiAgIHsgQ01EX0FMSUFTLCBD TURfSElERSB9CkBAIC02MjgsMTcgKzY5OSwyNiBAQAogICAgICAgZnJlZSAoYWxpYXMpOwogICAg IH0KICAgcmV0dXJuOworI2VuZGlmCiB9CiAKIAogU0FORV9TdGF0dXMKIHNhbmVfaW5pdCAoU0FO RV9JbnQgKiB2ZXJzaW9uX2NvZGUsIFNBTkVfQXV0aF9DYWxsYmFjayBhdXRob3JpemUpCiB7Cisj aWZuZGVmIF9fQkVPU19fCiAgIGNoYXIgY29uZmlnX2xpbmVbUEFUSF9NQVhdOwogICBjaGFyICpi YWNrZW5kX25hbWU7CiAgIHNpemVfdCBsZW47CiAgIEZJTEUgKmZwOwogICBpbnQgaTsKKyNlbHNl CisgIERJUiAqZGlyOworICBzdHJ1Y3QgZGlyZW50ICpkaXJlbnQ7CisgIGNoYXIgcGF0aFsxMDI0 XTsKKyAgZGlyZWN0b3J5X3doaWNoIHdoaWNoWzNdID0geyBCX1VTRVJfQURET05TX0RJUkVDVE9S WSwgQl9DT01NT05fQURET05TX0RJUkVDVE9SWSwgQl9CRU9TX0FERE9OU19ESVJFQ1RPUlkgfTsK KyAgaW50IGk7CisjZW5kaWYJCiAKICAgREJHX0lOSVQgKCk7CiAKQEAgLTY0Nyw2ICs3MjcsNyBA QAogICBEQkcgKDEsICJzYW5lX2luaXQ6IFNBTkUgZGxsIGJhY2tlbmQgdmVyc2lvbiAlcyBmcm9t ICVzXG4iLCBETExfVkVSU0lPTiwKICAgICAgICBQQUNLQUdFX1NUUklORyk7CiAKKyNpZm5kZWYg X19CRU9TX18KICAgLyogY2hhaW4gcHJlbG9hZGVkIGJhY2tlbmRzIHRvZ2V0aGVyOiAqLwogICBm b3IgKGkgPSAwOyBpIDwgTkVMRU1TIChwcmVsb2FkZWRfYmFja2VuZHMpOyArK2kpCiAgICAgewpA QCAtNzE4LDYgKzc5OSwyOCBAQAogICAgICAgYWRkX2FsaWFzIChjb25maWdfbGluZSk7CiAgICAg fQogICBmY2xvc2UgKGZwKTsKKworI2Vsc2UgIAorCS8vIG5vIHVnbHkgY29uZmlnIGZpbGVzLCBq dXN0IGdldCBzY2FubmVycyBmcm9tIHRoZWlyIH4vY29uZmlnL2FkZC1vbnMvU0FORQorCS8vIGxv b2sgZm9yIGRyaXZlcnMKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCXsKKwkJaWYgKGZpbmRf ZGlyZWN0b3J5KHdoaWNoW2ldLDAsdHJ1ZSxwYXRoLDEwMjQpIDwgQl9PSykKKwkJCWNvbnRpbnVl OworCQlzdHJjYXQocGF0aCwiL1NBTkUvIik7CisJCWRpcj1vcGVuZGlyKHBhdGgpOworCQlpZigh ZGlyKSBjb250aW51ZTsgCisKKwkJd2hpbGUoKGRpcmVudD1yZWFkZGlyKGRpcikpKQorCQl7CisJ CQlpZigoc3RyY21wKGRpcmVudC0+ZF9uYW1lLCIuIik9PTApIHx8IChzdHJjbXAoZGlyZW50LT5k X25hbWUsIi4uIik9PTApKSBjb250aW51ZTsKKwkJCWlmKChzdHJjbXAoZGlyZW50LT5kX25hbWUs ImRsbCIpPT0wKSkgY29udGludWU7CisJCQlhZGRfYmFja2VuZChkaXJlbnQtPmRfbmFtZSwwKTsg CisJCX0KKwkJY2xvc2VkaXIoZGlyKTsKKwl9CisjZW5kaWYgLyogX19CRU9TX18gKi8KKwogICBy ZXR1cm4gU0FORV9TVEFUVVNfR09PRDsKIH0KIApAQCAtNzQwLDYgKzg0MywxMCBAQAogCQkgICBi ZS0+bmFtZSk7CiAJICAgICAgKCoob3BfZXhpdF90KWJlLT5vcFtPUF9FWElUXSkgKCk7CiAJICAg IH0KKyNpZmRlZiBfX0JFT1NfXworCQkJLy8gdXNlIEJlT1Mga2VybmVsIGZ1bmN0aW9ucyB0byB1 bmxvYWQgYWRkLW9ucworCQkJaWYoYmUtPmhhbmRsZSkgdW5sb2FkX2FkZF9vbigoaW1hZ2VfaWQp YmUtPmhhbmRsZSk7CQorI2Vsc2UKICNpZmRlZiBIQVZFX0RMTAogCiAjaWZkZWYgSEFWRV9ETE9Q RU4KQEAgLTc2MCw2ICs4NjcsNyBAQAogI2VuZGlmIC8qIEhBVkVfRExPUEVOICovCiAKICNlbmRp ZiAvKiBIQVZFX0RMTCAqLworI2VuZGlmIC8qIF9fQkVPU19fICovCiAJfQogICAgICAgaWYgKCFi ZS0+cGVybWFuZW50KQogCXsKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9i YWNrZW5kL3BsdXN0ZWstcHBfc2Nhbi5oIHNhbmUvYmFja2VuZC9wbHVzdGVrLXBwX3NjYW4uaAot LS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvcGx1c3Rlay1wcF9zY2FuLmgJ RnJpIEp1bCAxNiAxODozMzo0NSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvcGx1c3Rlay1wcF9zY2Fu LmgJRnJpIEZlYiAgNCAxMToyNjo1MiAyMDA1CkBAIC03Miw3ICs3MiwxMSBAQAogIyBpbmNsdWRl IDxzdGRpby5oPgogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4K LSMgaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorIyBpZmRlZiBIQVZFX1NZU19TSUdOQUxfSAorIyAg aW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxzaWduYWwuaD4KKyMg ZW5kaWYKICMgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjIGlmZGVmIEhBVkVfU1lTX0lPX0gKICMg IGluY2x1ZGUgPHN5cy9pby5oPgpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1 L2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYyBzYW5lL2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYwot LS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYwlG cmkgQXByIDE2IDAwOjUxOjI1IDIwMDQKKysrIHNhbmUvYmFja2VuZC9zbTM2MDAtc2NhbnVzYi5j CVdlZCBBcHIgMTMgMTg6MDM6MDQgMjAwNQpAQCAtNjgsNiArNjgsNyBAQAogCQkgICAgICAgaW50 ICBjY2hCdWZmZXIsCiAJCSAgICAgICBpbnQgIGNKaWZmaWVzVGltZW91dCkKIHsKKyNpZiBIQVZF X0xJQlVTQgogICByZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHRoaXMtPmhTY2FubmVyLAogCQkJIG5S ZXFUeXBlLAogCQkJIG5SZXF1ZXN0LApAQCAtNzYsNiArNzcsMTkgQEAKIAkJCSBwQnVmZmVyLAog CQkJIGNjaEJ1ZmZlciwKIAkJCSBjSmlmZmllc1RpbWVvdXQpOworI2Vsc2UKKyAgaW50IGVycjsK KyAgZXJyID0gc2FuZWlfdXNiX2NvbnRyb2xfbXNnKHRoaXMtPmhTY2FubmVyLAorCQkJIG5SZXFU eXBlLAorCQkJIG5SZXF1ZXN0LAorCQkJIG5WYWx1ZSwKKwkJCSBuSW5kZXgsCisJCQkgY2NoQnVm ZmVyLC8vPworCQkJIHBCdWZmZXIpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisgIHJl dHVybiBjY2hCdWZmZXI7CisjZW5kaWYKIH0KIAogLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTAsMTEg KzEwNCwyMyBAQAogCSAgICAgaW50IGNjaE1heCwKIAkgICAgIGludCBjSmlmZmllc1RpbWVvdXQp CiB7CisjaWYgSEFWRV9MSUJVU0IKICAgcmV0dXJuIHVzYl9idWxrX3JlYWQodGhpcy0+aFNjYW5u ZXIsCiAJCSAgICAgICBuRW5kUG9pbnQsCiAJCSAgICAgICBwQnVmZmVyLAogCQkgICAgICAgY2No TWF4LAogCQkgICAgICAgY0ppZmZpZXNUaW1lb3V0KTsKKyNlbHNlCisgIGludCBlcnI7CisgIHNp emVfdCBzeiA9IGNjaE1heDsKKyAgZXJyID0gc2FuZWlfdXNiX3JlYWRfYnVsayh0aGlzLT5oU2Nh bm5lciwKKwkJICAgICAgIC8vbkVuZFBvaW50LAorCQkgICAgICAgcEJ1ZmZlciwKKwkJICAgICAg ICZzeik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgcmV0dXJuIHN6OworI2VuZGlm CiB9CiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMxMCw3ICszMzYsMTMgQEAKIAl7CiAJICByYz1T ZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLAogCQkgICAgICAiYnVsayByZWFkIG9m ICVkIGJ5dGVzIGZhaWxlZDogJXMiLAotCQkgICAgICBjY2hDaHVuayx1c2Jfc3RyZXJyb3IoKSk7 CisJCSAgICAgIGNjaENodW5rLAorI2lmIEhBVkVfTElCVVNCCisJCSAgICAgIHVzYl9zdHJlcnJv cigpCisjZWxzZQorCQkgICAgICAidW5rbm93biIKKyNlbmRpZgorCQkgICAgICApOwogCSAgY29u dGludWU7CiAJfQogICAgIH0KQEAgLTM3MSw3ICs0MDMsMTMgQEAKICAgICAgIGVsc2UKIAlyYz1T ZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLAogCQkgICAgImJ1bGsgcmVhZCBvZiAl ZCBieXRlcyBmYWlsZWQ6ICVzIiwKLQkJICAgIGNjaENodW5rLHVzYl9zdHJlcnJvcigpKTsKKwkJ ICAgIGNjaENodW5rLAorI2lmIEhBVkVfTElCVVNCCisJCSAgICAgIHVzYl9zdHJlcnJvcigpCisj ZWxzZQorCQkgICAgICAidW5rbm93biIKKyNlbmRpZgorCQkgICAgICApOwogICAgIH0KICAgZHBy aW50ZihERUJVR19DT01NLCJ3cml0aW5nICVkIGJ5dGVzXG4iLGNjaFJlYWQpOwogICAKZGlmZiAt dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NtMzYwMC5jIHNhbmUvYmFj a2VuZC9zbTM2MDAuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20z NjAwLmMJRnJpIEFwciAzMCAyMjo1OTowNSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvc20zNjAwLmMJ V2VkIEFwciAxMyAxODowMzowNSAyMDA1CkBAIC02MCw3ICs2MCwxMiBAQAogI2luY2x1ZGUgPHN0 cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpZiBIQVZFX0xJQlVTQgogI2luY2x1ZGUg PHVzYi5oPgorI2Vsc2UKKyNpbmNsdWRlICIuLi9pbmNsdWRlL3NhbmUvc2FuZWlfdXNiLmgiCitz dHJ1Y3QgdXNiX2RldmljZSB7fTsKKyNlbmRpZgogCiAjZGVmaW5lIEJVSUxECTUKIApAQCAtMzUy LDEyICszNTcsMzkgQEAKICAgcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CiB9CiAKKyNpZiAhSEFW RV9MSUJVU0IKK3N0YXRpYyBTQU5FX1N0YXR1cyBzbV91c2JfYXR0YWNoKCBTQU5FX1N0cmluZ19D b25zdCBkZXZfbmFtZSApCit7CisgIGludCBmZDsKKyAgU0FORV9TdGF0dXMgZXJyOworICBTQU5F X1dvcmQgdiwgcDsKKyAgVE1vZGVsIG1vZGVsOworICBlcnIgPSBzYW5laV91c2Jfb3BlbihkZXZf bmFtZSwgJmZkKTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworICBlcnIgPSBzYW5laV91 c2JfZ2V0X3ZlbmRvcl9wcm9kdWN0KGZkLCAmdiwgJnApOworICBpZiAoZXJyKQorICAgeworICAg IHNhbmVpX3VzYl9jbG9zZShmZCk7CisgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgREJHKERFQlVH X0pVTkssImZvdW5kIGRldiAlMDRYLyUwNFgsICVzXG4iLCB2LCBwLCBkZXZfbmFtZSk7CisgIG1v ZGVsPUdldFNjYW5uZXJNb2RlbCh2LCBwKTsKKyAgaWYgKG1vZGVsIT11bmtub3duKQorICAgIHsK KyAgICAgIGNoYXIgYWNoWzEwMF07CisgICAgICBSZWdpc3RlclNhbmVEZXYoTlVMTCxtb2RlbCxk ZXZfbmFtZSk7CisgICAgfQorICBzYW5laV91c2JfY2xvc2UoZmQpOworfQorI2VuZGlmCisKIFNB TkVfU3RhdHVzCiBzYW5lX2luaXQgKFNBTkVfSW50ICp2ZXJzaW9uX2NvZGUsIFNBTkVfQXV0aF9D YWxsYmFjayBhdXRoQ0IpCiB7CiAgIHN0cnVjdCB1c2JfYnVzICAgICpwYnVzOwogICBzdHJ1Y3Qg dXNiX2RldmljZSAqcGRldjsKLSAgaW50ICAgICAgICAgICAgICAgIGlCdXMscmM7CisgIGludCAg ICAgICAgICAgICAgICBpQnVzLHJjLGk7CiAKICAgREJHX0lOSVQoKTsKIApAQCAtMzczLDYgKzQw NSw3IEBACiAKICAgcGRldkZpcnN0PU5VTEw7CiAKKyNpZiBIQVZFX0xJQlVTQgogICB1c2JfaW5p dCgpOwogICByYz11c2JfZmluZF9idXNzZXMoKTsKICAgaWYgKHJjKQpAQCAtNDA0LDYgKzQzNywx MyBAQAogCSAgICB9CiAJfQogICAgIH0KKyNlbHNlCisgIAorICBzYW5laV91c2JfaW5pdCgpOwor ICBmb3IgKGkgPSAwOyBhU2Nhbm5lcnNbaV0uaWRQcm9kdWN0OyBpKyspIHsKKyAgICBzYW5laV91 c2JfZmluZF9kZXZpY2VzKFNDQU5ORVJfVkVORE9SLCBhU2Nhbm5lcnNbaV0uaWRQcm9kdWN0LCBz bV91c2JfYXR0YWNoKTsKKyAgfQorI2VuZGlmCiAgIHJldHVybiBTQU5FX1NUQVRVU19HT09EOwog fQogCkBAIC00NjMsOCArNTAzLDExIEBACiAgIGlmIChkZXZpY2VuYW1lWzBdKSAvKiBzZWxlY3Rl ZCAqLwogICAgIHsKICAgICAgIGZvciAocGRldj1wZGV2Rmlyc3Q7IHBkZXY7IHBkZXY9cGRldi0+ cE5leHQpCit7CitEQkcoREVCVUdfVkVSQk9TRSwiJXM8PiVzXG4iLGRldmljZW5hbWUsIHBkZXYt PnNhbmUubmFtZSk7CiAJaWYgKCFzdHJjbXAoZGV2aWNlbmFtZSxwZGV2LT5zYW5lLm5hbWUpKQog CSAgYnJlYWs7Cit9CiAgICAgICAvKiBubyBkeW5hbWljIHBvc3QtcmVnaXN0cmF0aW9uICovCiAg ICAgfQogICBlbHNlCkBAIC00ODEsMTQgKzUyNCwyMSBAQAogICBwaW5zdEZpcnN0PXRoaXM7CiAg IHRoaXMtPm1vZGVsPXBkZXYtPm1vZGVsOyAvKiBtZW1vcml6ZSBtb2RlbCAqLwogICAvKiBvcGVu IGFuZCBwcmVwYXJlIFVTQiBzY2FubmVyIGhhbmRsZSAqLworI2lmIEhBVkVfTElCVVNCCiAgIHRo aXMtPmhTY2FubmVyPXVzYl9vcGVuKHBkZXYtPnBkZXYpOwogICBpZiAoIXRoaXMtPmhTY2FubmVy KQogICAgIHJldHVybiBTZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLCAiY2Fubm90 IG9wZW4gc2Nhbm5lciBkZXZpY2UiKTsKKyNlbHNlCisgIGlmIChzYW5laV91c2Jfb3BlbihkZXZp Y2VuYW1lLCAmdGhpcy0+aFNjYW5uZXIpIDwgMCkKKyAgICByZXR1cm4gU2V0RXJyb3IodGhpcyxT QU5FX1NUQVRVU19JT19FUlJPUiwgImNhbm5vdCBvcGVuIHNjYW5uZXIgZGV2aWNlIik7CisjZW5k aWYKICAgcmM9U0FORV9TVEFUVVNfR09PRDsKKyNpZiBIQVZFX0xJQlVTQgogICBpZiAodXNiX2Ns YWltX2ludGVyZmFjZSh0aGlzLT5oU2Nhbm5lciwgMCkpCiAgICAgcmV0dXJuIFNldEVycm9yKHRo aXMsU0FORV9TVEFUVVNfSU9fRVJST1IsICJjYW5ub3QgY2xhaW0gSUYiKTsKICAgaWYgKHVzYl9z ZXRfY29uZmlndXJhdGlvbih0aGlzLT5oU2Nhbm5lciwgMSkpCiAgICAgcmV0dXJuIFNldEVycm9y KHRoaXMsU0FORV9TVEFUVVNfSU9fRVJST1IsICJjYW5ub3Qgc2V0IFVTQiBjb25maWcgMSIpOwor I2VuZGlmCiAKICAgdGhpcy0+cXVhbGl0eT1mYXN0OwogICByZXR1cm4gSW5pdE9wdGlvbnModGhp cyk7CkBAIC01MDQsOCArNTU0LDEzIEBACiAgICAgewogICAgICAgaWYgKHRoaXMtPnN0YXRlLmJT Y2FubmluZykKIAlFbmRTY2FuKHRoaXMpOworI2lmIEhBVkVfTElCVVNCCiAgICAgICB1c2JfY2xv c2UodGhpcy0+aFNjYW5uZXIpOwogICAgICAgdGhpcy0+aFNjYW5uZXI9TlVMTDsKKyNlbHNlCisg ICAgICBzYW5laV91c2JfY2xvc2UodGhpcy0+aFNjYW5uZXIpOworICAgICAgdGhpcy0+aFNjYW5u ZXI9LTE7CisjZW5kaWYKICAgICB9CiAgIFJlc2V0Q2FsaWJyYXRpb24odGhpcyk7IC8qIHJlbGVh c2UgY2FsaWJyYXRpb24gZGF0YSAqLwogICAvKiB1bmxpbmsgYWN0aXZlIGRldmljZSBlbnRyeSAq LwpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20zNjAwLmgg c2FuZS9iYWNrZW5kL3NtMzYwMC5oCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvYmFj a2VuZC9zbTM2MDAuaAlGcmkgQXByIDMwIDIyOjU4OjI4IDIwMDQKKysrIHNhbmUvYmFja2VuZC9z bTM2MDAuaAlXZWQgQXByIDEzIDE4OjAzOjA1IDIwMDUKQEAgLTE5MCw3ICsxOTAsMTEgQEAKICAg VFF1YWxpdHkgICAgICAgICAgIHF1YWxpdHk7CiAgIFRNb2RlICAgICAgICAgICAgICBtb2RlOwog ICBUTW9kZWwgICAgICAgICAgICAgbW9kZWw7CisjaWYgSEFWRV9MSUJVU0IKICAgdXNiX2Rldl9o YW5kbGUgICAgKmhTY2FubmVyOworI2Vsc2UKKyAgaW50ICAgICAgICAgICAgICAgIGhTY2FubmVy OworI2VuZGlmCiAgIEZJTEUgICAgICAgICAgICAgICpmaExvZzsKICAgRklMRSAgICAgICAgICAg ICAgKmZoU2NhbjsKICAgaW50ICAgICAgICAgICAgICAgIGljaFBhZ2VCdWZmZXI7IC8qIHdyaXRl IHBvc2l0aW9uIGluIGZ1bGwgcGFnZSBidWZmZXIgKi8KZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJh Y2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBzY2FuLW11dGV4LmMgc2FuZS9iYWNrZW5kL3NuYXBz Y2FuLW11dGV4LmMKLS0tIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBz Y2FuLW11dGV4LmMJRnJpIEFwciAxNiAwMDo1MToyNSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvc25h cHNjYW4tbXV0ZXguYwlGcmkgRmViICA0IDE1OjQyOjM3IDIwMDUKQEAgLTM5LDcgKzM5LDM1IEBA CiAgIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9k aWZpY2F0aW9ucy4KICAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIGRlbGV0ZSB0aGlzIGV4Y2Vw dGlvbiBub3RpY2UuKi8KICAgCi0jaWYgZGVmaW5lZCBVU0VfUFRIUkVBRCB8fCBkZWZpbmVkIEhB VkVfT1MyX0gKKyNpZiBkZWZpbmVkIF9fQkVPU19fCisKKyNpbmNsdWRlIDxPUy5oPgorI2RlZmlu ZSBzbmFwc2Nhbl9tdXRleF90IHNlbV9pZAorCitzdGF0aWMgaW50IHNuYXBzY2FuaV9tdXRleF9v cGVuKHNuYXBzY2FuX211dGV4X3QqIGFfc2VtLCBjb25zdCBjaGFyKiBkZXYgVU5VU0VEQVJHKQor eworICAgICphX3NlbSA9IGNyZWF0ZV9zZW0oMSwgInNuYXBzY2FuX211dGV4Iik7CisgICAgcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXBzY2FuaV9tdXRleF9jbG9zZShzbmFwc2Nhbl9t dXRleF90KiBhX3NlbSkKK3sKKyAgICBkZWxldGVfc2VtKCphX3NlbSk7Cit9CisKK3N0YXRpYyB2 b2lkIHNuYXBzY2FuaV9tdXRleF9sb2NrKHNuYXBzY2FuX211dGV4X3QqIGFfc2VtKQoreworICAg IGFjcXVpcmVfc2VtKCphX3NlbSk7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXBzY2FuaV9tdXRleF91 bmxvY2soc25hcHNjYW5fbXV0ZXhfdCogYV9zZW0pCit7CisgICAgcmVsZWFzZV9zZW0oKmFfc2Vt KTsKK30KKworCisKKyNlbGlmIGRlZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09T Ml9ICiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjZGVmaW5lIHNuYXBzY2FuX211dGV4X3QgcHRo cmVhZF9tdXRleF90CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvYmFja2Vu ZC9zbmFwc2Nhbi11c2IuYyBzYW5lL2JhY2tlbmQvc25hcHNjYW4tdXNiLmMKLS0tIC9EZXZlbC9z YW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBzY2FuLXVzYi5jCVN1biBPY3QgIDMgMTk6 MzQ6MzYgMjAwNAorKysgc2FuZS9iYWNrZW5kL3NuYXBzY2FuLXVzYi5jCUZyaSBGZWIgIDQgMTY6 MDk6NTggMjAwNQpAQCAtNzYsNyArNzYsNyBAQAogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiAK LXN0YXRpYyBzbmFwc2Nhbl9tdXRleF90IHNlbV9pZDsKK3N0YXRpYyBzbmFwc2Nhbl9tdXRleF90 IHNuYXBzY2FuX211dGV4Owogc3RhdGljIHNlbnNlX2hhbmRsZXJfdHlwZSB1c2Jfc2Vuc2VfaGFu ZGxlcjsKIHN0YXRpYyB2b2lkKiB1c2JfcHNzOwogCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogICAg IHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJmFsbCwgJm9sZHNldCk7CiAKICAgICAvKiBNYWtlIHN1 cmUgd2UgYXJlIGFsb25lICovCi0gICAgc25hcHNjYW5pX211dGV4X2xvY2soJnNlbV9pZCk7Cisg ICAgc25hcHNjYW5pX211dGV4X2xvY2soJnNuYXBzY2FuX211dGV4KTsKIAogICAgIHN0YXR1cyA9 IHVzYl9jbWQoZmQsc3JjLHNyY19zaXplLGRzdCxkc3Rfc2l6ZSk7CiAKLSAgICBzbmFwc2Nhbmlf bXV0ZXhfdW5sb2NrKCZzZW1faWQpOworICAgIHNuYXBzY2FuaV9tdXRleF91bmxvY2soJnNuYXBz Y2FuX211dGV4KTsKIAogICAgIC8qIE5vdyBpdCBpcyBvayB0byBiZSBraWxsZWQgKi8KICAgICBz aWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7CkBAIC0xNTksNyArMTU5LDcg QEAKIAogICAgIERCRyAoRExfQ0FMTF9UUkFDRSwgIiVzKCVzKVxuIiwgbWUsIGRldik7CiAKLSAg ICBpZighc25hcHNjYW5pX211dGV4X29wZW4oJnNlbV9pZCwgZGV2KSkgeworICAgIGlmKCFzbmFw c2NhbmlfbXV0ZXhfb3Blbigmc25hcHNjYW5fbXV0ZXgsIGRldikpIHsKICAgICAgICAgREJHIChE TF9NQUpPUl9FUlJPUiwgIiVzOiBDYW4ndCBnZXQgc2VtYXBob3JlXG4iLCBtZSk7CiAgICAgICAg IHJldHVybiBTQU5FX1NUQVRVU19JTlZBTDsKICAgICB9CkBAIC0yMjMsNyArMjIzLDcgQEAKICAg ICB9CiAgICAgdXJiX2NvdW50ZXJzLT5yZWFkX3VyYnMgPSAwOwogICAgIHVyYl9jb3VudGVycy0+ d3JpdGVfdXJicyA9IDA7Ci0gICAgc25hcHNjYW5pX211dGV4X2Nsb3NlKCZzZW1faWQpOworICAg IHNuYXBzY2FuaV9tdXRleF9jbG9zZSgmc25hcHNjYW5fbXV0ZXgpOwogICAgIHNhbmVpX3VzYl9j bG9zZShmZCk7CiB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9 CiAKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJfSAorI2lmIGRl ZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmluZWQgX19CRU9T X18KIHN0YXRpYyBTQU5FX1N0YXR1cyBzbmFwc2NhbmlfdXNiX3NobV9pbml0KHZvaWQpCiB7CiAg ICAgdW5zaWduZWQgaW50IHNobV9zaXplID0gc2l6ZW9mKHN0cnVjdCB1cmJfY291bnRlcnNfdCk7 CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvY29uZmlndXJlLmluIHNhbmUv Y29uZmlndXJlLmluCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvY29uZmlndXJlLmlu CVN1biBOb3YgIDcgMTg6MzU6NTIgMjAwNAorKysgc2FuZS9jb25maWd1cmUuaW4JV2VkIEFwciAg NiAxNTozODo0NSAyMDA1CkBAIC0zMyw2ICszMywxNyBAQAogQUNfQ0FOT05JQ0FMX0JVSUxECiBB Q19DQU5PTklDQUxfSE9TVCAKIAorZG5sIG5vIGJsb29keSB3YXkgdG8gaGF2ZSBhIGRlY2VudCAt LWRvY2Rpci4uLgorQUNfQVJHX1dJVEgoZG9jZGlyLCAKKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0 aC1kb2NkaXI9RElSXSwKKyAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb24gQDw6QFBSRUZJ WC9kb2Mvc2FuZS1WRVJTSU9OQDo+QF0pLAorWworICBkb2NkaXI9IiR7d2l0aHZhbH0iCisgIEFD X1NVQlNUKFtkb2NkaXJdKWRubAorXSwgWworICBBQ19TVUJTVChbZG9jZGlyXSwgICAgICAgICBb JyR7cHJlZml4fS9kb2Mvc2FuZS0ke1ZFUlNJT059J10pZG5sCitdKQorCiBkbmwgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgogZG5sICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04 NSw5ICs5Niw5IEBACiBkbmwgSVJJWCBzb21ldGltZXMgaGFzIFNZU1ZSMy80IG5ldHdvcmsgRFNP cywgYnV0IHdlIGRvIG5vdCBuZWVkIG9yIHdhbnQKIGRubCB0byB1c2UgdGhlbSEKIGlmIHRlc3Qg ImB1bmFtZWAiICE9ICJJUklYIiAtYSAiYHVuYW1lYCIgIT0gIklSSVg2NCI7IHRoZW4KLSAgICBB Q19DSEVDS19MSUIobnNsLCBnZXRob3N0YnlhZGRyKQotICAgIEFDX0NIRUNLX0xJQihzb2NrZXQs IHNvY2tldCkKLSAgICBBQ19DSEVDS19MSUIoc3lzbG9nLCBzeXNsb2cpICAgICAgICAgICAgIyBP Uy8yIG5lZWRzIHRoaXMKKyAgICBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnlhZGRyLCBuc2wgYmlu ZCkKKyAgICBBQ19TRUFSQ0hfTElCUyhzb2NrZXQsIHNvY2tldCkKKyAgICBBQ19TRUFSQ0hfTElC UyhzeXNsb2csIHN5c2xvZyBiZSkgICAgICAgICAgICAjIE9TLzIgbmVlZHMgLWxzeXNsb2csIEJl T1MgbmVlZHMgLWxiZQogZmkKIFNBTkVfQ0hFQ0tfSlBFRwogU0FORV9DSEVDS19JRUVFMTI4NApA QCAtMTAxLDcgKzExMiw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIEFDX0hFQURFUl9TVERDCiBB Q19DSEVDS19IRUFERVJTKGZjbnRsLmggdW5pc3RkLmggbGliYy5oIHN5cy9kc3JlcS5oIHN5cy9z ZWxlY3QuaCBcCi0gICAgc3lzL3RpbWUuaCBzeXMvc2htLmggXAorICAgIHN5cy90aW1lLmggc3lz L3NobS5oIHN5cy9pcGMuaCBzeXMvc2lnbmFsLmggXAogICAgIHN5cy9zY2FuaW8uaCBzY3NpLmgg c3lzL3Njc2kuaCBzeXMvc2NzaWNtZC5oIHN5cy9zY3NpaW8uaCBcCiAgICAgYnNkL2Rldi9zY3Np cmVnLmggc2NzaS9zZy5oIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvc2NzaS9zZy5oIGlvL2NhbS9j YW0uaCBcCiAgICAgY2FtbGliLmggb3MyLmggc3lzL3NvY2tldC5oIHN5cy9pby5oIGdzY2Rkcy5o IHN5cy9ody5oIFwKQEAgLTEwOSw3ICsxMjAsNyBAQAogICAgIGFwb2xsby9zY3NpLmggc3lzL3Nk aV9jb21tLmggc3lzL3Bhc3N0aHJ1ZGVmLmggbGludXgvcHBkZXYuaCBcCiAgICAgZGV2L3BwYnVz L3BwaS5oIG1hY2hpbmUvY3B1ZnVuYy5oIHVzYi5oIHN5cy9iaXR5cGVzLmggc3lzL3NlbS5oIHN5 cy9wb2xsLmggXAogICAgIElPS2l0L2NkYi9JT1NDU0lMaWIuaCBJT0tpdC9zY3NpLWNvbW1hbmRz L1NDU0lDb21tYW5kT3BlcmF0aW9uQ29kZXMuaCBcCi0gICAgd2luZG93cy5oIGxpbWl0cy5oIHN5 cy9pb2N0bC5oIGFzbS90eXBlcy5oKQorICAgIHdpbmRvd3MuaCBiZS9rZXJuZWwvT1MuaCBiZS9k cml2ZXJzL1VTQl9zY2FubmVyLmggbGltaXRzLmggc3lzL2lvY3RsLmggYXNtL3R5cGVzLmgpCiBB Q19DSEVDS19IRUFERVJTKFthc20vaW8uaF0sLCxbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0pCiBT QU5FX0NIRUNLX01JU1NJTkdfSEVBREVSUwogCkBAIC0yMDIsNiArMjEzLDExIEBACiBkbmwgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKIGRubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBkbmwgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfYmVfa2VybmVsX09TX2giID0gInllcyIg OyB0aGVuCisgICAgZG5sIHRob3NlIGFyZSBrbm93biB0byBiZSBicm9rZW4gaW4gQmVPUyAoQk9O RSkKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPW5vCisgICAgYWNfY3ZfZnVuY19nZXRuYW1l aW5mbz1ubworZmkKIEFDX0ZVTkNfQUxMT0NBCiBBQ19GVU5DX01NQVAKIEFDX0NIRUNLX0ZVTkNT KGF0ZXhpdCBpbmV0X2FkZHIgaW5ldF9hdG9uIGluZXRfbnRvYSBpb3Blcm0gaTM4Nl9zZXRfaW9w ZXJtIG1rZGlyIFwKQEAgLTI2Myw3ICsyNzksOCBAQAogQUNfUFJPR19MSUJUT09MCiAKIGRubCBX aW5kb3dzL0N5Z3dpbiBuZWVkcyB0aGlzLCBlbHNlIHRoZSBsaWJyYXJ5IGNyZWF0aW9uIGZhaWxz Ci1pZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPSAieWVzIiA7IHRoZW4KK2RubCBC ZU9TIGFsc28gbmVlZHMgdGhpcyAod2h5IGlzbnQgaXQgdGhlIGRlZmF1bHQgYW55d2F5ID8/PykK K2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJ5ZXMiIC1vICIkYWNfY3ZfaGVh ZGVyX2JlX2tlcm5lbF9PU19oIiA9ICJ5ZXMiIDsgdGhlbgogICBMSUJUT09MX0xJTktfRVhUUkE9 LW5vLXVuZGVmaW5lZAogICBBQ19TVUJTVChMSUJUT09MX0xJTktfRVhUUkEpCiBmaQpAQCAtMzcy LDExICszODksMTEgQEAKICAgICBlY2hvICIqKiogZGlzYWJsaW5nIHBubSBiYWNrZW5kIChub3Qg c2VsZWN0ZWQgbWFudWFsbHkpIgogICBdKQogCi0gIGlmIHRlc3QgIiR7SEFWRV9MSUJVU0J9IiAh PSAieWVzIiA7IHRoZW4KLSAgICBlY2hvICIqKiogZGlzYWJsaW5nIFNNMzYwMCBiYWNrZW5kIChs aWJ1c2Igb3IgdXNiLmggbm90IGZvdW5kKSIKLSAgZWxzZQorIyAgaWYgdGVzdCAiJHtIQVZFX0xJ QlVTQn0iICE9ICJ5ZXMiIDsgdGhlbgorIyAgICBlY2hvICIqKiogZGlzYWJsaW5nIFNNMzYwMCBi YWNrZW5kIChsaWJ1c2Igb3IgdXNiLmggbm90IGZvdW5kKSIKKyMgIGVsc2UKICAgICBCQUNLRU5E Uz0iJHtCQUNLRU5EU30gc20zNjAwIgotICBmaQorIyAgZmkKICBmaQogZmkKIApAQCAtMzkyLDYg KzQwOSwxNiBAQAogICBETExfUFJFTE9BRD0iIgogZmkKIEFDX1NVQlNUKERMTF9QUkVMT0FEKQor CitkbmwgaW4gQmVPUywgYmFja2VuZHMgYXJlIG5vdCBpbnN0YWxsZWQgaW4gbGliL3NhbmUsIGJ1 dCBhZGQtb25zL1NBTkUvCitkbmwgd2UgYWNjb3VudCBmb3IgYm90aCBpbnN0YWxsaW5nIGluIC9i b290L2Jlb3MgYW5kIH4vY29uZmlnCitkbmwgZmFzdGVyIHRoYW46IGlmIHRlc3QgImB1bmFtZWAi ID0gIkJlT1MiIC1vICJgdW5hbWVgIiA9ICJaZXRhIiA7IHRoZW4KK2lmIHRlc3QgIiRhY19jdl9o ZWFkZXJfYmVfa2VybmVsX09TX2giID0gInllcyIgOyB0aGVuCisgIEJFT1NfQURET05ESVI9IiR7 bGliZGlyfS8uLi9hZGQtb25zL1NBTkUiCisgIEFDX1NVQlNUKEJFT1NfQURET05ESVIpCisgIEJF X0lOU1RBTExfRkxBVk9SPS1iZW9zCisgIEFDX1NVQlNUKEJFX0lOU1RBTExfRkxBVk9SKQorZmkK IAogCiBBQ19BUkdfRU5BQkxFKHNjc2lidWZmZXJzaXplLCAKZGlmZiAtdXJOIC9EZXZlbC9zYW5l LWJhY2tlbmRzLTEuMC4xNS9kb2MvTWFrZWZpbGUuaW4gc2FuZS9kb2MvTWFrZWZpbGUuaW4KLS0t IC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9kb2MvTWFrZWZpbGUuaW4JVHVlIEF1ZyAgMyAx ODoyMjoyOCAyMDA0CisrKyBzYW5lL2RvYy9NYWtlZmlsZS5pbglUaHUgRmViIDE3IDE4OjU1OjEx IDIwMDUKQEAgLTI1LDcgKzI1LDggQEAKIGluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKIG9sZGlu Y2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKIGNvbmZpZ2RpciA9ICR7c3lzY29uZmRpcn0vc2FuZS5k Ci1kb2NkaXI9JChwcmVmaXgpL2RvYy9zYW5lLUBWRVJTSU9OQAorI2RvY2Rpcj0kKHByZWZpeCkv ZG9jL3NhbmUtQFZFUlNJT05ACitkb2NkaXIgPSBAZG9jZGlyQAogCiBNS0RJUiA9ICQodG9wX3Ny Y2RpcikvbWtpbnN0YWxsZGlycwogSU5TVEFMTCA9IEBJTlNUQUxMQApAQCAtMjA0LDE0ICsyMDUs MTQgQEAKIAljZCAuLi90b29scyA7ICQoTUFLRSkgc2FuZS1kZXNjCiAKIHNhbmUtYmFja2VuZHMu aHRtbDogJCh3aWxkY2FyZCBkZXNjcmlwdGlvbnMvKi5kZXNjKSAuLi90b29scy9zYW5lLWRlc2MK LQlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtYmFja2VuZHMtc3BsaXQgLXMgZGVzY3JpcHRp b25zIFwKKwlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtYmFja2VuZHMtc3BsaXQgLXMgJHtz cmNkaXJ9L2Rlc2NyaXB0aW9ucyBcCiAJIC1pICJUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6 ZXMgdGhlIGJhY2tlbmRzL2RyaXZlcnMgZGlzdHJpYnV0ZWQgXAogCSAgICAgd2l0aCAkKFBBQ0tB R0UpLSQoVkVSU0lPTiksIGFuZCB0aGUgaGFyZHdhcmUgb3Igc29mdHdhcmUgdGhleSBcCiAgICAg ICAgICAgICAgc3VwcG9ydC4iIC1kIDEgPiBzYW5lLWJhY2tlbmRzLmh0bWwKIAogc2FuZS1iYWNr ZW5kcy1leHRlcm5hbC5odG1sOiAkKHdpbGRjYXJkIGRlc2NyaXB0aW9ucy1leHRlcm5hbC8qLmRl c2MpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4vdG9vbHMvc2FuZS1kZXNjCi0J QC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLWJhY2tlbmRzLXNwbGl0IC1zIGRlc2NyaXB0aW9u cy1leHRlcm5hbCBcCisJQC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLWJhY2tlbmRzLXNwbGl0 IC1zICR7c3JjZGlyfS9kZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAogCSAgIC1pICJUaGUgZm9sbG93 aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGJhY2tlbmRzL2RyaXZlcnMgdGhhdCBcCiAJICAgICAg IGhhdmUgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIHRoZSBTQU5FIGRpc3RyaWJ1dGlvbiwgYW5k IHRoZSBcCiAJICAgICAgIGhhcmR3YXJlIG9yIHNvZnR3YXJlIHRoZXkgc3VwcG9ydC4iIFwKQEAg LTIxOSwxNCArMjIwLDE0IEBACiAJICAgPiBzYW5lLWJhY2tlbmRzLWV4dGVybmFsLmh0bWwKIAog c2FuZS1tZmdzLmh0bWw6ICQod2lsZGNhcmQgZGVzY3JpcHRpb25zLyouZGVzYykgLi4vdG9vbHMv c2FuZS1kZXNjCi0JQC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLW1mZ3MgLXMgZGVzY3JpcHRp b25zIFwKKwlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtbWZncyAtcyAke3NyY2Rpcn0vZGVz Y3JpcHRpb25zIFwKIAkgICAtaSAiVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBk ZXZpY2VzIHN1cHBvcnRlZCBcCiAJICAgICAgIGJ5ICQoUEFDS0FHRSktJChWRVJTSU9OKS4iIFwK IAkgICAtZCAxID4gc2FuZS1tZmdzLmh0bWwKIAogc2FuZS1tZmdzLWV4dGVybmFsLmh0bWw6ICQo d2lsZGNhcmQgZGVzY3JpcHRpb25zLWV4dGVybmFsLyouZGVzYykgXAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuLi90b29scy9zYW5lLWRlc2MKLQlALi4vdG9vbHMvc2FuZS1kZXNjIC1t IGh0bWwtbWZncyAtcyBkZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAorCUAuLi90b29scy9zYW5lLWRl c2MgLW0gaHRtbC1tZmdzIC1zICR7c3JjZGlyfS9kZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAogCSAg IC1pICJUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGRldmljZXMgdGhhdCBcCiAJ ICAgICAgIGFyZSBzdXBwb3J0ZWQgYnkgZXh0ZXJuYWwgYmFja2VuZHMuIiBcCiAJICAgLXQgIlNB TkU6IERldmljZXMgU3VwcG9ydGVkIGJ5IEV4dGVybmFsIEJhY2tlbmRzIiAtZCAxIFwKZGlmZiAt dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9mcm9udGVuZC9zYW5lZC5jIHNhbmUvZnJv bnRlbmQvc2FuZWQuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2Zyb250ZW5kL3Nh bmVkLmMJU2F0IE9jdCAxNiAxNTo0Mjo0NSAyMDA0CisrKyBzYW5lL2Zyb250ZW5kL3NhbmVkLmMJ VGh1IEZlYiAgMyAxNzoyMzowMyAyMDA1CkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICIu Li9pbmNsdWRlL3NhbmUvY29uZmlnLmgiCiAjaW5jbHVkZSAiLi4vaW5jbHVkZS9sYWxsb2NhLmgi Ci0jaW5jbHVkZSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KIAogI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgJiYgZGVmaW5lZCAoSEFWRV9HRVRO QU1FSU5GTykKICMgZGVmaW5lIFNBTkVEX1VTRVNfQUZfSU5ERVAKZGlmZiAtdXJOIC9EZXZlbC9z YW5lLWJhY2tlbmRzLTEuMC4xNS9pbmNsdWRlL3NhbmUvY29uZmlnLmguaW4gc2FuZS9pbmNsdWRl L3NhbmUvY29uZmlnLmguaW4KLS0tIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9pbmNsdWRl L3NhbmUvY29uZmlnLmguaW4JV2VkIE9jdCAgNiAxMjo1MTozOSAyMDA0CisrKyBzYW5lL2luY2x1 ZGUvc2FuZS9jb25maWcuaC5pbglUdWUgRmViIDE1IDIwOjUyOjMxIDIwMDUKQEAgLTEsNSArMSw5 IEBACiAvKiBpbmNsdWRlL3NhbmUvY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1 cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCiAKKyNpZmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPGlu dHR5cGVzLmg+CisjZW5kaWYgLyogX19CRU9TX18gKi8KKwogLyogRGVmaW5lIHRvIG9uZSBvZiBg X2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAogICAg c3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0 IG9uIHRob3NlIHN5c3RlbXMuCiAgICAqLwpAQCAtMzksNiArNDMsMTIgQEAKIAogLyogRGVmaW5l IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGV4aXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVf QVRFWElUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YmUvZHJpdmVycy9VU0Jf c2Nhbm5lci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0JFX0RSSVZFUlNfVVNCX1ND QU5ORVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJlL2tlcm5lbC9PUy5o PiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0JFX0tFUk5FTF9PU19ICiAKIC8qIERlZmlu ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YnNkL2Rldi9zY3NpcmVnLmg+IGhlYWRlciBmaWxlLiAq LwogI3VuZGVmIEhBVkVfQlNEX0RFVl9TQ1NJUkVHX0gKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJh Y2tlbmRzLTEuMC4xNS9saWIvTWFrZWZpbGUuaW4gc2FuZS9saWIvTWFrZWZpbGUuaW4KLS0tIC9E ZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9saWIvTWFrZWZpbGUuaW4JVGh1IEFwciAgMyAwMDow NToyNiAyMDAzCisrKyBzYW5lL2xpYi9NYWtlZmlsZS5pbglUaHUgRmViICAzIDE3OjIxOjM3IDIw MDUKQEAgLTQ4LDEyICs0OCwxMiBAQAogCiBAU0VUX01BS0VACiAKLUxJQkxJQl9PQkpTICAgICAg PSBATElCT0JKU0AgQEFMTE9DQUAgZ2V0b3B0Lm8gZ2V0b3B0MS5vIG1kNS5vCitMSUJMSUJfT0JK UyAgICAgID0gQExJQk9CSlNAIEBBTExPQ0FAIGdldG9wdC5vIGdldG9wdDEubyBtZDUubyBnZXRw YXNzLm8KIExJQkxJQl9MVE9CSlMgICAgPSAkKGFkZHN1ZmZpeCAubG8sJChiYXNlbmFtZSAkKExJ QkxJQl9PQkpTKSkpCiAKIFRBUkdFVFMgPSBsaWJsaWIuYSAkKExJQkxJQl9MVE9CSlMpCiAKLURJ U1RGSUxFUyA9IE1ha2VmaWxlLmluIGFsbG9jYS5jIGdldGVudi5jIGdldG9wdC5jIGdldG9wdDEu YyBcCitESVNURklMRVMgPSBNYWtlZmlsZS5pbiBhbGxvY2EuYyBnZXRlbnYuYyBnZXRwYXNzLmMg Z2V0b3B0LmMgZ2V0b3B0MS5jIFwKICAgaW5ldF9udG9wLmMgaW5ldF9wdG9uLmMgaXNmZHR5cGUu YyBtZDUuYyBzaWdwcm9jbWFzay5jIHNucHJpbnRmLmMgc3RyZHVwLmMgXAogICBzdHJuZHVwLmMg c3Ryc2VwLmMgdXNsZWVwLmMgdnN5c2xvZy5jCiAKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tl bmRzLTEuMC4xNS9saWIvZ2V0cGFzcy5jIHNhbmUvbGliL2dldHBhc3MuYwotLS0gL0RldmVsL3Nh bmUtYmFja2VuZHMtMS4wLjE1L2xpYi9nZXRwYXNzLmMJVGh1IEphbiAgMSAwMTowMDowMCAxOTcw CisrKyBzYW5lL2xpYi9nZXRwYXNzLmMJVGh1IEZlYiAgMyAxNzoyMjoyOCAyMDA1CkBAIC0wLDAg KzEsMjE5IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICogQ29weXJpZ2h0IChDKSAxOTk4 IEFuZ3VzIE1hY2theS4gQWxsIHJpZ2h0cyByZXNlcnZlZDsgCisgKiAKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgYXJlIGZyZWVseSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogCisgKiAKKyAq ICAgMSkgVGhpcyBoZWFkZXIgcmVtYWluIGluIHRhY3QuIAorICogICAyKSBUaGUgcHJvdG90eXBl cyBmb3IgZ2V0cGFzcyBhbmQgZ2V0cGFzc19yIGFyZSBub3QgY2hhbmdlZCBmcm9tOiAKKyAqICAg ICAgICAgY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpIAorICogICAgICAgICBjaGFy ICpnZXRwYXNzX3IoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyKiBidWZmZXIsIGludCBidWZsZW4p IAorICogICAzKSBUaGlzIHNvdXJjZSBjb2RlIGlzIG5vdCB1c2VkIG91dHNpZGUgb2YgdGhpcyhn ZXRwYXNzLmMpIGZpbGUuIAorICogICA0KSBBbnkgY2hhbmdlcyB0byB0aGlzKGdldHBhc3MuYykg c291cmNlIGNvZGUgYXJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLiAKKyAqIAorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCAKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSAKKyAqIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgCisgKiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAKKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09IAorICogCisgKiAkSWQ6IGdldHBhc3MuYyx2IDEuMS4xLjIgMjAwMS8w NC8yNCAxODo0OTowOSB3c2FuY2hleiBFeHAgJCAKKyAqIAorICogVGhlIHNwaXJpdCBvZiB0aGlz IGxpY2Vuc2UgaXMgdG8gYWxsb3cgdXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaW4gYW55IAorICog cHJvamVjdCBiZSBpdCBvcGVuIG9yIGNsb3NlZCBidXQgc3RpbGwgZW5jb3VyYWdlIHRoZSB1c2Ug b2YgdGhlIG9wZW4sIAorICogbGlicmFyeSBiYXNlZCBlcXVpdmlsZW50cy4gCisgKiAKKyAqIEF1 dGhvcihzKTogCisgKiAgIEFuZ3VzIE1hY2theSA8YW1hY2theUBndXMubWwub3JnPiAKKyAqIAor ICogQ29udHJpYnV0b3Iocyk6IAorICogICBEYW5pZWwgU3RlbmJlcmcgPGRhbmllbEBoYXh4LnNl PiAKKyAqLyAKKworI2lmZGVmIEhBVkVfQ09ORklHX0ggCisjICBpbmNsdWRlIDxjb25maWcuaD4g CisjZW5kaWYgCisKKyNpZm5kZWYgSEFWRV9HRVRQQVNTX1IgCisKKyNpZm5kZWYgV0lOMzIgCisj aWZkZWYgSEFWRV9URVJNSU9TX0ggCisjICBpZiAhZGVmaW5lZChIQVZFX1RDR0VUQVRUUikgJiYg IWRlZmluZWQoSEFWRV9UQ1NFVEFUVFIpIAorIyAgICB1bmRlZiBIQVZFX1RFUk1JT1NfSCAKKyMg IGVuZGlmIAorI2VuZGlmIAorCisjaWZuZGVmIFJFVFNJR1RZUEUgCisjICBkZWZpbmUgUkVUU0lH VFlQRSB2b2lkIAorI2VuZGlmIAorCisjaWZkZWYgSEFWRV9VTklTVERfSCAKKyNpbmNsdWRlIDx1 bmlzdGQuaD4gCisjZW5kaWYgCisjaW5jbHVkZSA8c3RkaW8uaD4gCisjaW5jbHVkZSA8c2lnbmFs Lmg+IAorI2lmZGVmIEhBVkVfVEVSTUlPU19IIAorIyAgaW5jbHVkZSA8dGVybWlvcy5oPiAKKyNl bHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyMgIGluY2x1ZGUgPHRlcm1pby5oPiAKKyMg IGVsc2UgCisjICBlbmRpZiAKKyNlbmRpZiAKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBz aG91bGQgYmU6ICovIAorI2lmZGVmIE1BTExPQ0RFQlVHIAorI2luY2x1ZGUgIm1lbWRlYnVnLmgi IAorI2VuZGlmIAorCisvKiBubyBwZXJyb3I/IG1ha2UgYW4gZnByaW50ZiEgKi8gCisjaWZuZGVm IEhBVkVfUEVSUk9SIAorIyAgZGVmaW5lIHBlcnJvcih4KSBmcHJpbnRmKHN0ZGVyciwgIkVycm9y IGluOiAlc1xuIiwgeCkgCisjZW5kaWYgCisKK2NoYXIgKmdldHBhc3Nfcihjb25zdCBjaGFyICpw cm9tcHQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikgCit7IAorICBGSUxFICppbmZwOyAK KyAgRklMRSAqb3V0ZnA7IAorICBSRVRTSUdUWVBFICgqc2lnaW50KSgpOyAKKyNpZm5kZWYgX19F TVhfXyAKKyAgUkVUU0lHVFlQRSAoKnNpZ3RzdHApKCk7IAorI2VuZGlmIAorICBzaXplX3QgYnl0 ZXNfcmVhZDsgCisgIGludCBpbmZkOyAKKyAgaW50IG91dGZkOyAKKyNpZmRlZiBIQVZFX1RFUk1J T1NfSCAKKyAgc3RydWN0IHRlcm1pb3Mgb3JpZzsgCisgIHN0cnVjdCB0ZXJtaW9zIG5vZWNobzsg CisjZWxzZSAKKyMgIGlmZGVmIEhBVkVfVEVSTUlPX0ggCisgIHN0cnVjdCB0ZXJtaW8gb3JpZzsg CisgIHN0cnVjdCB0ZXJtaW8gbm9lY2hvOyAgCisjICBlbHNlIAorIyAgZW5kaWYgCisjZW5kaWYg CisKKyAgc2lnaW50ID0gc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7IAorICAvKiAyMDAwMDMxOCBt Z3MgCisgICAqIHRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBlbXggc3lzdGVtLCBTSUdUU1RQIGlzIG5v dCBhIHN1cHBvcnRlZCBzaWduYWwgKi8gCisjaWZuZGVmIF9fRU1YX18gCisgIHNpZ3RzdHAgPSBz aWduYWwoU0lHVFNUUCwgU0lHX0lHTik7IAorI2VuZGlmIAorCisgIGlmKCAoaW5mcD1mb3Blbigi L2Rldi90dHkiLCAiciIpKSA9PSBOVUxMICkgCisgIHsgCisgICAgaW5mcCA9IHN0ZGluOyAKKyAg fSAKKyAgaWYoIChvdXRmcD1mb3BlbigiL2Rldi90dHkiLCAidyIpKSA9PSBOVUxMICkgCisgIHsg CisgICAgb3V0ZnAgPSBzdGRlcnI7IAorICB9IAorICBpbmZkID0gZmlsZW5vKGluZnApOyAKKyAg b3V0ZmQgPSBmaWxlbm8ob3V0ZnApOyAKKworICAvKiBkaXNzYWJsZSBlY2hvICovIAorI2lmZGVm IEhBVkVfVEVSTUlPU19IIAorICBpZih0Y2dldGF0dHIob3V0ZmQsICZvcmlnKSAhPSAwKSAKKyAg eyAKKyAgICA7IC8qcGVycm9yKCJ0Y2dldGF0dHIiKTsqLyAKKyAgfSAKKyAgbm9lY2hvID0gb3Jp ZzsgCisgIG5vZWNoby5jX2xmbGFnICY9IH5FQ0hPOyAKKyAgaWYodGNzZXRhdHRyKG91dGZkLCBU Q1NBTk9XLCAmbm9lY2hvKSAhPSAwKSAKKyAgeyAKKyAgICA7IC8qcGVycm9yKCJ0Y2dldGF0dHIi KTsqLyAKKyAgfSAKKyNlbHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyAgaWYoaW9jdGwo b3V0ZmQsIFRDR0VUQSwgJm9yaWcpICE9IDApIAorICB7IAorICAgIDsgLypwZXJyb3IoImlvY3Rs Iik7Ki8gCisgIH0gCisgIG5vZWNobyA9IG9yaWc7IAorICBub2VjaG8uY19sZmxhZyAmPSB+RUNI TzsgCisgIGlmKGlvY3RsKG91dGZkLCBUQ1NFVEEsICZub2VjaG8pICE9IDApIAorICB7IAorICAg IDsgLypwZXJyb3IoImlvY3RsIik7Ki8gCisgIH0gCisjICBlbHNlIAorIyAgZW5kaWYgCisjZW5k aWYgCisKKyAgZnB1dHMocHJvbXB0LCBvdXRmcCk7IAorICBmZmx1c2gob3V0ZnApOyAKKworICBi eXRlc19yZWFkPXJlYWQoaW5mZCwgYnVmZmVyLCBidWZsZW4pOyAKKyAgYnVmZmVyW2J5dGVzX3Jl YWQgPiAwID8gKGJ5dGVzX3JlYWQgLTEpIDogMF0gPSAnXDAnOyAKKworICAvKiBwcmludCBhIG5l dyBsaW5lIGlmIG5lZWRlZCAqLyAKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSCAKKyAgZnB1dHMoIlxu Iiwgb3V0ZnApOyAKKyNlbHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyAgZnB1dHMoIlxu Iiwgb3V0ZnApOyAKKyMgIGVsc2UgCisjICBlbmRpZiAKKyNlbmRpZiAKKworICAvKiAKKyAgICog cmVzZXQgdGVybSBjaGFyZWN0YXJpc3RpY3MsIHVzZSBUQ1NBRkxVU0ggaW5jYXNlIHRoZSAKKyAg ICogdXNlciB0eXBlcyBtb3JlIHRoYW4gYnVmbGVuIAorICAgKi8gCisjaWZkZWYgSEFWRV9URVJN SU9TX0ggCisgIGlmKHRjc2V0YXR0cihvdXRmZCwgVENTQUZMVVNILCAmb3JpZykgIT0gMCkgCisg IHsgCisgICAgOyAvKnBlcnJvcigidGNnZXRhdHRyIik7Ki8gCisgIH0gCisjZWxzZSAKKyMgIGlm ZGVmIEhBVkVfVEVSTUlPX0ggCisgIGlmKGlvY3RsKG91dGZkLCBUQ1NFVEEsICZvcmlnKSAhPSAw KSAKKyAgeyAKKyAgICA7IC8qcGVycm9yKCJpb2N0bCIpOyovIAorICB9IAorIyAgZWxzZSAKKyMg IGVuZGlmIAorI2VuZGlmIAorICAKKyAgc2lnbmFsKFNJR0lOVCwgc2lnaW50KTsgCisjaWZuZGVm IF9fRU1YX18gCisgIHNpZ25hbChTSUdUU1RQLCBzaWd0c3RwKTsgCisjZW5kaWYgCisKKyAgcmV0 dXJuIGJ1ZmZlcjsgLyogd2UgYWx3YXlzIHJldHVybiBzdWNjZXNzICovIAorfSAKKyNlbHNlIC8q IFdJTjMyICovIAorI2luY2x1ZGUgPHN0ZGlvLmg+IAorI2luY2x1ZGUgPGNvbmlvLmg+IAorY2hh ciAqZ2V0cGFzc19yKGNvbnN0IGNoYXIgKnByb21wdCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVu KSAKK3sgCisgIGludCBpOyAKKyAgcHJpbnRmKCIlcyIsIHByb21wdCk7IAorIAorICBmb3IoaT0w OyBpPGJ1ZmxlbjsgaSsrKSB7IAorICAgIGJ1ZmZlcltpXSA9IGdldGNoKCk7IAorICAgIGlmICgg YnVmZmVyW2ldID09ICdccicgKSB7IAorICAgICAgYnVmZmVyW2ldID0gMDsgCisgICAgICBicmVh azsgCisgICAgfSAKKyAgfSAKKyAgLyogaWYgdXNlciBkaWRuJ3QgaGl0IEVOVEVSLCB0ZXJtaW5h dGUgYnVmZmVyICovIAorICBpZiAoaT09YnVmbGVuKSAKKyAgICBidWZmZXJbYnVmbGVuLTFdPTA7 IAorCisgIHJldHVybiBidWZmZXI7IC8qIHdlIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAqLyAKK30g CisjZW5kaWYgCisKKyNlbmRpZiAvKiBpZm5kZWYgSEFWRV9HRVRQQVNTX1IgKi8gCisKKy8qIGZv ciBjb25zaXN0ZW5zeSwgaGVyZSdzIHRoZSBvbGQtc3R5bGUgZnVuY3Rpb246ICovIAorY2hhciAq Z2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpIAoreyAKKyAgc3RhdGljIGNoYXIgYnVmWzI1Nl07 IAorICByZXR1cm4gZ2V0cGFzc19yKHByb21wdCwgYnVmLCBzaXplb2YoYnVmKSk7IAorfSAKZGlm ZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9wby9NYWtlZmlsZS5pbiBzYW5lL3Bv L01ha2VmaWxlLmluCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvcG8vTWFrZWZpbGUu aW4JVGh1IE9jdCAxNCAxODo0NDoxNyAyMDA0CisrKyBzYW5lL3BvL01ha2VmaWxlLmluCUZyaSBG ZWIgMTEgMDk6MTk6MTcgMjAwNQpAQCAtMzYsNiArMzYsNyBAQAogZ251bG9jYWxlZGlyID0gJChw cmVmaXgpL3NoYXJlL2xvY2FsZQogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogc3JjZGlyID0g QHNyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKIAogUEFDS0FHRSA9IEBQQUNLQUdFQAogVkVSU0lP TiA9IEBWRVJTSU9OQApkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVp L3NhbmVpX2NvbmZpZy5jIHNhbmUvc2FuZWkvc2FuZWlfY29uZmlnLmMKLS0tIC9EZXZlbC9zYW5l LWJhY2tlbmRzLTEuMC4xNS9zYW5laS9zYW5laV9jb25maWcuYwlNb24gTWF5IDE3IDE3OjUzOjE4 IDIwMDQKKysrIHNhbmUvc2FuZWkvc2FuZWlfY29uZmlnLmMJVHVlIE1heSAyNCAxMTozMTo0NyAy MDA1CkBAIC03Miw2ICs3MiwxMCBAQAogCiAjZGVmaW5lIERFRkFVTFRfRElSUwkiLiIgRElSX1NF UCBTVFJJTkdJRlkoUEFUSF9TQU5FX0NPTkZJR19ESVIpCiAKKyNpZmRlZiBfX0JFT1NfXworI2lu Y2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciAqZGly X2xpc3Q7CiAKIEZJTEUgKgpAQCAtODcsNiArOTEsMTggQEAKICAgICAgIERCR19JTklUKCk7CiAK ICAgICAgIGRpcl9saXN0ID0gZ2V0ZW52ICgiU0FORV9DT05GSUdfRElSIik7CisjaWZkZWYgX19C RU9TX18KKyAgICAgIC8qIH4vY29uZmlnL3NldHRpbmdzL1NBTkUgdGFrZXMgcHJlY2VkZW5jZSBv dmVyIC9ldGMvc2FuZS5kLyAqLworICAgICAgaWYgKCFkaXJfbGlzdCkKKwl7CisJICBpZiAoZmlu ZF9kaXJlY3RvcnkoQl9VU0VSX1NFVFRJTkdTX0RJUkVDVE9SWSwgMCwgdHJ1ZSwgcmVzdWx0LCBQ QVRIX01BWCkgPT0gQl9PSykKKwkgICAgeworCSAgICAgIHN0cmNhdChyZXN1bHQsIi9TQU5FIik7 CisJICAgICAgc3RyY2F0KHJlc3VsdCxESVJfU0VQKTsgLyogZG8gYXBwZW5kIHRoZSBkZWZhdWx0 IG9uZXMgKi8KKwkgICAgICBkaXJfbGlzdCA9IHJlc3VsdDsKKwkgICAgfQorCX0KKyNlbmRpZgog ICAgICAgaWYgKGRpcl9saXN0KQogCXsKIAkgIGxlbiA9IHN0cmxlbiAoZGlyX2xpc3QpOwpkaWZm IC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVpL3NhbmVpX2NvbmZpZzIuYyBz YW5lL3NhbmVpL3NhbmVpX2NvbmZpZzIuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1 L3NhbmVpL3NhbmVpX2NvbmZpZzIuYwlUdWUgU2VwICA5IDE3OjA0OjQ1IDIwMDMKKysrIHNhbmUv c2FuZWkvc2FuZWlfY29uZmlnMi5jCVRodSBGZWIgIDMgMTc6MTg6NDMgMjAwNQpAQCAtNDcsNiAr NDcsMTIgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2lm ZGVmIF9fQkVPU19fCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj aW5jbHVkZSA8ZHJpdmVycy9VU0Jfc2Nhbm5lci5oPgorI2VuZGlmCisKICNpbmNsdWRlICJzYW5l L3NhbmVpLmgiCiAjaW5jbHVkZSAic2FuZS9zYW5laV9jb25maWcuaCIKICNpbmNsdWRlICJzYW5l L3NhbmVpX3Njc2kuaCIKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l aS9zYW5laV9pbml0X2RlYnVnLmMgc2FuZS9zYW5laS9zYW5laV9pbml0X2RlYnVnLmMKLS0tIC9E ZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5laS9zYW5laV9pbml0X2RlYnVnLmMJVHVlIFNl cCAgOSAxNzowNDo0NSAyMDAzCisrKyBzYW5lL3NhbmVpL3NhbmVpX2luaXRfZGVidWcuYwlUaHUg RmViICAzIDE3OjE4OjE3IDIwMDUKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQogICBpZiAobWF4X2xl dmVsID49IGxldmVsKQogICAgIHsKKyNpZmRlZiBTX0lGU09DSwogICAgICAgaWYgKCAxID09IGlz ZmR0eXBlKGZpbGVubyhzdGRlcnIpLCBTX0lGU09DSykgKQogCXsKIAkgIG1zZyA9IChjaGFyICop bWFsbG9jIChzaXplb2YoY2hhcikgKiAoc3RybGVuKGJlKSArIHN0cmxlbihmbXQpICsgNCkpOwpA QCAtMTE2LDYgKzExNyw3IEBACiAJICAgIH0KIAl9CiAgICAgICBlbHNlCisjZW5kaWYKIAl7CiAJ ICBmcHJpbnRmIChzdGRlcnIsICJbJXNdICIsIGJlKTsKICAgICAgICAgICB2ZnByaW50ZiAoc3Rk ZXJyLCBmbXQsIGFwKTsKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l aS9zYW5laV9waW8uYyBzYW5lL3NhbmVpL3NhbmVpX3Bpby5jCi0tLSAvRGV2ZWwvc2FuZS1iYWNr ZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfcGlvLmMJVHVlIFNlcCAgOSAxNzowNDo0NSAyMDAzCisr KyBzYW5lL3NhbmVpL3NhbmVpX3Bpby5jCVRodSBGZWIgIDMgMTc6MTc6MzYgMjAwNQpAQCAtNTI0 LDYgKzUyNCw0NSBAQAogCiAjZWxzZSAvKiAhSEFWRV9JT1BFUk0gKi8KIAorI2lmZGVmIF9fQkVP U19fCisKKyNpbmNsdWRlIDxmY250bC5oPgorCitTQU5FX1N0YXR1cworc2FuZWlfcGlvX29wZW4g KGNvbnN0IGNoYXIgKmRldiwgaW50ICpmZHApCit7CisJaW50IGZwOworCQorCS8vIG9wZW4gaW50 ZXJuYWwgcGFyYWxsZWwgcG9ydAorCWZwPW9wZW4oIi9kZXYvcGFyYWxsZWwvcGFyYWxsZWwxIixP X1JEV1IpOworICAKKyAgCSpmZHA9ZnA7CisgIAlpZihmcDwwKSByZXR1cm4gU0FORV9TVEFUVVNf SU5WQUw7CisgIAlyZXR1cm4oU0FORV9TVEFUVVNfR09PRCk7Cit9CisKKwordm9pZCAKK3NhbmVp X3Bpb19jbG9zZSAoaW50IGZkKQoreworCWNsb3NlKGZkKTsKKwlyZXR1cm47Cit9CisKK2ludCAK K3NhbmVpX3Bpb19yZWFkIChpbnQgZmQsIHVfY2hhciAqIGJ1ZiwgaW50IG4pCit7CisJcmV0dXJu KHJlYWQoZmQsYnVmLG4pKTsKK30KKworaW50IAorc2FuZWlfcGlvX3dyaXRlIChpbnQgZmQsIGNv bnN0IHVfY2hhciAqIGJ1ZiwgaW50IG4pCit7CisgIAlyZXR1cm4od3JpdGUoZmQsYnVmLG4pKTsK K30KKworI2Vsc2UgLyogIV9fQkVPU19fICovCisKIFNBTkVfU3RhdHVzCiBzYW5laV9waW9fb3Bl biAoY29uc3QgY2hhciAqZGV2LCBpbnQgKmZkcCkKIHsKQEAgLTU0OSw1ICs1ODgsNiBAQAogewog ICByZXR1cm4gLTE7CiB9CisjZW5kaWYgLyogX19CRU9TX18gKi8KIAogI2VuZGlmIC8qICFIQVZF X0lPUEVSTSAqLwpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVpL3Nh bmVpX3Njc2kuYyBzYW5lL3NhbmVpL3NhbmVpX3Njc2kuYwotLS0gL0RldmVsL3NhbmUtYmFja2Vu ZHMtMS4wLjE1L3NhbmVpL3NhbmVpX3Njc2kuYwlGcmkgSnVsIDMwIDE4OjQ1OjI1IDIwMDQKKysr IHNhbmUvc2FuZWkvc2FuZWlfc2NzaS5jCVR1ZSBKdWwgIDUgMTY6MDY6MjUgMjAwNQpAQCAtNzks NiArNzksNyBAQAogI2RlZmluZSBTT0xBUklTX1VTQ1NJX0lOVEVSRkFDRQkxNgogI2RlZmluZSBN QUNPU1hfSU5URVJGQUNFCTE3CiAjZGVmaW5lIFdJTjMyX0lOVEVSRkFDRQkJMTgKKyNkZWZpbmUg QkVPU19JTlRFUkZBQ0UJCTE5CiAKICNpZmRlZiBIQVZFX1JFU01HUgogIyBpbmNsdWRlIDxyZXNt Z3IuaD4KQEAgLTIwNSw2ICsyMDYsOSBAQAogIyBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjIGluY2x1 ZGUgPGRkay9zY3NpLmg+CiAjIGluY2x1ZGUgPGRkay9udGRkc2NzaS5oPgorI2VsaWYgZGVmaW5l ZCAoX19CRU9TX18pCisjIGRlZmluZSBVU0UgQkVPU19JTlRFUkZBQ0UKKyMgZGVmaW5lIFdFX0hB VkVfRklORF9ERVZJQ0VTCiAjZW5kaWYKIAogI2lmZGVmIERJU0FCTEVfTElOVVhfU0dfSU8KQEAg LTM5MSw2ICszOTUsNyBAQAogc3RydWN0IGNhbV9kZXZpY2UgKmNhbV9kZXZpY2VzW0NBTV9NQVhE RVZTXSA9IHsgTlVMTCB9OwogI2VuZGlmCiAKKyNpZm5kZWYgX19CRU9TX18KIHN0YXRpYyBzdHJ1 Y3QKIHsKICAgdV9pbnQgaW5fdXNlOjE7CQkvKiBpcyB0aGlzIGZkX2luZm8gaW4gdXNlPyAqLwpA QCAtNDAxLDYgKzQwNiw3IEBACiAgIHZvaWQgKnBkYXRhOwkJCS8qIHBsYXRmb3JtLXNwZWNpZmlj IGRhdGEgKi8KIH0KICAqZmRfaW5mbzsKKyNlbmRpZgogCiBzdGF0aWMgdV9jaGFyIGNkYl9zaXpl c1s4XSA9IHsKICAgNiwgMTAsIDEwLCAxMiwgMTIsIDEyLCAxMCwgMTAKQEAgLTQwOCw2ICs0MTQs NyBAQAogI2RlZmluZSBDREJfU0laRShvcGNvZGUpCWNkYl9zaXplc1soKChvcGNvZGUpID4+IDUp ICYgNyldCiAKIAorI2lmbmRlZiBfX0JFT1NfXyAvLyBudWtlIGFsbCBjb2RlLCByZXBsYWNlIGJ5 IEJlT1MgY29kZSBhdCB0aGUgZW5kIG9mIGZpbGUKICNpZiBVU0UgPT0gRE9NQUlOT1NfSU5URVJG QUNFCiAKIC8qCkBAIC01ODE2LDMgKzU4MjMsMzU2IEBACiAgIH0KIAogI2VuZGlmIC8qIFdFX0hB VkVfRklORF9ERVZJQ0VTICovCisKKyNlbmRpZiAvKiBfX0JFT1NfXyAqLworCisjaWYgVVNFID09 IEJFT1NfSU5URVJGQUNFCisKKyNpbmNsdWRlIDxzY3NpLmg+CisjaW5jbHVkZSA8Q0FNLmg+Cisj aW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworYm9vbCBTY2FuRGly KGNoYXIgKmRpcnBhdGgsY29uc3QgY2hhciAqdmVuZG9yLCBjb25zdCBjaGFyICptb2RlbCwKKwkJ CQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJICAgICBpbnQgYnVzLCBpbnQgY2hhbm5lbCwg aW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FORV9TdGF0dXMgKCphdHRhY2gpIChjb25zdCBj aGFyICpkZXYpKTsKKworYm9vbCBTY2FuRGlyKGNoYXIgKmRpcnBhdGgsY29uc3QgY2hhciAqdmVu ZG9yLCBjb25zdCBjaGFyICptb2RlbCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJ ICAgICBpbnQgYnVzLCBpbnQgY2hhbm5lbCwgaW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FO RV9TdGF0dXMgKCphdHRhY2gpIChjb25zdCBjaGFyICpkZXYpKQoreworCURJUiAqZGlyOworCXN0 cnVjdCBkaXJlbnQgKmRpcmVudDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyIHBhdGhbMTAyNF0s cGF0aDFbMTAyNF07CisJCisJaWYoIXZlbmRvcikgcmV0dXJuKHRydWUpOworCQorCXN0cmNweShw YXRoLGRpcnBhdGgpOworCWRpcj1vcGVuZGlyKHBhdGgpOworCWlmKCFkaXIpIHJldHVybiBmYWxz ZTsgCisKKwl3aGlsZSgoZGlyZW50PXJlYWRkaXIoZGlyKSkpCisJeworCQlpZigoc3RyY21wKGRp cmVudC0+ZF9uYW1lLCIuIik9PTApIHx8IChzdHJjbXAoZGlyZW50LT5kX25hbWUsIi4uIik9PTAp KSBjb250aW51ZTsKKworCQlzdHJjcHkocGF0aDEscGF0aCk7CisJCXN0cmNhdChwYXRoMSwiLyIp OworCQlzdHJjYXQocGF0aDEsZGlyZW50LT5kX25hbWUpOwkJCisJCQorCQkvL2dldCBzdGF0CisJ CWlmKHN0YXQocGF0aDEsJnN0KSE9MCkgY29udGludWU7CQkKKwkJaWYoU19JU0RJUihzdC5zdF9t b2RlKSkgU2NhbkRpcihwYXRoMSx2ZW5kb3IsbW9kZWwsdHlwZSxidXMsY2hhbm5lbCxpZCxsdW4s YXR0YWNoKTsKKwkJZWxzZSAKKwkJeyAKKwkJCWludCBkZXZmZDsgCisJCSAgCWludCBlOyAKKwkJ ICAJY2hhciB2ZW5kb3IxWzIwXSxkZXZpY2VbMjBdLHNjYW5uZXJfdHlwZTsgCisJCSAgCXJhd19k ZXZpY2VfY29tbWFuZCByZGM7IAorCQkgIAl1Y2hhciBkYXRhWzM2XSwgc2Vuc2VbMTZdOyAKKwor CQkJaWYoc3RyY21wKGRpcmVudC0+ZF9uYW1lLCAicmF3IikgIT0gMCkgY29udGludWU7IC8vIGp1 c3QgcmF3IGRldmljZXMgCisKKwkJCWRldmZkID0gb3BlbihwYXRoMSwgT19SRE9OTFkpOyAKKwkJ CWlmKGRldmZkIDwgMCkgY29udGludWU7IAorCisJCQkvLyBzZW5kIGlucXVpcnkKKyAgCQkJLyog ZmlsbCBvdXQgb3VyIHJhdyBkZXZpY2UgY29tbWFuZCBkYXRhICovIAorICAJCQlyZGMuZGF0YSA9 IGRhdGE7IAorICAJCQlyZGMuZGF0YV9sZW5ndGggPSAzNjsgCisgIAkJCXJkYy5zZW5zZV9kYXRh ID0gc2Vuc2U7IAorICAJCQlyZGMuc2Vuc2VfZGF0YV9sZW5ndGggPSAxNjsgCisgIAkJCXJkYy50 aW1lb3V0ID0gMTAwMDAwMDsgCisgIAkJCXJkYy5mbGFncyA9IEJfUkFXX0RFVklDRV9EQVRBX0lO OyAKKyAgCQkJcmRjLmNvbW1hbmRfbGVuZ3RoID0gNjsgCisJICAJCXJkYy5jb21tYW5kWzBdID0g MHgxMjsgCisJCSAgCXJkYy5jb21tYW5kWzFdID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5kWzJd ID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5kWzNdID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5k WzRdID0gMzY7IAorICAJCQlyZGMuY29tbWFuZFs1XSA9IDB4MDA7IAorCisgIAkJCWUgPSBpb2N0 bChkZXZmZCwgQl9SQVdfREVWSUNFX0NPTU1BTkQsICZyZGMsIHNpemVvZihyZGMpKTsgCisgIAkJ CWNsb3NlKGRldmZkKTsgCisgIAkJCWlmKChlICE9IDApIHx8IChyZGMuY2FtX3N0YXR1cyAhPSBD QU1fUkVRX0NNUCkpIGNvbnRpbnVlOyAKKworCQkJc2Nhbm5lcl90eXBlID0gZGF0YVswXSAmIDB4 MUY7IAorCQkJbWVtY3B5KHZlbmRvcjEsZGF0YSs4LDgpOworCQkJdmVuZG9yMVs4XT0wOworCQkJ bWVtY3B5KGRldmljZSxkYXRhKzE2LDE2KTsKKwkJCWRldmljZVsxNl09MDsKKwkJCS8vIGhhY2sg Zm9yIHNjYW5uZXJzIHdpdGggd3JvbmcgdHlwZSBpZAorICAJCQlpZihzY2FubmVyX3R5cGUgIT02 ICYmICghKHNjYW5uZXJfdHlwZT09MykpKSBjb250aW51ZTsgLy8gbm90IGEgc2Nhbm5lciwgc2tp cCAKKworCQkJaWYoc3Ryc3RyKHZlbmRvcjEsdmVuZG9yKT09MCkgY29udGludWU7IC8vIHZlbmRv ciBkb2VzIG5vdCBtYXRjaAorCQkJCQkJCisJCQkvLyBjYWxsIGF0dGFjaCBjYWxsYmFjaworCQkJ YXR0YWNoKHBhdGgxKTsKKwkJfSAKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKwordm9pZCBzYW5laV9zY3NpX2ZpbmRfZGV2aWNlcyAoY29uc3QgY2hhciAqdmVuZG9yLCBj b25zdCBjaGFyICptb2RlbCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJICAgICBp bnQgYnVzLCBpbnQgY2hhbm5lbCwgaW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FORV9TdGF0 dXMgKCphdHRhY2gpIChjb25zdCBjaGFyICpkZXYpKQoreworCVNjYW5EaXIoIi9kZXYvYnVzL3Nj c2kiLHZlbmRvcixtb2RlbCx0eXBlLGJ1cyxjaGFubmVsLGlkLGx1bixhdHRhY2gpOworLy8JU2Nh bkRpcigiL2Rldi9kaXNrL2lkZS9hdGFwaSIsdmVuZG9yLG1vZGVsLHR5cGUsYnVzLGNoYW5uZWws aWQsbHVuLGF0dGFjaCk7Cit9CisKK3N0cnVjdCBCZU9TX2ZkaW5mbworeworCWludCBmZDsKKwlT QU5FSV9TQ1NJX1NlbnNlX0hhbmRsZXIgc2Vuc2VfaGFuZGxlcjsKKwl2b2lkICpzZW5zZV9hcmc7 Cit9OworCisKK1NBTkVfU3RhdHVzIHNhbmVpX3Njc2lfb3BlbiAoY29uc3QgY2hhciAqIGRldmlj ZV9uYW1lLCBpbnQgKiBmZCwKKwkJCQkgICAgU0FORUlfU0NTSV9TZW5zZV9IYW5kbGVyIHNlbnNl X2hhbmRsZXIsCisJCQkJICAgIHZvaWQgKnNlbnNlX2FyZykKK3sKKwlpbnQgbGZkOworCXN0cnVj dCBCZU9TX2ZkaW5mbyAqZmRpbmZvOworCQorCWxmZD1vcGVuKGRldmljZV9uYW1lLDApOworCWlm KGxmZDwwKSByZXR1cm4oU0FORV9TVEFUVVNfSU5WQUwpOworCS8vIGJ1aWxkIGRhdGEgc3RydWN0 dXJlCisJZmRpbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgQmVPU19mZGluZm8pKTsKKwlpZigh ZmRpbmZvKSAKKwl7CisJCWNsb3NlKGxmZCk7CisJCXJldHVybihTQU5FX1NUQVRVU19JTlZBTCk7 CisJfQorCWZkaW5mby0+ZmQ9bGZkOworCWZkaW5mby0+c2Vuc2VfaGFuZGxlcj1zZW5zZV9oYW5k bGVyOworCWZkaW5mby0+c2Vuc2VfYXJnPXNlbnNlX2FyZzsKKwkqZmQ9KGludClmZGluZm87CisJ cmV0dXJuKFNBTkVfU1RBVFVTX0dPT0QpOworfQorCisvKiBkdW1teSBmb3IgdGhlIHByb3Bvc2Vk IG5ldyBvcGVuIGNhbGwgKi8KK1NBTkVfU3RhdHVzCitzYW5laV9zY3NpX29wZW5fZXh0ZW5kZWQg KGNvbnN0IGNoYXIgKmRldiwgaW50ICpmZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgU0FO RUlfU0NTSV9TZW5zZV9IYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqaGFuZGxlcl9hcmcsIGludCAqYnVmZmVyc2l6ZSkKK3sKKyAgU0FORV9TdGF0dXMgcmVz OworICByZXMgPSBzYW5laV9zY3NpX29wZW4oZGV2LCBmZHAsIGhhbmRsZXIsIGhhbmRsZXJfYXJn KTsKKyAgaWYgKHNhbmVpX3Njc2lfbWF4X3JlcXVlc3Rfc2l6ZSA8ICpidWZmZXJzaXplKQorICAg ICpidWZmZXJzaXplID0gc2FuZWlfc2NzaV9tYXhfcmVxdWVzdF9zaXplOworICByZXR1cm4gcmVz OworfQorCisvKiBUaGUgZXh0ZW5kZWQgb3BlbiBjYWxsIGFsbG93cyBhIGJhY2tlbmQgdG8gYXNr IGZvciBhIHNwZWNpZmljCisgICBidWZmZXIgc2l6ZS4gc2FuZWlfc2NzaV9vcGVuIHRyaWVzIHRv IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoZQorICAgc2l6ZSBnaXZlbiBieSAqYnVmZmVyc2l6ZSB1 cG9uIGVudHJ5IHRvIHRoaXMgZnVuY3Rpb24uIElmCisgICBzYW5laV9zY3NpX29wZW5fZXh0ZW5k ZWQgcmV0dXJucyBzdWNjZXNzZnVsbHksICpidWZmZXJzaXplCisgICBjb250YWlucyB0aGUgYXZh aWxhYmxlIGJ1ZmZlciBzaXplLiBUaGlzIHZhbHVlIG1heSBiZSBib3RoCisgICBzbWFsbGVyIG9y IGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXF1ZXN0ZWQgYnkgdGhlIGJhY2tlbmQ7CisgICBpdCBj YW4gZXZlbiBiZSB6ZXJvLiBUaGUgYmFja2VuZCBtdXN0IGRlY2lkZSwgaWYgaXQgZ290IGVub3Vn aAorICAgYnVmZmVyIG1lbW9yeSB0byB3b3JrLgorCisgICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9m ICpidWZmZXJzaXplIG1heSBkaWZmZXIgZm9yIGRpZmZlcmVudAorICAgZmlsZXMuCisqLworLy9T QU5FX1N0YXR1cyBzYW5laV9zY3NpX29wZW5fZXh0ZW5kZWQgKAorLy8gICAgICAgY29uc3QgY2hh ciAqIGRldmljZV9uYW1lLCBpbnQgKiBmZCwKKy8vICAgICAgIFNBTkVJX1NDU0lfU2Vuc2VfSGFu ZGxlciBzZW5zZV9oYW5kbGVyLAorLy8gICAgICAgdm9pZCAqc2Vuc2VfYXJnLCBpbnQgKmJ1ZmZl cnNpemUpCisvL3sKKy8vfQorCisvKiBMZXQgYmFja2VuZHMgZGVjaWRlLCB3aGljaCBvcGVuIGNh bGwgdG8gdXNlOgorICAgaWYgSEFWRV9TQU5FSV9TQ1NJX09QRU5fRVhURU5ERUQgaXMgZGVmaW5l ZCwgc2FuZWlfc2NzaV9vcGVuX2V4dGVuZGVkCisgICBtYXkgYmUgdXNlZC4KKyAgIE1heSBhbHNv IGJlIHVzZWQgdG8gZGVjaWRlLCBpZiBzYW5laV9zY3NpX3JlcV9mbHVzaF9hbGwgb3IKKyAgIHNh bmVpX3Njc2lfcmVxX2ZsdXNoX2FsbF9leHRlbmRlZCBzaG91bGQgYmUgdXNlZC4KKyovCisvLyNk ZWZpbmUgSEFWRV9TQU5FSV9TQ1NJX09QRU5fRVhURU5ERUQKKworLyogT25lIG9yIG1vcmUgc2Nz aSBjb21tYW5kcyBjYW4gYmUgZW5xdWV1ZWQgYnkgY2FsbGluZyByZXFfZW50ZXIoKS4KKyAgIFNS QyBpcyB0aGUgcG9pbnRlciB0byB0aGUgU0NTSSBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIHdyaXRl IGRhdGEKKyAgIGFuZCBTUkNfU0laRSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGFuZCBk YXRhLiAgRFNUIGlzIGEKKyAgIHBvaW50ZXIgdG8gYSBidWZmZXIgaW4gd2hpY2ggZGF0YSBpcyBy ZXR1cm5lZCAoaWYgYW55KS4gIEl0IG1heSBiZQorICAgTlVMTCBpZiBubyBkYXRhIGlzIHJldHVy bmVkIGJ5IHRoZSBjb21tYW5kLiAgT24gaW5wdXQgKkRTVF9TSVpFIGlzCisgICB0aGUgc2l6ZSBv ZiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgRFNULCBvbiBleGl0LCAqRFNUX1NJWkUgaXMgc2V0 CisgICB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGluIHRoZSBidWZmZXIgKHdoaWNo IGlzIGxlc3MgdGhhbgorICAgb3IgZXF1YWwgdG8gdGhlIGJ1ZmZlciBzaXplKS4gIERTVF9TSVpF IG1heSBiZSBOVUxMIGlmIG5vIGRhdGEgaXMKKyAgIGV4cGVjdGVkLiAgSURQIGlzIGEgcG9pbnRl ciB0byBhIHZvaWQqIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcworICAgdGhlIGVudGVyZWQgcmVx dWVzdC4KKworICAgTk9URTogU29tZSBzeXN0ZW1zIG1heSBub3Qgc3VwcG9ydCBtdWx0aXBsZSBv dXRzdGFuZGluZyBjb21tYW5kcy4KKyAgIE9uIHN1Y2ggc3lzdGVtcywgZW50ZXIoKSBtYXkgYmxv Y2suICBJbiBvdGhlciB3b3JkcywgaXQgaXMgbm90CisgICBwcm9wZXIgdG8gYXNzdW1lIHRoYXQg ZW50ZXIoKSBpcyBhIG5vbi1ibG9ja2luZyByb3V0aW5lLiAgKi8KK1NBTkVfU3RhdHVzIHNhbmVp X3Njc2lfcmVxX2VudGVyIChpbnQgZmQsCisJCQkJCSBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qg c3JjX3NpemUsCisJCQkJCSB2b2lkICogZHN0LCBzaXplX3QgKiBkc3Rfc2l6ZSwKKwkJCQkJIHZv aWQgKippZHApCit7CisJcmV0dXJuKHNhbmVpX3Njc2lfY21kKGZkLHNyYyxzcmNfc2l6ZSxkc3Qs ZHN0X3NpemUpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIFNDU0kg Y29tbWFuZCB3aXRoIGlkIElELiAgKi8KK1NBTkVfU3RhdHVzIHNhbmVpX3Njc2lfcmVxX3dhaXQg KHZvaWQgKmlkKQoreworCXJldHVybihTQU5FX1NUQVRVU19HT09EKTsKK30KKworLyogVGhpcyBp cyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgaXMgZXF1aXZhbGVudCB0byBhIHBhaXIgb2YK KyAgIGVudGVyKCkvd2FpdCgpIGNhbGxzLiAgKi8KKworU0FORV9TdGF0dXMgc2FuZWlfc2NzaV9j bWQyIChpbnQgZmQsCisJCSAgCQkJCSAgICAgY29uc3Qgdm9pZCAqIGNtZCwgc2l6ZV90IGNtZF9z aXplLAorCQkJCSAgIAkJCSBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qgc3JjX3NpemUsCisJCQkJ ICAgCQkJIHZvaWQgKiBkc3QsIHNpemVfdCAqIGRzdF9zaXplKQoreworCWludCBlLGk7IAorICAJ Ly9pbnQgcGF0aCx0YXJnLGx1bix0eXBlOyAKKyAgCXJhd19kZXZpY2VfY29tbWFuZCByZGM7IAor ICAJdWNoYXIgc2Vuc2VbNjRdOyAKKwlzdHJ1Y3QgQmVPU19mZGluZm8gKmZkaW5mbz0oc3RydWN0 IEJlT1NfZmRpbmZvICopZmQ7CisJdm9pZCAqZGF0YTsKKwlpbnQgZGF0YV9zaXplLGZsYWdzOwor CWludCBsZmQ9ZmRpbmZvLT5mZDsKKwkKKwkvLyBjYWxjIGNvbW1hbmQgbGVuZ3RoCisJLy9jbWRf c2l6ZT1DREJfU0laRSgoKGNoYXIgKilzcmMpWzBdKTsKKwlmb3IoaT0wO2k8Y21kX3NpemU7aSsr KSByZGMuY29tbWFuZFtpXT0oKGNoYXIgKiljbWQpW2ldOworCS8vIGNhbGMgZGlyZWN0aW9uCisJ aWYoKCFkc3QpICYmICgoIWRzdF9zaXplKSB8fCAoKmRzdF9zaXplPT0wKSkpCisJeworCQkvLyB3 cml0ZSBvbmx5CisJCWlmKHNyY19zaXplKQorCQl7CisJCQkvLyB0aGVyZSdzIGRhdGEgdG8gc2Vu ZAorCQkJZGF0YT1zcmM7CisJCQlkYXRhX3NpemU9c3JjX3NpemU7CisJCX0KKwkJZWxzZQorCQl7 CisJCQlkYXRhPTA7CisJCQlkYXRhX3NpemU9MDsKKwkJfQorCQlmbGFncz1CX1JBV19ERVZJQ0Vf UkVQT1JUX1JFU0lEVUFMOworCX0KKwllbHNlCisJeworCQkvLyByZWFkIHRvbworCQlkYXRhPWRz dDsKKwkJZGF0YV9zaXplPSpkc3Rfc2l6ZTsKKwkJZmxhZ3M9Ql9SQVdfREVWSUNFX0RBVEFfSU58 Ql9SQVdfREVWSUNFX1NIT1JUX1JFQURfVkFMSUR8Ql9SQVdfREVWSUNFX1JFUE9SVF9SRVNJRFVB TDsKKwl9CisgIAkvKiBmaWxsIG91dCBvdXIgcmF3IGRldmljZSBjb21tYW5kIGRhdGEgKi8gCisg IAlyZGMuZGF0YSA9IGRhdGE7IAorICAJcmRjLmRhdGFfbGVuZ3RoID1kYXRhX3NpemU7IAorCisg IAlyZGMuc2Vuc2VfZGF0YSA9IHNlbnNlOyAKKyAgCXJkYy5zZW5zZV9kYXRhX2xlbmd0aCA9IDY0 OyAKKyAgCXJkYy50aW1lb3V0ID0gMTAwMDAwMDAwOyAKKworICAJcmRjLmZsYWdzID0gZmxhZ3M7 IAorICAJcmRjLmNvbW1hbmRfbGVuZ3RoID0gY21kX3NpemU7IAorCisgIAllID0gaW9jdGwobGZk LCBCX1JBV19ERVZJQ0VfQ09NTUFORCwgJnJkYywgc2l6ZW9mKHJkYykpOyAKKyAgCWlmKChlICE9 IDApIHx8IChyZGMuY2FtX3N0YXR1cyAhPSBDQU1fUkVRX0NNUCkpIHJldHVybihTQU5FX1NUQVRV U19JTlZBTCk7CisgIAorICAJLy8gY2FsbCBzZW5zZSBoYW5kbGVyIGlmIHRoZXJlJ3Mgc2Vuc2Ug ZGF0YQorICAJaWYocmRjLmNhbV9zdGF0dXMmIENBTV9BVVRPU05TX1ZBTElEKSAKKyAgCQkJCWU9 ZmRpbmZvLT5zZW5zZV9oYW5kbGVyKGZkLHNlbnNlLGZkaW5mby0+c2Vuc2VfYXJnKTsKKworCS8v IHJldHVybiByZWFkIGxlbmd0aAorCWlmKGRzdCkgKmRzdF9zaXplPXJkYy5kYXRhX2xlbmd0aDsK KyAgCXJldHVybihlKTsgCit9CisKKworU0FORV9TdGF0dXMgc2FuZWlfc2NzaV9jbWQgKGludCBm ZCwKKwkJCQkgICBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qgc3JjX3NpemUsCisJCQkJICAgdm9p ZCAqIGRzdCwgc2l6ZV90ICogZHN0X3NpemUpCit7CisJaW50IGUsaTsgCisgIAkvL2ludCBwYXRo LHRhcmcsbHVuLHR5cGU7IAorICAJcmF3X2RldmljZV9jb21tYW5kIHJkYzsgCisgIAl1Y2hhciBz ZW5zZVs2NF07IAorCXN0cnVjdCBCZU9TX2ZkaW5mbyAqZmRpbmZvPShzdHJ1Y3QgQmVPU19mZGlu Zm8gKilmZDsKKwl2b2lkICpkYXRhOworCWludCBkYXRhX3NpemUsY21kX3NpemUsZmxhZ3M7CisJ aW50IGxmZD1mZGluZm8tPmZkOworCQorCS8vIGNhbGMgY29tbWFuZCBsZW5ndGgKKwljbWRfc2l6 ZT1DREJfU0laRSgoKGNoYXIgKilzcmMpWzBdKTsKKwlmb3IoaT0wO2k8Y21kX3NpemU7aSsrKSBy ZGMuY29tbWFuZFtpXT0oKGNoYXIgKilzcmMpW2ldOworCS8vIGNhbGMgZGlyZWN0aW9uCisJaWYo KCFkc3QpICYmICgoIWRzdF9zaXplKSB8fCAoKmRzdF9zaXplPT0wKSkpCisJeworCQkvLyB3cml0 ZSBvbmx5CisJCWlmKGNtZF9zaXplPHNyY19zaXplKQorCQl7CisJCQkvLyB0aGVyZSdzIGRhdGEg dG8gc2VuZAorCQkJZGF0YT0mKCgoY2hhciAqKXNyYylbY21kX3NpemVdKTsKKwkJCWRhdGFfc2l6 ZT1zcmNfc2l6ZS1jbWRfc2l6ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWRhdGE9MDsKKwkJCWRh dGFfc2l6ZT0wOworCQl9CisJCWZsYWdzPUJfUkFXX0RFVklDRV9SRVBPUlRfUkVTSURVQUw7CisJ fQorCWVsc2UKKwl7CisJCS8vIHJlYWQgdG9vCisJCWRhdGE9ZHN0OworCQlkYXRhX3NpemU9KmRz dF9zaXplOworCQlmbGFncz1CX1JBV19ERVZJQ0VfREFUQV9JTnxCX1JBV19ERVZJQ0VfU0hPUlRf UkVBRF9WQUxJRHxCX1JBV19ERVZJQ0VfUkVQT1JUX1JFU0lEVUFMOworCX0KKyAgCS8qIGZpbGwg b3V0IG91ciByYXcgZGV2aWNlIGNvbW1hbmQgZGF0YSAqLyAKKyAgCXJkYy5kYXRhID0gZGF0YTsg CisgIAlyZGMuZGF0YV9sZW5ndGggPWRhdGFfc2l6ZTsgCisKKyAgCXJkYy5zZW5zZV9kYXRhID0g c2Vuc2U7IAorICAJcmRjLnNlbnNlX2RhdGFfbGVuZ3RoID0gNjQ7IAorICAJcmRjLnRpbWVvdXQg PSAxMDAwMDAwMDA7IAorCisgIAlyZGMuZmxhZ3MgPSBmbGFnczsgCisgIAlyZGMuY29tbWFuZF9s ZW5ndGggPSBjbWRfc2l6ZTsgCisKKyAgCWUgPSBpb2N0bChsZmQsIEJfUkFXX0RFVklDRV9DT01N QU5ELCAmcmRjLCBzaXplb2YocmRjKSk7IAorICAJaWYoKGUgIT0gMCkgfHwgKHJkYy5jYW1fc3Rh dHVzICE9IENBTV9SRVFfQ01QKSkgcmV0dXJuKFNBTkVfU1RBVFVTX0lOVkFMKTsKKyAgCisgIAkv LyBjYWxsIHNlbnNlIGhhbmRsZXIgaWYgdGhlcmUncyBzZW5zZSBkYXRhCisgIAlpZihyZGMuY2Ft X3N0YXR1cyYgQ0FNX0FVVE9TTlNfVkFMSUQpIAorICAJCQkJZT1mZGluZm8tPnNlbnNlX2hhbmRs ZXIoZmQsc2Vuc2UsZmRpbmZvLT5zZW5zZV9hcmcpOworCisJLy8gcmV0dXJuIHJlYWQgbGVuZ3Ro CisJaWYoZHN0KSAqZHN0X3NpemU9cmRjLmRhdGFfbGVuZ3RoOworICAJcmV0dXJuKGUpOyAKK30K KworLyogRmx1c2ggYWxsIHBlbmRpbmcgU0NTSSBjb21tYW5kcy4gVGhpcyBmdW5jdGlvbiB3b3Jr IG9ubHksCisgICBpZiB6ZXJvIG9yIG9uZSBTQ1NJIGZpbGUgaGFuZGxlcyBhcmUgb3Blbi4KKyov Cit2b2lkIHNhbmVpX3Njc2lfcmVxX2ZsdXNoX2FsbCAodm9pZCkKK3sKK30KKworLyogRmx1c2gg YWxsIFNDU0kgY29tbWFuZHMgcGVuZGluZyBmb3Igb25lIGhhbmRsZSAqLwordm9pZCBzYW5laV9z Y3NpX3JlcV9mbHVzaF9hbGxfZXh0ZW5kZWQgKGludCBmZCkKK3sKK30KKwordm9pZCBzYW5laV9z Y3NpX2Nsb3NlIChpbnQgZmQpCit7CisJc3RydWN0IEJlT1NfZmRpbmZvICpmZGluZm89KHN0cnVj dCBCZU9TX2ZkaW5mbyAqKWZkOworCisJY2xvc2UoZmRpbmZvLT5mZCk7CisJZnJlZShmZGluZm8p OworfQorCisjZW5kaWYKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l aS9zYW5laV90aHJlYWQuYyBzYW5lL3NhbmVpL3NhbmVpX3RocmVhZC5jCi0tLSAvRGV2ZWwvc2Fu ZS1iYWNrZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfdGhyZWFkLmMJVGh1IE9jdCAxNCAxMzo0OTow NCAyMDA0CisrKyBzYW5lL3NhbmVpL3NhbmVpX3RocmVhZC5jCVR1ZSBGZWIgMTUgMjA6NTI6MzIg MjAwNQpAQCAtNjQsNyArNjQsMTEgQEAKICMgZGVmaW5lIElOQ0xfRE9TUFJPQ0VTUwogIyBpbmNs dWRlIDxvczIuaD4KICNlbmRpZgotI2lmICFkZWZpbmVkIFVTRV9QVEhSRUFEICYmICFkZWZpbmVk IEhBVkVfT1MyX0gKKyNpZmRlZiBfX0JFT1NfXworIyB1bmRlZiBVU0VfUFRIUkVBRCAvKiBmb3Jj ZSAqLworIyBpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkIFVTRV9Q VEhSRUFEICYmICFkZWZpbmVkIEhBVkVfT1MyX0ggJiYgIWRlZmluZWQgX19CRU9TX18KICMgaW5j bHVkZSA8c3lzL3dhaXQuaD4KICNlbmRpZgogI2lmIGRlZmluZWQgVVNFX1BUSFJFQUQKQEAgLTEw NSw3ICsxMDksNyBAQAogU0FORV9Cb29sCiBzYW5laV90aHJlYWRfaXNfZm9ya2VkKCB2b2lkICkK IHsKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJfSAorI2lmIGRl ZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmluZWQgX19CRU9T X18KIAlyZXR1cm4gU0FORV9GQUxTRTsKICNlbHNlCiAJcmV0dXJuIFNBTkVfVFJVRTsKQEAgLTE4 Miw3ICsxODYsNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UgLyogSEFWRV9PUzJfSCAqLwor I2VsaWYgZGVmaW5lZCBfX0JFT1NfXworCitzdGF0aWMgaW50MzIKK2xvY2FsX3RocmVhZCggdm9p ZCAqYXJnICkKK3sKKwlwVGhyZWFkRGF0YURlZiBsdGQgPSAocFRocmVhZERhdGFEZWYpYXJnOwor CisJREJHKCAyLCAidGhyZWFkIHN0YXJ0ZWQsIGNhbGxpbmcgZnVuYygpIG5vdy4uLlxuIiApOwor CWx0ZC0+c3RhdHVzID0gbHRkLT5mdW5jKCBsdGQtPmZ1bmNfZGF0YSApOworCisJREJHKCAyLCAi ZnVuYygpIGRvbmUgLSBzdGF0dXMgPSAlZFxuIiwgbHRkLT5zdGF0dXMgKTsKKwlyZXR1cm4gbHRk LT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGFydHMgYSBuZXcgdGhyZWFkIG9yIHByb2Nlc3MKKyAq IHBhcmFtZXRlcnM6CisgKiBzdGFyICBhZGRyZXNzIG9mIHJlYWRlciBmdW5jdGlvbgorICogYXJn cyAgcG9pbnRlciB0byBzY2FubmVyIGRhdGEgc3RydWN0dXJlCisgKgorICovCitpbnQKK3NhbmVp X3RocmVhZF9iZWdpbiggaW50ICgqZnVuYykodm9pZCAqYXJncyksIHZvaWQqIGFyZ3MgKQorewor CWludCAgICAgICAgICAgcGlkOworCisJdGQuZnVuYyAgICAgID0gZnVuYzsKKwl0ZC5mdW5jX2Rh dGEgPSBhcmdzOworCisJcGlkID0gc3Bhd25fdGhyZWFkKCBsb2NhbF90aHJlYWQsICJzYW5lIHRo cmVhZCAoeWVzIHRoZXkgY2FuIGJlKSIsIEJfTk9STUFMX1BSSU9SSVRZLCAodm9pZCopJnRkICk7 CisJaWYgKCBwaWQgPCBCX09LICkgeworCQlEQkcoIDEsICJzcGF3bl90aHJlYWQoKSBmYWlsZWRc biIgKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIHJlc3VtZV90aHJlYWQocGlkKSA8IEJfT0sg KSB7CisJCURCRyggMSwgInJlc3VtZV90aHJlYWQoKSBmYWlsZWRcbiIgKTsKKwkJcmV0dXJuIC0x OworCX0KKyAgIAorCURCRyggMiwgInNwYXduX3RocmVhZCgpIGNyZWF0ZWQgdGhyZWFkICVkXG4i LCBwaWQgKTsKKwlyZXR1cm4gcGlkOworfQorCitpbnQKK3NhbmVpX3RocmVhZF93YWl0cGlkKCBp bnQgcGlkLCBpbnQgKnN0YXR1cyApCit7CisgIGludDMyIHN0OworICBpZiAoIHdhaXRfZm9yX3Ro cmVhZChwaWQsICZzdCkgPCBCX09LICkKKyAgICByZXR1cm4gLTE7CisgIGlmICggc3RhdHVzICkK KyAgICAqc3RhdHVzID0gKGludClzdDsKKyAgcmV0dXJuIHBpZDsKK30KKworaW50CitzYW5laV90 aHJlYWRfc2VuZHNpZyggaW50IHBpZCwgaW50IHNpZyApCit7CisJaWYgKHNpZyA9PSBTSUdLSUxM KQorCQlzaWcgPSBTSUdLSUxMVEhSOworCXJldHVybiBraWxsKHBpZCwgc2lnKTsKK30KKworI2Vs c2UgLyogSEFWRV9PUzJfSCwgX19CRU9TX18gKi8KIAogI2lmZGVmIFVTRV9QVEhSRUFECiAKQEAg LTQwNCw3ICs0NzAsNyBAQAogU0FORV9TdGF0dXMKIHNhbmVpX3RocmVhZF9nZXRfc3RhdHVzKCBp bnQgcGlkICkKIHsKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJf SAorI2lmIGRlZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmlu ZWQgX19CRU9TX18KIAlfVkFSX05PVF9VU0VEKCBwaWQgKTsKIAogCXJldHVybiB0ZC5zdGF0dXM7 CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfdXNiLmMg c2FuZS9zYW5laS9zYW5laV91c2IuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3Nh bmVpL3NhbmVpX3VzYi5jCVN1biBPY3QgIDMgMTY6MTg6MTcgMjAwNAorKysgc2FuZS9zYW5laS9z YW5laV91c2IuYwlUdWUgTWFyICAxIDA5OjA4OjA0IDIwMDUKQEAgLTEzMyw2ICsxMzMsOSBAQAog ICB2b2lkICpkYXRhOwogfQogY21zZzsKKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisjaW5jbHVk ZSA8ZHJpdmVycy9VU0Jfc2Nhbm5lci5oPgorI2luY2x1ZGUgPGtlcm5lbC9PUy5oPgogI2VuZGlm IC8qIF9fbGludXhfXyAqLwogCiBzdGF0aWMgU0FORV9Cb29sIGluaXRlZCA9IFNBTkVfRkFMU0U7 CkBAIC0xOTcsNyArMjAwLDIwIEBACiAJREJHICgzLCAic2FuZWlfdXNiX2dldF92ZW5kb3JfcHJv ZHVjdDogaW9jdGwgKHByb2R1Y3QpICIKIAkgICAgICJvZiBkZXZpY2UgJWQgZmFpbGVkOiAlc1xu IiwgZmQsIHN0cmVycm9yIChlcnJubykpOwogICAgIH0KLSNlbmRpZiAvKiBkZWZpbmVkIChfX2xp bnV4X18pICovCisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorICB7CisgICAgdWludDE2IHZlbmRv ciwgcHJvZHVjdDsKKyAgICBpZiAoaW9jdGwgKGZkLCBCX1NDQU5ORVJfSU9DVExfVkVORE9SLCAm dmVuZG9yKSAhPSBCX09LKQorICAgICAgREJHICgzLCAia2VybmVsX2dldF92ZW5kb3JfcHJvZHVj dDogaW9jdGwgKHZlbmRvcikgIgorCSAgICJvZiBkZXZpY2UgJWQgZmFpbGVkOiAlc1xuIiwgZmQs IHN0cmVycm9yIChlcnJubykpOworICAgIGlmIChpb2N0bCAoZmQsIEJfU0NBTk5FUl9JT0NUTF9Q Uk9EVUNULCAmcHJvZHVjdCkgIT0gQl9PSykKKyAgICAgIERCRyAoMywgInNhbmVpX3VzYl9nZXRf dmVuZG9yX3Byb2R1Y3Q6IGlvY3RsIChwcm9kdWN0KSAiCisJICAgIm9mIGRldmljZSAlZCBmYWls ZWQ6ICVzXG4iLCBmZCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgLyogY29weSBmcm9tIDE2IHRv IDMyIGJpdCB2YWx1ZSAqLworICAgICp2ZW5kb3JJRCA9IHZlbmRvcjsKKyAgICAqcHJvZHVjdElE ID0gcHJvZHVjdDsKKyAgfQorI2VuZGlmIC8qIGRlZmluZWQgKF9fbGludXhfXyksIGRlZmluZWQo X19CRU9TX18pICovCiAgICAgICAvKiBwdXQgbW9yZSBvcy1kZXBlbmRhbnQgc3R1ZmYgLi4uICov CiB9CiAKQEAgLTIxMSw2ICsyMjcsOCBAQAogICAgICIvZGV2L3VzYi8iLCAic2Nhbm5lciIsCiAj ZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmlu ZWQgKF9fT3BlbkJTRF9fKQogICAgICIvZGV2LyIsICJ1c2Nhbm5lciIsCisjZWxpZiBkZWZpbmVk KF9fQkVPU19fKQorICAgICIvZGV2L3NjYW5uZXIvdXNiLyIsICIiLAogI2VuZGlmCiAgICAgMCwg MAogICB9OwpAQCAtMjY2LDYgKzI4NCwxMCBAQAogICAgICAgCiAgICAgICB3aGlsZSAoKGRpcl9l bnRyeSA9IHJlYWRkaXIgKGRpcikpICE9IDApCiAJeworCSAgLy8gc2tpcCBzdGFuZGFyZCBkaXIg ZW50cmllcworCSAgaWYgKHN0cmNtcChkaXJfZW50cnktPmRfbmFtZSwgIi4iKSA9PSAwIHx8IHN0 cmNtcChkaXJfZW50cnktPmRfbmFtZSwgIi4uIikgPT0gMCkKKwkgIAljb250aW51ZTsKKwkgIAkJ CiAJICBpZiAoc3RybmNtcCAoYmFzZV9uYW1lLCBkaXJfZW50cnktPmRfbmFtZSwgc3RybGVuIChi YXNlX25hbWUpKSA9PSAwKQogCSAgICB7CiAJICAgICAgaWYgKHN0cmxlbiAoZGlyX25hbWUpICsg c3RybGVuIChkaXJfZW50cnktPmRfbmFtZSkgKyAxID4gc2l6ZW9mIChkZXZuYW1lKSkKQEAgLTk3 NCw2ICs5OTYsMjYgQEAKICAgICAgIGlmICgocnR5cGUgJiAweDgwKSAmJiBkZWJ1Z19sZXZlbCA+ IDEwKQogCXByaW50X2J1ZmZlciAoZGF0YSwgbGVuKTsKICAgICAgIHJldHVybiBTQU5FX1NUQVRV U19HT09EOworI2VsaWYgZGVmaW5lZChfX0JFT1NfXykKKyAgICAgIHN0cnVjdCB1c2Jfc2Nhbm5l cl9pb2N0bF9jdHJsbXNnIGM7CisKKyAgICAgIGMucmVxLnJlcXVlc3RfdHlwZSA9IHJ0eXBlOwor ICAgICAgYy5yZXEucmVxdWVzdCA9IHJlcTsKKyAgICAgIGMucmVxLnZhbHVlID0gdmFsdWU7Cisg ICAgICBjLnJlcS5pbmRleCA9IGluZGV4OworICAgICAgYy5yZXEubGVuZ3RoID0gbGVuOworICAg ICAgYy5kYXRhID0gZGF0YTsKKworICAgICAgaWYgKGlvY3RsIChkZXZpY2VzW2RuXS5mZCwgQl9T Q0FOTkVSX0lPQ1RMX0NUUkxNU0csICZjKSA8IDApCisJeworCSAgREJHICg1LCAic2FuZWlfdXNi X2NvbnRyb2xfbXNnOiBTQ0FOTkVSX0lPQ1RMX0NUUkxNU0cgZXJyb3IgLSAlc1xuIiwKKwkgICAg ICAgc3RyZXJyb3IgKGVycm5vKSk7CisJICByZXR1cm4gU0FORV9TVEFUVVNfSU9fRVJST1I7CisJ fQorCWlmICgocnR5cGUgJiAweDgwKSAmJiBkZWJ1Z19sZXZlbCA+IDEwKQorCQlwcmludF9idWZm ZXIgKGRhdGEsIGxlbik7CisJCisJcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CiAjZWxzZSAvKiBu b3QgX19saW51eF9fICovCiAgICAgICBEQkcgKDUsICJzYW5laV91c2JfY29udHJvbF9tc2c6IG5v dCBzdXBwb3J0ZWQgb24gdGhpcyBPU1xuIik7CiAgICAgICByZXR1cm4gU0FORV9TVEFUVVNfVU5T VVBQT1JURUQ7Cg== ------------Zoidberg-BeMail-temp----------